javascript基础学习系列四百二十四:元素遍历

文章介绍了在IE9之前浏览器对于元素间空格的不同处理导致的DOM差异,W3C为此引入ElementTraversal规范,提供了firstElementChild等5个新属性,简化了跨浏览器遍历元素子节点的代码。这些属性在IE9及以上和现代浏览器中得到支持。
摘要由CSDN通过智能技术生成

IE9 之前的版本不会把元素间的空格当成空白节点,而其他浏览器则会。这样就导致了 childNodes和 firstChild 等属性上的差异。为了弥补这个差异,同时不影响 DOM 规范,W3C 通过新的Element
Traversal 规范定义了一组新属性。
Element Traversal API 为 DOM 元素添加了 5 个属性:

 firstElementChild,指向第一个 Element 类型的子元素(Element 版 firstChild);
 lastElementChild,指向最后一个 Element 类型的子元素(Element 版 lastChild);
 previousElementSibling ,指向前一个 Element 类型的同胞元素( Element 版
previousSibling);
 nextElementSibling,指向后一个 Element 类型的同胞元素(Element 版 nextSibling)。

在支持的浏览器中,所有 DOM 元素都会有这些属性,为遍历 DOM 元素提供便利。这样开发者就不用担心空白文本节点的问题了。
举个例子,过去要以跨浏览器方式遍历特定元素的所有子元素,代码大致是这样写的:

let currentChildNode = parentElement.firstChild; 
// 没有子元素,firstChild 返回 null,跳过循环
while (currentChildNode) { 
 if (currentChildNode.nodeType === 1) { 
 // 如果有元素节点,则做相应处理
 processChild(currentChildNode); 
 } 
 if (currentChildNode === parentElement.lastChild) { 
 break; 
 } 
 currentChildNode = currentChildNode.nextSibling; 
} 

使用 Element Traversal 属性之后,以上代码可以简化如下:

let currentChildElement = parentElement.firstElementChild;
// 没有子元素,firstElementChild 返回 null,跳过循环
while (currentChildElement) { 
 // 这就是元素节点,做相应处理
 processChild(currentChildElement); 
 if (currentChildElement === parentElement.lastElementChild) { 
 break; 
 } 
 currentChildElement = currentChildElement.nextElementSibling; 
} 

IE9 及以上版本,以及所有现代浏览器都支持 Element Traversal 属性。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值