dTree的分析和二次开发(上)


dTree是一个免费的JavaScript树形菜单,使用简单,界面制作的也很专业。

dtree树形菜单

所谓“兵无常势,水无常形”,不同的项目需求,造成菜单树的各种变化,因此在介绍dTree的同时,本文着重讲述如何改造dTree,以达到为不同项目所用的目的。

dTree 分析

dTree的使用非常简单,在下载的dTree压缩文件中(2.05),要用的只有三个:

1. dtree.js : dtree功能脚本
2. dtree.css : 样式文件
3. img文件夹 : 存放dtree使用的图标,参看下图:

dtree图标

很容易就可以编写出类似上面的dtree菜单树,源代码如下:

  1. <html>
  2. <head>
  3. <link rel="StyleSheet" href="dtree.css" type="text/css" />
  4. <script type="text/javascript" src="dtree.js"></script>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. <!–
  9. d =newdTree(‘d’);//创建树,名称为’d'(注意和树的对象变量名称要一致)
  10. d.add(0,-1,‘My example tree’);//在树中增加节点。节点id是0,父节点是-1(根节点),节点文字’My example tree’
  11. d.add(1,0,‘Node 1′,‘default.html’);//根节点的子节点(父节点是0),’default.html’表示节点链接(鼠标点击页面跳转url)
  12. d.add(2,0,‘Node 2′,‘default.html’);
  13. d.add(3,1,‘Node 1.1′,‘default.html’);
  14. d.add(4,0,‘Node 3′,‘default.html’);
  15. d.add(5,3,‘Node 1.1.1′,‘default.html’);
  16. d.add(6,5,‘Node 1.1.1.1′,‘default.html’);
  17. d.add(7,0,‘Node 4′,‘default.html’);
  18. d.add(8,1,‘Node 1.2′,‘default.html’);
  19. d.add(9,0,‘My Pictures’,‘default.html’,‘Pictures I\’ve taken over the years’,,,‘img/imgfolder.gif’);//’Pictures I\’ve taken over the years’是链接title,指定图标
  20. d.add(10,9,‘The trip to Iceland’,‘default.html’,‘Pictures of Gullfoss and Geysir’);
  21. d.add(11,9,‘Mom\’s birthday’,‘default.html’);
  22. d.add(12,0,‘Recycle Bin’,‘default.html’,,,‘img/trash.gif’);
  23. document.write(d);//输出dtree的html(显示)
  24. //–>
  25. </script>
  26. </body>
  27. </html>

分析dtree.js,在dTree中只有两个结构:”节点”和”树”,dTree的所有功能和构造都在于这两个结构的属性和行为中,Node比较简单,只包含节点的基本属性和一个构造方法,所以对dTree的分析和研究的重点可放在dTree结构中。

Node

节点类图

dTree

树类图

提示:
鼠标移动到类图中的属性或方法上时,会显示详细信息。

dTree的工作原理

类似dTree这样的动态的客户端web插件,实现起来基本离不开xhtml和javascript,用一段简单的代码来探索一下dTree的工作原理:

  1. <html>
  2. <head>
  3. <link rel="StyleSheet" href="dtree.css" type="text/css" />
  4. <script type="text/javascript" src="dtree.js"></script>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. <!--
  9. d =newdTree('d');//创建树,名称为'd'
  10. d.add(0,-1,'根节点');
  11. d.add(1,0,'节点 1','node1.html');
  12. d.add(2,0,'节点 2','node2.html');
  13. d.add(3,1,'节点 1.1','node1_1.html');
  14. d.add(4,3,'节点 1.1.1','node1_1_1.html');
  15. document.write(d);
  16. functionshow()
  17. {
  18. alert(d);
  19. }
  20. //-->
  21. </script>
  22. <input type="button" value="显示html" onclick="show()">
  23. </body>
  24. </html>

显示的“树”如下图:

