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 相关文章推荐
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
Javascript类库的顶层对象名用户体验分析
Oct 24 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
javascript cookie的简单应用
Feb 24 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
layui原生表单验证的实例
Sep 09 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
php时区转换转换函数
2014/01/07 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
python字符串连接方法分析
2016/04/12 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
Python的垃圾回收机制详解
2019/08/28 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
专科毕业生学习生活的自我评价
2013/10/26 职场文书
主题婚礼策划方案
2014/02/10 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
亚运会口号
2014/06/20 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
特此通知格式
2015/04/27 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书