利用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>

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

层次遍历的结果如图:

获取DOM父元素和子元素的更多相关文章

  1. jquery选择器 之 获取父级元素、同级元素、子元素

    jquery选择器 之 获取父级元素.同级元素.子元素 一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div" ...

  2. jquery选择器如何获取父级元素、同级元素、子元素

    一.新建页面 <ul> <li>list item 1</li> <li>list item 2</li> <li class=&qu ...

  3. jQuery学习笔记---兄弟元素、子元素和父元素的获取

    我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...

  4. js与jquery获取父元素,删除子元素的不同方法

    var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法 var obj=$("#id" ...

  5. jquery选择器 之 获取父级元素、同级元素、子元素 - yes的日志 - 网易博客

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  6. jQuery中兄弟元素、子元素和父元素的获取

    我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...

  7. jquery选择器 之 获取父级元素,子元素,同级元素

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link href ...

  8. jquery获取元素(父级的兄弟元素的子元素)

    一.获取父级元素 使用jquery获取父级元素: parent() 例如:$(this).parent('ul'); 二.获取同级元素 使用jquery获取同级元素:siblings() 例如:$(t ...

  9. jquery选择器:获取父级元素、同级元素、子元素

    jQuery的出现给广大开发者提供了不少的方便.从要自己一个一个敲代码,到直接调用方法,无疑大大地提高了网站开发的效率.而在jQuery中有一些方法非常的实用.下面就给大家介绍下jquery选择器:获 ...

  10. jQuery获取所有父级元素及同级元素及子元素的方法

    jQuery获取所有父级元素及同级元素及子元素的方法 1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() ...

随机推荐

  1. python基础学习笔记——初识函数

    什么是函数 我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌&quo ...

  2. xfce-openvas9

    1安装OpenVas 第一步,添加PPA源,在这我用的是一台新装的Ubuntu安装OpenVas,运行以下命令就可以进行安装 root@ubuntu:~# add-apt-repository ppa ...

  3. 修复Centos7双系统引导

    1.进入CentOS系统 2.命令行输入 vi /boot/grub2/grub.cfg 3.在文件空白处添加下列代码 menuentry 'Windows 7'{ insmod part_msdos ...

  4. 图论trainning-part-1 A. 最短路

    A. 最短路 Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class name ...

  5. .net提高文章

    文章:.NET程序性能的基本要领 文章:你的字典里有多少元素? 文章:快速自检电脑是否被黑客入侵过(Windows版) 文章:关于DNS,你应该知道这些

  6. 【Luogu】P2340奶牛会展

    题目链接 突发奇想可以用f[i]表示智商和为i的时候情商最大是多少.这样就变成了一个背包问题. 最后更新答案的时候从0到最大背包容量遍历,最后答案是最大的i+f[i]; 但是虽然答案只能从0到m里选, ...

  7. SPOJ LCS2 Longest Common Substring II ——后缀自动机

    后缀自动机裸题 #include <cstdio> #include <cstring> #include <iostream> #include <algo ...

  8. 【bzoj1710】[Usaco2007 Open]Cheappal 廉价回文

    [bzoj1710][Usaco2007 Open]Cheappal 廉价回文 Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过 ...

  9. msp430入门学习40

    msp430的其他八 msp430入门学习

  10. Python入门--3--操作符

    一.算数操作符 有:+.-.*././/.%.**(幂) a= 3; a = 3+1; #等同于a += 1  这相当与a加一 同样 也可以-.*././/          需要注意的是//是直接舍 ...