点击下方的“显示html”按钮,会在alert对话框中显示整个树的html代码,整理后如下:

  1. <divclass="dtree">
  2. <divclass="dTreeNode">
  3. <imgid="id0"src="img/base.gif"alt=""/>根节点</a>
  4. </div>
  5. <divid="dd0"class="clip"style="display:block;">
  6. <divclass="dTreeNode">
  7. <ahref="javascript: d.o(1);"><imgid="jd1"src="img/minus.gif"alt=""/></a>
  8. <imgid="id1"src="img/folderopen.gif"alt=""/>
  9. <ahref="javascript: d.o(1);"class="node">节点 1</a>
  10. </div>
  11. <divid="dd1"class="clip"style="display:block;">
  12. <divclass="dTreeNode">
  13. <imgsrc="img/line.gif"alt=""/>
  14. <ahref="javascript: d.o(3);"><imgid="jd3"src="img/minusbottom.gif"alt=""/></a>
  15. <imgid="id3"src="img/folderopen.gif"alt=""/>
  16. <ahref="javascript: d.o(3);"class="node">节点 1.1</a>
  17. </div>
  18. <divid="dd3"class="clip"style="display:block;">
  19. <divclass="dTreeNode">
  20. <imgsrc="img/line.gif"alt=""/>
  21. <imgsrc="img/empty.gif"alt=""/>
  22. <imgsrc="img/joinbottom.gif"alt=""/>
  23. <imgid="id4"src="img/page.gif"alt=""/>
  24. <aid="sd4"class="node"href="node1_1_1.html"onclick="javascript: d.s(4);">节点 1.1.1</a>
  25. </div>
  26. </div>
  27. </div>
  28. <divclass="dTreeNode">
  29. <imgsrc="img/joinbottom.gif"alt=""/>
  30. <imgid="id2"src="img/page.gif"alt=""/>
  31. <aid="sd2"class="node"href="node2.html"onclick="javascript: d.s(2);">节点 2</a>
  32. </div>
  33. </div>
  34. </div>

