Div+CSS+JS树型菜单

在网上找了一个Div+CSS+JS树型菜单,测试了一下在FF下有点问题,但是基本的功能都有了,收藏一下,学习学习。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Div+CSS+JS树型菜单,可刷新</title>
<style type="text/css">
<!--
*{margin:0;padding:0;border:0;}
body {
        font-family: arial, 宋体, serif;
        font-size:12px;
}
#nav {
        width:180px;
     line-height: 24px; 
        list-style-type: none;
        text-align:left;
     /*定义整个ul菜单的行高和背景色*/
}
/*==================一级目录===================*/
#nav a {
        width: 160px; 
        display: block;
        padding-left:20px;
        /*Width(一定要),否则下面的Li会变形*/
}
#nav li {
        background:#CCC; /*一级目录的背景色*/
        border-bottom:#FFF 1px solid; /*下面的一条白边*/
        float:left;
        /*float:left,本不应该设置,但由于在Firefox不能正常显示
        继承Nav的width,限制宽度,li自动向下延伸*/
}
#nav li a:hover{
        background:#CC0000;        /*一级目录onMouseOver显示的背景色*/
}
#nav a:link   {
        color:#666; text-decoration:none;
}
#nav a:visited   {
        color:#666;text-decoration:none;
}
#nav a:hover   {
        color:#FFF;text-decoration:none;font-weight:bold;
}
/*==================二级目录===================*/
#nav li ul {
        list-style:none;
        text-align:left;
}
#nav li ul li{       
        background: #EBEBEB; /*二级目录的背景色*/
}
#nav li ul a{
          padding-left:20px;
          width:160px;
        /* padding-left二级目录中文字向右移动,但Width必须重新设置=(总宽度-padding-left)*/
}
/*下面是二级目录的链接样式*/
#nav li ul a:link   {
        color:#666; text-decoration:none;
}
#nav li ul a:visited   {
        color:#666;text-decoration:none;
}
#nav li ul a:hover {
        color:#F3F3F3;
        text-decoration:none;
        font-weight:normal;
        background:#CC0000;
        /* 二级onmouseover的字体颜色、背景色*/
}
/*==============================*/
#nav li:hover ul {
        left: auto;
}
#nav li.sfhover ul {
        left: auto;
}
#content {
        clear: left; 
}
#nav ul.collapsed {
        display: none;
}
-->
#PARENT{
        width:300px;
        padding-left:20px;
}
</style>
</head>
<body>
<div id="PARENT">
<ul id="nav">
<li><a href="#Menu=ChildMenu1" id="my_site"   οnclick="DoMenu('ChildMenu1')">我的网站</a>
        <ul id="ChildMenu1" class="collapsed">
        <li><a href="#">www.netany.net</a></li>
         <li><a href="#">www.netany.net</a></li>
        <li><a href="#">www.netany.net</a></li>
        </ul>
</li>
<li><a href="#Menu=ChildMenu2" οnclick="DoMenu('ChildMenu2')">我的帐务</a>
        <ul id="ChildMenu2" class="collapsed">
        <li><a href="#">支付</a></li>
        <li><a href="#">网上支付</a></li>
        <li><a href="#">登记汇款</a></li>
        <li><a href="#">在线招领</a></li>
        <li><a href="#">历史帐务</a></li>
        </ul>
</li>
<li><a href="#Menu=ChildMenu3" οnclick="DoMenu('ChildMenu3')">网站管理</a>
        <ul id="ChildMenu3" class="collapsed">
        <li><a href="#">登录</a></li>
        <li><a href="#">管理</a></li>
        <li><a href="#">管理</a></li>
        <li><a href="#">管理</a></li>
        </ul>
