利用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基础学习笔记——生成器与推导式

    生成器 首先我们来看看什么是个生成器,生成器本质就是迭代器 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 首先,我们先 ...

  2. 九度oj 题目1109:连通图

    题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入: 每组数据的第一行是两个整数 n 和 m(0<=n<=1000).n 表示图的顶点数目,m 表示图中边的 ...

  3. 13-数组的API方法遍历

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. rabbitmq php扩展amqp安装

    configure: error: Please reinstall the librabbitmq distribution itself or (re)install librabbitmq de ...

  5. 【Luogu】P1393动态逆序对(树套树)

    题目链接 树套树. 每次删掉x的时候会减去1到x-1里比x位置的数大的数和它构成的逆序对,以及x+1到n里比x位置的数小的数和它构成的逆序对. 顺带一提我发现平衡树insert的时候不是要splay一 ...

  6. Codeforces #765D

    我在这道题上花了2个小时,仍没解出.理一下当时的思路,看看症结到底在哪里. 题意 用 $[n]$ 表示集合 $\{1,2,3,\dots, n\}$ . 3个函数 $f \colon [n] \to ...

  7. 洛谷 [P2148] E&G

    SG函数的应用 首先每一组都是独立的,所以我们可以求出每一组的SG值异或出来. 那么怎么求每一组的SG值呢,网上的题解都是打表找规律,但其实这个规律是可以证明的 先看规律: x为奇数,y为奇数:SG= ...

  8. Linux 系统的常用命令之 rm ,rm -rf , rm -f 以及rm 命令的其他参数命令

    1.rm -rf * 删除当前目录下的所有文件,这个命令很危险,应避免使用. 所删除的文件,一般都不能恢复! 2.rm -f 其中的,f参数 (f --force ) 忽略不存在的文件,不显示任何信息 ...

  9. 测试开发系列之Python开发mock接口(二)

    上一篇咱们已经把开发前的环境准备好了,还需要再做一点准备,你的账户信息是存在哪的呢,当然是存在数据库里的,咱们在去支付,扣钱的时候,肯定是从数据库里面操作的,去更新账户表里面的数据,所以咱们先要把数据 ...

  10. spring boot 添加mybatis,以及相关配置

    首先在pom.xml文件里加入 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifa ...