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版代码高亮
Jun 26 Javascript
jQuery 获取URL参数的插件
Mar 04 Javascript
js中的数组Array定义与sort方法使用示例
Aug 29 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
JQuery中Text方法用法实例分析
May 18 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
原生JS实现留言板功能
Feb 08 Javascript
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
深入浅析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 addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
php实现插入排序
2015/03/29 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python pymongo模块用法示例
2018/03/31 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Python实现Event回调机制的方法
2019/02/13 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python的collections模块真的很好用
2021/03/01 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
企业趣味活动方案
2014/08/21 职场文书
毕业感言怎么写
2015/07/31 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle