zoukankan      html  css  js  c++  java
  • 原创的基于HTML/CSS/JavaScript的层级目录树

      之前参加过一些基于HTML/CSS/JavaScript的项目,当在页面中需要生成一颗目录树时,总是首先想着网上有没有现成的生成树的源代码,比如dtreezthee,或者使用一些javascript框架类库(比如目前Dojo和ExtJs)自带的树模型或插件。

       今天趁项目不是很紧,有时间可以自己考虑原创一颗树,完成这个小的尝试后想想不是很难,效果如下:

            

         如果您觉得我做的目录树效果不怎么样,您可以去投靠上面我提到的现成的做法,可以不用继续阅读本文。
       上面示例的原代码如下,为了保持完整性,我没有将代码中德HTML、CSS、JavaScript分开,都放在一个文件里,若你引用我提供的层级目录树代码,请将三者合理放在不同的文件中。需要注意的是,您需要在目录树上配置链接地址。相信你熟悉HTML、CSS、JavaScript,应该知道如何对下面的代码进行改造。享受你的美好生活吧,感受网页开发可以如此简单!
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="author" content="心梦缘ocean ocl" />
      <title>My tree demo</title>
      <style type="text/css">
          /*主页面样式*/
          .leftNav {
            width: 20%;
            height:500px;
            border:#B9E0F7 1px solid;
            margin-left: 1%;
            margin-right: 1%;
        }
          #footer {
          color:#808080;
          line-height: 1.6em;
          padding: 0 0 1em 0;
        }
        /*我的树样式表*/
        .treeDiv {
          color: #636363;
          font-size: 14px;
          font-weight: normal;
          background-color: #fff;
          color: black;
          overflow: auto;
          padding: 0 0 1em 0;
          overflow-x: hidden;
        }
        
        .treeNode {
          white-space: nowrap;
          text-indent: -14px;
          margin: 6px 2px 5px 14px;
        }
        
        a.treeUnselected:hover, a.treeSelected:hover {
          background-color: #BFD9ED;
          text-decoration: none;
        }
        
        a.treeUnselected, a.treeSelected {
          color: black;
          padding: 1px 3px 1px 0;
          text-decoration: none;
        }
        a.treeSelected {
          background-color: #B9E0F7;
        }
        a.treeUnselected {
          background-color: transparent;
        }
        
        .treeSubnodes {
          display: block;
        }
        .treeSubnodesHidden {
          display: none;
        }
        .treeNode img.treeNoLinkImage, .treeNode img.treeLinkImage {
          height: 15px;
          margin-left: 5px;
          margin-right: 0px;
          width: 15px;
        }
        .treeNode img.treeLinkImage {
          cursor: pointer;
        }
        
        div.treeNode a, div.treeNode span.apiRoot {
          display: inline-block;
          margin-left: 24px;
          text-indent: 0;
          white-space: normal;
          width: 95%;
          word-wrap: break-word;
        }
        
        div.treeNode span.category {
          cursor: pointer;
        }
      </style>
    </head>
    <body>
    <div class="leftNav">
        <div id="samplesToc">
            <div id="tree" style="top: 35px; left: 0px;" class="treeDiv">
              <div id="treeRoot" onselectstart="return false" ondragstart="return false">
                <div class="treeNode">
                  <img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage">
                  <span onclick="expandCollapse(this.parentNode)" class="category">目录节点一 </span>
                  <div class="treeSubnodesHidden">
                      
                      <div class="treeNode">
                           <img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage">
                           <span onclick="expandCollapse(this.parentNode)" class="category">目录节点一子目录 </span>
                           <div class="treeSubnodesHidden">
                               <div class="treeNode">
                                  <a href="#" class="treeUnselected" onclick="clickAnchor(this)">二级叶子结点一</a>
                            </div>
                            <div class="treeNode">
                                  <a href="#" class="treeUnselected" onclick="clickAnchor(this)">二级叶子结点二</a>
                            </div>
                        </div>
                      </div>
                      
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点一</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点二</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点三</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点四</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点五</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点六</a>
                    </div>
                  </div>
                </div>
                <!--end block-->
                <div class="treeNode">
                  <img src="../graphics/treenodeplus.gif" onclick="expandCollapse(this.parentNode)" class="treeLinkImage">
                  <span onclick="expandCollapse(this.parentNode)" class="category">目录节点二</span>
                  <div class="treeSubnodesHidden">
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点一</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点二</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点三</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点四</a>
                    </div>
                    <div class="treeNode">
                      <a href="#" class="treeUnselected" onclick="clickAnchor(this)">叶子结点五</a>
                    </div>
                  </div>
                </div>
                <!--end block-->
              </div>
            </div>
        </div> <!-- end samplesToc -->
    </div> <!-- end leftNav -->
    <div class="right content">
    
    </div><!-- end main  content-->
    <div id="footer" align="center">
              
    </div><!-- end footer-->
    <script type="text/javascript">
    var treeSelected = null;//选中的树节点
    var imgPlus = new Image();
    imgPlus.src="../graphics/treenodeplus.gif";
    var imgMinus = new Image();
    imgMinus.src="../graphics/treenodeminus.gif";
    //父节点展开事件
    function expandCollapse(el)
    {
        //如果父节点有字节点(class 属性为treeSubnodesHidden),展开所有子节点
        if (el.className!= "treeNode"){
            return;    //判断父节点是否为一个树节点,如果树节点不能展开,请检查是否节点的class属性是否为treeNode
        }    
        var child;
        var imgEl;//图片子节点,在树展开时更换图片
        for(var i=0; i < el.childNodes.length; i++)
        {
            child = el.childNodes[i];
            if (child.src)
            {
                imgEl = child;
            }
            else if (child.className == "treeSubnodesHidden")
            {
                child.className = "treeSubnodes";//原来若隐藏,则展开
                imgEl.src = imgMinus.src;//更换图片
                break;
            }
            else if (child.className == "treeSubnodes")
            {
                child.className = "treeSubnodesHidden";//原来若展开,则隐藏
                imgEl.src = imgPlus.src;//更换图片
                break;
            }
        }
    }
    
    //子节点点击事件,设置选中节点的样式
    function clickAnchor(el)
    {
        selectNode(el.parentNode);
        el.blur();
    }
    
    function selectNode(el)
    {
        if (treeSelected != null)
        {
            setSubNodeClass(treeSelected, 'A', 'treeUnselected');
        }
        setSubNodeClass(el, 'A', 'treeSelected');
        treeSelected = el;
    }
    
    function setSubNodeClass(el, nodeName, className)
    {
        var child;
        for (var i=0; i < el.childNodes.length; i++)
        {
            child = el.childNodes[i];
            if (child.nodeName == nodeName)
            {
                child.className = className;
                break;
            }
        }
    }
    </script>
    </body>
    </html>
  • 相关阅读:
    Java高级工程师面试题总结及参考答案
    Java面试通关要点汇总整理【终极版】
    40道Java基础常见面试题及详细答案
    Java方向如何准备BAT技术面试答案(汇总版)
    10-01 Java 类,抽象类,接口的综合小练习--运动员和教练
    div在页面垂直居中方法---增强改进版
    TortoiseSVN切换更改登录账号密码
    09-04 java 接口
    09-03 Java 抽象类
    09-02 java 多态
  • 原文地址:https://www.cnblogs.com/wangnmhb/p/3200313.html
Copyright © 2011-2022 走看看