+发表新主题
查看: 1660|回复: 0

[代码片段] DOM 遍历节点树

[复制链接]

[代码片段] DOM 遍历节点树

[复制链接]
殷三姗 发表于 2016-1-11 20:00:50 浏览:  1660 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
1. 递归遍历节点树

      递归调用:函数内部又调用自己

      何时使用递归:遍历不确定层级深度的上下级机构时

      原理:在函数内部,调用任何函数,都会为新的函数调用创建新的EC。可实现一个函数,反复执行多项任务。

       深度优先遍历:优先遍历下级节点


        arguments.callee:引用的是当前调用的函数对象

       何时使用:递归内部必须用callee属性调用当前函数,不能直接用函数名。

例如:深度遍历文档中每一个节点

   这是html文档:

  1.          <!DOCTYPE HTML>

  2. <html>

  3. <head>

  4. <title>使用DOM方法递归遍历节点树</title>

  5. <meta charset="utf-8"/>

  6. <script src="js/3_2.js"></script>

  7. </head>

  8. <body>

  9. <span class="msg">Hello World!</span>

  10. <ul>

  11. <li>电影</li>

  12. <li>综艺

  13. <ul>

  14. <li>跑男</li>

  15. <li>爸爸</li>

  16. <li>真男</li>

  17. </ul>

  18. </li>

  19. <li>剧集</li>

  20. </ul>

  21. </body>

  22. </html>
复制代码
这是js文件:     

  1. //实现一个函数: 遍历指定节点下的所有子节点

  2. var tabs=[];   //  

  3. function getChildren(curr){

  4. //如果curr不是元素类型或文档类型,就输出curr的节点值

  5.                                //否则输出curr的节点名

  6. console.log(tabs.join("")+"|-"+

  7. (curr.nodeType!=3?curr.nodeName:curr.nodeValue)

  8. );

  9. //如果curr有子节点,就遍历curr下所有子节点

  10. var children=curr.childNodes;

  11. if(children){//开始打印子元素之前,压入一个缩进

  12. tabs.unshift("t");  //开始压入一个缩进

  13. for(var i=0,len=children.length;i<len;i++){

  14. //将当前子节点,再作为父节点向下遍历

  15. arguments.callee/*getChildren*/(children[i]);

  16. }

  17. tabs.shift();//弹出一个缩进,

  18. }

  19. }

  20. window.onload=function(){

  21. getChildren(document);

  22. }
复制代码
这是递归遍历的结构图:

195917ffsms6bccjs3btf5.png

下面是控制台的部分效果图:

   195917ffsms6bccjs3btf5.png



    节点树:由所有节点组成的树结构

    元素树:仅由元素节点组成的树结构

  

                   节点树          元素树

        父节点:    parentNode                 parentElementNode

     子节点集合:    childNodes                  children

     第一个孩子:    firstChild                     firstElementChild

    最后一个孩子:    lastChild                      lastElementChild

     前一个兄弟:    previousSibling            previousElementSibling

     后一个兄弟:    nextSibling                  nextElementSibling

     children: IE8及以上浏览器支持

     其余:  IE9及以上浏览器支持
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网