我们在实际的开发中,经常要获取页面中某个html元素,动态更新元素的样式、内容属性等。

我们已经知道在JavaScript中提供下面的方法获取子、父、兄节点的方法:
常规
通过父节点获取子节点:
parentObj.firstChild 获取已知父节点的第一个子节点
parentObj.lastChild 获取已知父节点的最后一个子节点
parentObj.childNodes 获取已知父节点的子节点数组(这里我在IE 7中获取的是所有直接的子节点)
parentObj.children 获取已知节点的直接子节点数组(在IE7中和childNodes效果一样)
parentObj.getElementsByTagName(tagName) 返回已知子节点中类型为指定值的子节点数组
通过临近节点获取兄弟节点:
neighbourNode.previousSibing 获取已知节点的前一个兄弟节点
neighbourNode.nextSibing 获取已知节点的下一个兄弟节点
通过子节点获取父节点:
1、childNode.parentNode 获取已知节点的父节点
上面的方法基本都是可以递归是使用的,parentObj.firstChild.firstChild.firstChild...但是这样的代码有一种傻傻的赶脚。。
扩展
在扩展之前,我们需要知道一些关于节点基础的知识:Dom节点中,每个节点都拥有不同的类型
W3C规范中常用的Dom节点的类型有以下几种
| 节点类型 | 说明 | 值 |
| 元素节点 | 每一个HTML标签都是一个元素节点 | 1 |
| 属性节点 | 元素节点(HTML标签)的属性,如id,class,name等 | 2 |
| 文本节点 | 元素节点或属性节点中的文本内容 | 3 |
| 注释节点 | 便是文档的注释,形式如<!--comment Text--> | 8 |
| 文档节点 | 表示整个文档(Dom树的根节点,即document) | 9 |
关于节点的名称,不同类型的节点对应不同的名称
| 节点类型 | 节点名称 |
| 元素节点 | HTML的名称(大写) |
| 属性节点 | 属性的名称 |
| 文本节点 | 它的值永远的都#text |
| 文档节点 | 它的值永远都是#document |
可以分别通过nodeType(节点类型),nodeName(节点名称),以及nodeValue(节点值)分别返回节点的类型、节点名称以及节点值(比如元素节点返回1,属性节点返回2)
JS获取兄弟节点的两种方法
方法一:通过父元素的子元素先找到含自己在内的“兄弟元素”,然后在剔除自己
function sibling(elem){
var a = [];
var b = elem.parentNode.children;
for (var i = 0 ; i < b.length ; i++){
if(b[i] !== elem) a.push(b[i]);
}
return a;
}
方法二:jQuery中实现方法,先通过查找元素的第一个子元素,然后在不断往下找下一个紧邻元素,判断并剔除自己。
siblings:function(elem)
{
return JQuery.sibling(elem.parentNode.firstNode,elem);
}
JQuery.sibling = function(n,elem){
var r = [];
for (;n;n= n.nextSibling){
if(n.nodeType == 1 && (!elem || elem != elem))
r.push(n);
}
return r;
}
在jQuery 1.2多的版本中都可以找到这段代码,我看的jQuery1.2.3的版本,在1800行可以找到这段代码:
把这个方法转化为独立可用的函数:
fucntion sibling(elem){
var r = [];
var n = elem.parentNode.firstChild;
for(;n;n = n.nextSibling) {
if(n.nodeType === 1 && n !== elem) {
r.push(n);
}
}
return r;
}
很显然通过这种方法查找特定节点的兄弟元素,可以很方便的避免的使用递归的冗余。
获取所有元素子节点
在JavaScript中,可以通过children来获取所有的子节点(只返回HTML中,甚至不返回子节点),几乎得到了所有浏览器的支持,但是在Firefox有的版本中不支持。
注意:在IE中,children包含注释节点
所以因为特殊情况的存在,有时候我们需要只获取元素节点,这样我们就可以通过nodeType属性来进行筛选,用上面的知识:nodeType == 1的节点为元素节点。
下面,自定义一个函数来获取所有的元素子节点:
var getChildNodes = function(elem) {
var childArr = elem.children || elem.childNodes,
childArrTem = new Array();
for (var i = 0 ; i < childArr.length; i ++ ) {
if (childArr[i].nodeType == 1){
childArrTem.push(childArr[i]);
}
}
return childArrTem;
}
获取所有的父节点
同样的,我们可以获取当前节点所有的父节点:
function getParents (elem){
var parents = [];
while(elem.parentNode){
parents.push(elem.parentNode)
elem = elem.parentNode;
}
return parents;
}
这样我们可以接受一个dom节点,最终会获取到document对象,如果只要获取到最上层是body,可以把while里的判断改为: while(elem.parentNode && elem.parentNode.tagName == 'BODY'
依据JavaScript中的提供的获取节点的方法和相关的知识,我们可以写出很多封装的方法,尝试一下,你可以写出多少种获取节点的方法呢?
当我们写出了一些操作节点的封装之后在去看jQuery中Dom操作节点方法的源码会轻松很多呢。
总结
以上所述是小编给大家介绍的JS获取子、父、兄节点方法小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js
# 父节
# 兄弟节点
# 子节点
# JS获取节点的兄弟
# 父级
# 子级元素的方法
# JS获取子节点、父节点和兄弟节点的方法实例总结
# JS获取父节点方法
# js如何获取兄弟、父类等节点
# js遍历子节点子元素附属性及方法
# JS简单添加元素新节点的方法示例
# JS实现DOM删除节点操作示例
# JavaScript给每一个li节点绑定点击事件的实现方法
# js常用节点操作实例总结
# 递归
# 我们可以
# 都是
# 文档
# 这段
# 微软
# 可以找到
# 小编
# 的是
# 我在
# 我看
# 你可以
# 在此
# 两种
# 有一种
# 可以通过
# 去看
# 给大家
# 几种
# 自定义
相关文章:
Swift中循环语句中的转移语句 break 和 continue
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
制作网站的模板软件,网站怎么建设?
个人摄影网站制作流程,摄影爱好者都去什么网站?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何零基础在云服务器搭建WordPress站点?
制作表格网站有哪些,线上表格怎么弄?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
C++如何使用std::optional?(处理可选值)
如何在服务器上三步完成建站并提升流量?
ui设计制作网站有哪些,手机UI设计网址吗?
高性价比服务器租赁——企业级配置与24小时运维服务
如何在Ubuntu系统下快速搭建WordPress个人网站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何用景安虚拟主机手机版绑定域名建站?
,如何利用word制作宣传手册?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何用AWS免费套餐快速搭建高效网站?
如何通过远程VPS快速搭建个人网站?
C#怎么使用委托和事件 C# delegate与event编程方法
网站制作难吗安全吗,做一个网站需要多久时间?
如何通过WDCP绑定主域名及创建子域名站点?
建站之星收费标准详解:套餐费用及年费价格表一览
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站168自助建站系统:快速模板定制与SEO优化指南
网站制作员失业,怎样查看自己网站的注册者?
如何解决ASP生成WAP建站中文乱码问题?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
如何使用Golang安装API文档生成工具_快速生成接口文档
如何通过PHP快速构建高效问答网站功能?
制作网页的网站有哪些,电脑上怎么做网页?
代购小票制作网站有哪些,购物小票的简要说明?
企业微网站怎么做,公司网站和公众号有什么区别?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站主机选购指南与交易推荐:核心配置解析
公司门户网站制作流程,华为官网怎么做?
如何快速搭建自助建站会员专属系统?
名字制作网站免费,所有小说网站的名字?
大连网站制作公司哪家好一点,大连买房网站哪个好?
音响网站制作视频教程,隆霸音响官方网站?
如何在阿里云ECS服务器部署织梦CMS网站?
网站制作报价单模板图片,小松挖机官方网站报价?
*请认真填写需求信息,我们会在24小时内与您取得联系。