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自动显示最后更新时间
Mar 15 Javascript
JavaScript实现的图像模糊算法代码分享
Apr 22 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
AngularJS实现标签页的两种方式
Sep 05 Javascript
js遍历json的key和value的实例
Jan 22 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
javaScript产生随机数的用法小结
Apr 21 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
js实现简单抽奖功能
Nov 24 Javascript
vue实现拖拽交换位置
Apr 07 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
javascript的事件描述
2006/09/08 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
windows下更新npm和node的方法
2017/11/30 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
javascript实现计算器功能
2020/03/30 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
python中如何使用虚拟环境
2020/10/14 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
2015年维修工作总结
2015/04/25 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
2015年档案室工作总结
2015/05/23 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技