利用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. SGU 149 树形DP Computer Network

    这道题搜了一晚上的题解,外加自己想了半个早上,终于想得很透彻了.于是打算好好写一写这题题解,而且这种做法比网上大多数题解要简单而且代码也比较简洁. 首先要把题读懂,把输入读懂,这实际上是一颗有向树.第 ...

  2. bootstap 折叠

    data-toggle="collapse" 添加到您想要展开或折叠的组件的链接上. href 或 data-target 属性添加到父组件,它的值是子组件的 id

  3. idea14配置tomcat

    1.File -> New Project ,进入创建项目窗口 2.在 WEB-INF 目录下点击右键,New -> Directory,创建 classes 和 lib 两个目录 3.F ...

  4. Mysql 使用命令及 sql 语句示例

    Mysql 是数据库开发使用的主要平台之一.sql 的学习掌握与使用是数据库开发的基础,此处展示详细sql 语句的写法,及各种功能下的 sql 语句. 在此处有 sql 语句使用示例:在这里 此处插入 ...

  5. angularJs 中ui-router 路由向controller传递数据

    页面上 : ui-sref="home.dataAnalysis({role:'thirdpart:tokenverify',menuType:'a'})" 路由设置 .state ...

  6. CodeForces contest/776 A+B+C题解

    ICM Technex 2017 and Codeforces Round #400 (Div. 1 +Div.2,combined) A. A Serial Killer 谜一样的题意:每天从两个人 ...

  7. SQL 优化案例之变更表结构

    从慢日志报表中看到一条很长的SQL select id from myinfo and (( SUBSTRING_INDEX(location_axis, ) ) ) ), '$%') ) or ( ...

  8. rabbitmq php 学习

    参考文档:http://www.cnblogs.com/phpinfo/p/4104551...http://blog.csdn.net/historyasamirror/ar... 依赖包安装 yu ...

  9. 分析Tapjoy的模式—分发用于ios设备的企业级应用程序

    下面简单介绍下Tapjoy的模式,供大家参考: Tapjoy最初的合作模式:“按安装奖励”(pay-per-install) Tapjoy利用非常成功的奖励性下载模式影响了App Store的免费游戏 ...

  10. BZOJ 4589 Hard Nim ——FWT

    [题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...