JS获取子节点、父节点和兄弟节点的方法实例总结


Posted in Javascript onJuly 06, 2018

本文实例讲述了JS获取子节点、父节点和兄弟节点的方法。分享给大家供大家参考,具体如下:

一、js获取子节点的方式

1. 通过获取dom方式直接获取子节点

其中test的父标签id的值,div为标签的名字。getElementsByTagName是一个方法。返回的是一个数组。在访问的时候要按数组的形式访问。

var a = document.getElementById("test").getElementsByTagName("div");

2. 通过childNodes获取子节点

使用childNodes获取子节点的时候,childNodes返回的是子节点的集合,是一个数组的格式。他会把换行和空格也当成是节点信息。

var b =document.getElementById("test").childNodes;

为了不显示不必须的换行的空格,我们如果要使用childNodes就必须进行必要的过滤。通过正则表达式式取掉不必要的信息。下面是过滤掉

//去掉换行的空格
for(var i=0; i<b.length;i++){
  if(b[i].nodeName == "#text" && !/\s/.test(b.nodeValue)){
    document.getElementById("test").removeChild(b[i]);
  }
}
//打印测试
for(var i=0;i<b.length;i++){
  console.log(i+"---------")
  console.log(b[i]);
}
//补充 document.getElementById("test").childElementCount; 可以直接获取长度 同length

4. 通过children来获取子节点

利用children来获取子元素是最方便的,他也会返回出一个数组。对其获取子元素的访问只需按数组的访问形式即可。

var getFirstChild = document.getElementById("test").children[0];

5. 获取第一个子节点

firstChild来获取第一个子元素,但是在有些情况下我们打印的时候会显示undefined,这是什么情况呢??其实firstChild和childNodes是一样的,在浏览器解析的时候会把他当换行和空格一起解析,其实你获取的是第一个子节点,只是这个子节点是一个换行或者是一个空格而已。那么不要忘记和childNodes一样处理呀。

var getFirstChild = document.getElementById("test").firstChild;

6. firstElementChild获取第一个子节点

使用firstElementChild来获取第一个子元素的时候,这就没有firstChild的那种情况了。会获取到父元素第一个子元素的节点 这样就能直接显示出来文本信息了。他并不会匹配换行和空格信息。

var getFirstChild = document.getElementById("test").firstElementChild;

7. 获取最后一个子节点

lastChild获取最后一个子节点的方式其实和firstChild是类似的。同样的lastElementChild和firstElementChild也是一样的。不再赘余。

var getLastChildA = document.getElementById("test").lastChild;
var getLastChildB = document.getElementById("test").lastElementChild;

二、js获取父节点的方式

1. parentNode获取父节点

获取的是当前元素的直接父元素。parentNode是w3c的标准。

var p = document.getElementById("test").parentNode;

2. parentElement获取父节点

parentElement和parentNode一样,只是parentElement是ie的标准。

var p1 = document.getElementById("test").parentElement;

3. offsetParent获取所有父节点

一看offset我们就知道是偏移量 其实这个是于位置有关的上下级 ,直接能够获取到所有父亲节点, 这个对应的值是body下的所有节点信息。

var p2 = document.getElementById("test").offsetParent;

三、js获取兄弟节点的方式

1. 通过获取父亲节点再获取子节点来获取兄弟节点

var brother1 = document.getElementById("test").parentNode.children[1];

2. 获取上一个兄弟节点

在获取前一个兄弟节点的时候可以使用previousSibling和previousElementSibling。他们的区别是previousSibling会匹配字符,包括换行和空格,而不是节点。previousElementSibling则直接匹配节点。

var brother2 = document.getElementById("test").previousElementSibling;
var brother3 = document.getElementById("test").previousSibling;

3. 获取下一个兄弟节点

同previousSibling和previousElementSibling,nextSibling和nextElementSibling也是类似的。

var brother4 = document.getElementById("test").nextElementSibling;
var brother5 = document.getElementById("test").nextSibling;

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
jQuery循环滚动新闻列表示例代码
Jun 17 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
node 命令方式启动修改端口的方法
May 12 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 Javascript
深入浅析AngularJs模版与v-bind
Jul 06 #Javascript
vue中子组件调用兄弟组件方法
Jul 06 #Javascript
vue中element 上传功能的实现思路
Jul 06 #Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 #Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 #Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 #Javascript
用Node提供静态文件服务的方法
Jul 06 #Javascript
You might like
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Python文件操作基本流程代码实例
2017/12/11 Python
numpy中矩阵合并的实例
2018/06/15 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
会计电算化应届生求职信
2013/11/03 职场文书
质量工程师岗位职责
2013/11/16 职场文书
创业计划书中要认真思考的问题
2013/12/28 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
起诉意见书范文
2015/05/19 职场文书
小学数学新课改心得体会
2016/01/22 职场文书