</li>
</ul>
</div>
</body>
</html>
<script type=text/javascript><!--
var LastLeftID = "";
function menuFix() {
        var obj = document.getElementById("nav").getElementsByTagName("li");
       
        for (var i=0; i<obj.length; i++) {
               obj[i].οnmοuseοver=function() {
                      this.className+=(this.className.length>0? " ": "") + "sfhover";
               }
               obj[i].onMouseDown=function() {
                      this.className+=(this.className.length>0? " ": "") + "sfhover";
               }
               obj[i].onMouseUp=function() {
                      this.className+=(this.className.length>0? " ": "") + "sfhover";
               }
               obj[i].οnmοuseοut=function() {
                      this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
               }
        }
}
function DoMenu(emid)
{
        var obj = document.getElementById(emid);       
        obj.className = (obj.className.toLowerCase() == "expanded"?"collapsed":"expanded");
        if((LastLeftID!="")&&(emid!=LastLeftID))        //关闭上一个Menu
        {
               document.getElementById(LastLeftID).className = "collapsed";
        }
        LastLeftID = emid;
}
function GetMenuID()
{
        var MenuID="";
        var _paramStr = new String(window.location.href);
        var _sharpPos = _paramStr.indexOf("#");
       
        if (_sharpPos >= 0 && _sharpPos < _paramStr.length - 1)
        {
               _paramStr = _paramStr.substring(_sharpPos + 1, _paramStr.length);
        }
        else
        {
               _paramStr = "";
        }
       
        if (_paramStr.length > 0)
        {
               var _paramArr = _paramStr.split("&");
               if (_paramArr.length>0)
               {
                      var _paramKeyVal = _paramArr[0].split("=");
                      if (_paramKeyVal.length>0)
                      {
                             MenuID = _paramKeyVal[1];
                      }
               }
               /*
               if (_paramArr.length>0)
               {
                      var _arr = new Array(_paramArr.length);
               }
              
               //取所有#后面的,菜单只需用到Menu
               //for (var i = 0; i < _paramArr.length; i++)
               {
                      var _paramKeyVal = _paramArr[i].split('=');
                     
                      if (_paramKeyVal.length>0)
                      {
                             _arr[_paramKeyVal[0]] = _paramKeyVal[1];
                      }              
               }
               */
        }
       
        if(MenuID!="")
        {
               DoMenu(MenuID)
        }
}
GetMenuID();        //*这两个function的顺序要注意一下,不然在Firefox里GetMenuID()不起效果
menuFix();
var my_site_obj=document.getElementById("my_site");
my_site_obj.onclick();
--></script>


【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
当然!以下是一个示例,使用 HTML、CSS 和 JavaScript 创建一个可以展开收缩并且可以选择的树形结构: ```html <!DOCTYPE html> <html> <head> <style> /* 树节点的样式 */ .tree-node { margin-left: 20px; cursor: pointer; } /* 树节点的连接线 */ .tree-connector { position: absolute; border-left: 1px solid #ccc; height: 100%; left: -20px; } </style> </head> <body> <div id="tree"> <ul> <li class="tree-node" onclick="toggleNode(this)"> <span>Root</span> <ul> <li class="tree-node" onclick="toggleNode(this)"> <span>Child 1</span> <ul> <li><input type="checkbox" class="tree-checkbox">Grandchild 1</li> <li><input type="checkbox" class="tree-checkbox">Grandchild 2</li> </ul> </li> <li><input type="checkbox" class="tree-checkbox">Child 2</li> <li class="tree-node" onclick="toggleNode(this)"> <span>Child 3</span> <ul> <li><input type="checkbox" class="tree-checkbox">Grandchild 3</li> </ul> </li> </ul> </li> </ul> </div> <script> // 展开/收缩节点 function toggleNode(node) { const childUl = node.querySelector('ul'); if (childUl) { childUl.style.display = childUl.style.display === 'none' ? 'block' : 'none'; } } </script> </body> </html> ``` 这个示例创建了一个带有展开收缩功能和可选择节点的树形结构。每个节点都使用 `<li>` 标签表示,并使用 `<ul>` 标签嵌套子节点。点击每个节点时,通过 JavaScript 的 `onclick` 事件触发 `toggleNode()` 函数来展开或收缩子节点。同时,每个节点下方有一个复选框,可以选择或取消选择该节点。 你可以根据自己的需求修改这个示例,添加更多节点或自定义样式。希望能对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值