仔细观察,树中每个节点的html构造是相似的:

  1. <!-- 根节点 -->
  2. <divclass="dTreeNode">
  3. <imgid="id0"src="img/base.gif"alt=""/>根节点</a>
  4. </div>
  5. <divid="dd0"class="clip"style="display:block;">
  6. ......
  7. </div>
  1. <!-- 节点 1 -->
  2. <divclass="dTreeNode">
  3. <ahref="javascript: d.o(1);"><imgid="jd1"src="img/minus.gif"alt=""/></a>
  4. <imgid="id1"src="img/folderopen.gif"alt=""/>
  5. <ahref="javascript: d.o(1);"class="node">节点 1</a>
  6. </div>
  7. <divid="dd1"class="clip"style="display:block;">
  8. ......
  9. </div>
  1. <!-- 节点 1.1 -->
  2. <divclass="dTreeNode">
  3. <imgsrc="img/line.gif"alt=""/>
  4. <ahref="javascript: d.o(3);"><imgid="jd3"src="img/minusbottom.gif"alt=""/></a>
  5. <imgid="id3"src="img/folderopen.gif"alt=""/>
  6. <ahref="javascript: d.o(3);"class="node">节点 1.1</a>
  7. </div>
  8. <divid="dd3"class="clip"style="display:block;">
  9. ......
  10. </div>
  1. <!-- 节点 1.1.1 -->
  2. <divclass="dTreeNode">
  3. <imgsrc="img/line.gif"alt=""/>
  4. <imgsrc="img/empty.gif"alt=""/>
  5. <imgsrc="img/joinbottom.gif"alt=""/>
  6. <imgid="id4"src="img/page.gif"alt=""/>
  7. <aid="sd4"class="node"href="node1_1_1.html"onclick="javascript: d.s(4);">节点 1.1.1</a>
  8. </div>
  1. <!-- 节点 2 -->
  2. <divclass="dTreeNode">
  3. <imgsrc="img/joinbottom.gif"alt=""/>

    dTree是一个免费的JavaScript树形菜单,使用简单,界面制作的也很专业。

    dtree树形菜单

    所谓“兵无常势,水无常形”,不同的项目需求,造成菜单树的各种变化,因此在介绍dTree的同时,本文着重讲述如何改造dTree,以达到为不同项目所用的目的。

    dTree 分析

    dTree的使用非常简单,在下载的dTree压缩文件中(2.05),要用的只有三个:

    1. dtree.js : dtree功能脚本
    2. dtree.css : 样式文件
    3. img文件夹 : 存放dtree使用的图标,参看下图:

    dtree图标

    很容易就可以编写出类似上面的dtree菜单树,源代码如下:

    1. <html>
    2. <head>
    3. <link rel="StyleSheet" href="dtree.css" type="text/css" />
    4. <script type="text/javascript" src="dtree.js"></script>
    5. </head>
    6. <body>
    7. <script type="text/javascript">
    8. <!–
    9. d =newdTree(‘d’);//创建树,名称为’d'(注意和树的对象变量名称要一致)
    10. d.add(0,-1,‘My example tree’);//在树中增加节点。节点id是0,父节点是-1(根节点),节点文字’My example tree’
    11. d.add(1,0,‘Node 1′,‘default.html’);//根节点的子节点(父节点是0),’default.html’表示节点链接(鼠标点击页面跳转url)
    12. d.add(2,0,‘Node 2′,‘default.html’);
    13. d.add(3,1,‘Node 1.1′,‘default.html’);
    14. d.add(4,0,‘Node 3′,‘default.html’);
    15. d.add(5,3,‘Node 1.1.1′,‘default.html’);
    16. d.add(6,5,‘Node 1.1.1.1′,‘default.html’);
    17. d.add(7,0,‘Node 4′,‘default.html’);
    18. d.add(8,1,‘Node 1.2′,‘default.html’);
    19. d.add(9,0,‘My Pictures’,‘default.html’,‘Pictures I\’ve taken over the years’,,,‘img/imgfolder.gif’);//’Pictures I\’ve taken over the years’是链接title,指定图标
    20. d.add(10,9,‘The trip to Iceland’,‘default.html’,‘Pictures of Gullfoss and Geysir’);
    21. d.add(11,9,‘Mom\’s birthday’,‘default.html’);
    22. d.add(12,0,‘Recycle Bin’,‘default.html’,,,‘img/trash.gif’);
    23. document.write(d);//输出dtree的html(显示)
    24. //–>
    25. </script>
    26. </body>
    27. </html>

    分析dtree.js,在dTree中只有两个结构:”节点”和”树”,dTree的所有功能和构造都在于这两个结构的属性和行为中,Node比较简单,只包含节点的基本属性和一个构造方法,所以对dTree的分析和研究的重点可放在dTree结构中。

    Node

    节点类图

    dTree

    树类图

    提示:
    鼠标移动到类图中的属性或方法上时,会显示详细信息。

    dTree的工作原理

    类似dTree这样的动态的客户端web插件,实现起来基本离不开xhtml和javascript,用一段简单的代码来探索一下dTree的工作原理:

    1. <html>
    2. <head>
    3. <link rel="StyleSheet" href="dtree.css" type="text/css" />
    4. <script type="text/javascript" src="dtree.js"></script>
    5. </head>
    6. <body>
    7. <script type="text/javascript">
    8. <!--
    9. d =newdTree('d');//创建树,名称为'd'
    10. d.add(0,-1,'根节点');
    11. d.add(1,0,'节点 1','node1.html');
    12. d.add(2,0,'节点 2','node2.html');
    13. d.add(3,1,'节点 1.1','node1_1.html');
    14. d.add(4,3,'节点 1.1.1','node1_1_1.html');
    15. document.write(d);
    16. functionshow()
    17. {
    18. alert(d);
    19. }
    20. //-->
    21. </script>
    22. <input type="button" value="显示html" onclick="show()">
    23. </body>
    24. </html>

    显示的“树”如下图:

    点击下方的“显示html”按钮,会在alert对话框中显示整个树的html代码,整理后如下:

    1. <divclass="dtree">
    2. <divclass="dTreeNode">
    3. <imgid="id0"src="img/base.gif"alt=""/>根节点</a>
    4. </div>
    5. <divid="dd0"class="clip"style="display:block;">
    6. <divclass="dTreeNode">
    7. <ahref="javascript: d.o(1);"><imgid="jd1"src="img/minus.gif"alt=""/></a>
    8. <imgid="id1"src="img/folderopen.gif"alt=""/>
    9. <ahref="javascript: d.o(1);"class="node">节点 1</a>
    10. </div>
    11. <divid="dd1"class="clip"style="display:block;">
    12. <divclass="dTreeNode">
    13. <imgsrc="img/line.gif"alt=""/>
    14. <ahref="javascript: d.o(3);"><imgid="jd3"src="img/minusbottom.gif"alt=""/></a>
    15. <imgid="id3"src="img/folderopen.gif"alt=""/>
    16. <ahref="javascript: d.o(3);"class="node">节点 1.1</a>
    17. </div>
    18. <divid="dd3"class="clip"style="display:block;">
    19. <divclass="dTreeNode">
    20. <imgsrc="img/line.gif"alt=""/>
    21. <imgsrc="img/empty.gif"alt=""/>
    22. <imgsrc="img/joinbottom.gif"alt=""/>
    23. <imgid="id4"src="img/page.gif"alt=""/>
    24. <aid="sd4"class="node"href="node1_1_1.html"onclick="javascript: d.s(4);">节点 1.1.1</a>
    25. </div>
    26. </div>
    27. </div>
    28. <divclass="dTreeNode">
    29. <imgsrc="img/joinbottom.gif"alt=""/>
    30. <imgid="id2"src="img/page.gif"alt=""/>
    31. <aid="sd2"class="node"href="node2.html"onclick="javascript: d.s(2);">节点 2</a>
    32. </div>
    33. </div>
    34. </div>

    仔细观察,树中每个节点的html构造是相似的:

    1. <!-- 根节点 -->
    2. <divclass="dTreeNode">
    3. <imgid="id0"src="img/base.gif"alt=""/>根节点</a>
    4. </div>
    5. <divid="dd0"class="clip"style="display:block;">
    6. ......
    7. </div>
    1. <!-- 节点 1 -->
    2. <divclass="dTreeNode">
    3. <ahref="javascript: d.o(1);"><imgid="jd1"src="img/minus.gif"alt=""/></a>
    4. <imgid="id1"src="img/folderopen.gif"alt=""/>
    5. <ahref="javascript: d.o(1);"class="node">节点 1</a>
    6. </div>
    7. <divid="dd1"class="clip"style="display:block;">
    8. ......
    9. </div>
    1. <!-- 节点 1.1 -->
    2. <divclass="dTreeNode">
    3. <imgsrc="img/line.gif"alt=""/>
    4. <ahref="javascript: d.o(3);"><imgid="jd3"src="img/minusbottom.gif"alt=""/></a>
    5. <imgid="id3"src="img/folderopen.gif"alt=""/>
    6. <ahref="javascript: d.o(3);"class="node">节点 1.1</a>
    7. </div>
    8. <divid="dd3"class="clip"style="display:block;">
    9. ......
    10. </div>
    1. <!-- 节点 1.1.1 -->
    2. <divclass="dTreeNode">
    3. <imgsrc="img/line.gif"alt=""/>
    4. <imgsrc="img/empty.gif"alt=""/>
    5. <imgsrc="img/joinbottom.gif"alt=""/>
    6. <imgid="id4"src="img/page.gif"alt=""/>
    7. <aid="sd4"class="node"href="node1_1_1.html"onclick="javascript: d.s(4);">节点 1.1.1</a>
    8. </div>
    1. <!-- 节点 2 -->
    2. <divclass="dTreeNode">
    3. <imgsrc="img/joinbottom.gif"alt=""/>
    4. <imgid="id2"src="img/page.gif"alt=""/>
    5. <aid="sd2"class="node"href="node2.html"onclick="javascript: d.s(2);">节点 2</a>
    6. </div>

    每个节点由两个<div>组成,第一个div (class="dTreeNode")描述当前节点,如节点显示文字、节点图标、图标前的加减号、连线等;第二个div (class="clip")描述当前节点的子节点(包括子节点的子节点),注意div的样式 style="display:block;","block"表示显示div,也就是显示子节点,如果样式为 style="display:none;",则隐藏div,也就隐藏了子节点,d.o()函数控制display样式的变换,也就相应实现了子节点的打开和关闭。

    "节点 1.1.1" 和 "节点 2" 没有子节点,所以没有第二个<div>。

  4. <imgid="id2"src="img/page.gif"alt=""/>
  5. <aid="sd2"class="node"href="node2.html"onclick="javascript: d.s(2);">节点 2</a>
  6. </div>

每个节点由两个<div>组成,第一个div (class="dTreeNode")描述当前节点,如节点显示文字、节点图标、图标前的加减号、连线等;第二个div (class="clip")描述当前节点的子节点(包括子节点的子节点),注意div的样式 style="display:block;","block"表示显示div,也就是显示子节点,如果样式为 style="display:none;",则隐藏div,也就隐藏了子节点,d.o()函数控制display样式的变换,也就相应实现了子节点的打开和关闭。

"节点 1.1.1" 和 "节点 2" 没有子节点,所以没有第二个<div>。

优质内容筛选与推荐>>
1、git各角色权限描述
2、android系统启动流程分析
3、软件工程第二次作业
4、Python开发环境Linux配置
5、POJ 2352 Stars 线段树


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn