利用javascript可以遍历DOM树,这篇文章介绍用获取一个DOM元素的所有父节点和获取一个DOM元素的所以子孙节点。

1.获取所有父节点。用递归的方法,用parentNode属性。

<!DOCTYPE html>
<html lang=”en” >
<head>
  <title>getParents</title>
</head>
<body >
  <div >
    <div id=”test”> </div>
    <div></div>
  </div>
<script type=”text/javascript”>
  var getParents=function(id){
    var dom=id.parentNode;
    while(dom.tagName!=null){
      document.write(dom.tagName);
      dom=dom.parentNode;
    }
    return dom;
  }
  getParents(test);
</script>
</body>
</html>

运行结果(chrome、firefox、IE9):DIVBODYHTML

2.遍历所有子孙节点。

<!DOCTYPE HTML>
<html>
<head>
  <meta charset = “utf-8″/>
  <title>getChildren</title>
</head>
<body>
  <div>
    &nbsp;&nbsp;I am in second floor
    <div>&nbsp;&nbsp;I am in second floor</div>
  </div>
  <div>
    1
    <div>
      &nbsp;&nbsp;I am in second floor
      <div>&nbsp;&nbsp;&nbsp;&nbsp;I am in third floor</div>
    </div>
  </div>
  <div>1</div>
  <div>1</div>
  <div>1</div>
  <div id=”test”>
    <div>
       &nbsp;&nbsp;I am in second floor
    </div>
    <div>
       &nbsp;&nbsp;I am in second floor
    </div>
  </div>
<script type=”text/javascript”>
var node;
node = document.getElementsByTagName(‘body’); //深度遍历
function getChildren(node,f){ //f表示第几层,根元素为第0层
  if(node.nodeType!=3){
    console.log(“nodename: “+node.nodeName);
    console.log(“nodetype: ” + node.nodeType);
    console.log(“the “+f+”th floor”);
    var childlist = node.childNodes;
    console.log(childlist);
    var length;
    length = childlist.length;
    if(childlist.length>0){
      var f = f+1;
      for(var i=0;i<childlist.length;i++){
        getChildren(childlist[i],f);
      }
    }
  }else if(node.nodeValue.length > 1){ //因为每个nodeValue都带一个换行符”%0A”
    console.log(“value: “+node.nodeValue);
  }
} getChildren(node[0],0);
//层次遍历DOM树
function getChildrenByLev(arr,f,Matri){ //f表示第几层,根元素为第0层,arr表示遍历起始层的节点,Matri为层次遍历输出的结果,结果以一个二维数组表示,第一个索引表示层次
  if(arr.length<)return Matri;
  f = f+1;
  Matri[f] = Matri[f] || new Array();
  for(var i = 0; i < arr.length ; i++){
    children = arr[i].childNodes;
    for(j in children){
      if(children[j].nodeType == 1){
        Matri[f].push(children[j]);
      }
    }
  }
  getChildrenByLev(Matri[f],f,Matri);
} var levelMatri = new Array();
levelMatri[0] = new Array();
levelMatri[0][0] = node[0];
getChildrenByLev(node,0,levelMatri);
console.log(levelMatri);
</script>
</body>
</html>

深度遍历的结果如图(注意:截图不全):

层次遍历的结果如图:

最新文章

  1. 理解CSS前景色和透明度
  2. iOS 版 MWeb 发布到自建 Wordpress 和 Metaweblog API 使用指南
  3. CSS强制性换行word-break与word-wrap的使用
  4. 如何在Android应用程序中使用传感器模拟器SensorSimulator
  5. hdu1754线段树维护区间最大值
  6. SQL的几道题目
  7. Solr开发参考文档(转)
  8. dll间接应用问题
  9. C# 调用cmd.exe的方法
  10. leetcode之旅(6)-Add Digits
  11. POJ 3347 Kadj Squares (计算几何)
  12. Linux 系统安装
  13. Redis接口的调用
  14. grep基础用法
  15. 强制SVN上传代码时添加日志
  16. [UE4]九宫格图片拉伸
  17. webpack / vue项目 config/index.js配置(用于配置webpack服务器代理)
  18. WORD里怎样能做到局部“分栏”就是一页里有的分有的不分
  19. Hadoop2.0环境搭建
  20. 20145335郝昊《Java程序设计》课程总结

热门文章

  1. 【JavaScript 2—基础知识点】:数据类型
  2. HDu-2896 病毒侵袭,AC自动机模板题!
  3. nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍
  4. ACM程序设计选修课——1081: 堆(BFS)
  5. 算法复习——迭代加深搜索(骑士精神bzoj1085)
  6. bzoj1610 [Usaco2008 Feb]Line连线游戏 几何+暴力
  7. jmeter监控linux cpu 内存 网络 IO
  8. uva 12304点与直线与圆之间的关系
  9. 简单题(bzoj 1683)
  10. 染色(bzoj 2243)