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小实验之函数引用
Nov 17 Javascript
javascript操作excel生成报表全攻略
May 04 Javascript
javascript数组去重小结
Mar 07 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
Oct 10 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
js模态对话框使用方法详解
Feb 16 Javascript
jQuery复合事件用法示例
Jun 10 jQuery
AngularJS实现的输入框字数限制提醒功能示例
Oct 26 Javascript
Vue中img的src是动态渲染时不显示的解决
Nov 14 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 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 curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
php封装一个异常的处理类
2017/06/08 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
老生常谈Python进阶之装饰器
2017/05/11 Python
python unittest实现api自动化测试
2018/04/04 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
飞利浦法国官网:Philips法国
2019/07/10 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
师范教师毕业鉴定
2014/01/13 职场文书
端午节活动策划方案
2014/03/09 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
初中教师个人工作总结
2015/02/10 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
学生会部长竞选稿
2015/11/19 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
优化Mysql查询的示例
2022/04/26 MySQL