js Element Traversal规范中的元素遍历方法


Posted in Javascript onApril 19, 2018

支持Element Traversal 规范的浏览器有IE 9+、Firefox 3.5+、Safari 4+、Chrome 和Opera 10+。

对于元素间的空格,在IE9之前,都不会返回文档节点,其它的所有浏览器都会返回文档节点。

为了兼容浏览器这间的差异,又不更改已有的DOM 标准,所以有了 Element Traversal 规范。

这个规范为 元素增加了 5 个 属性

childElementCount
firstElementChild
lastElementChild
previousElementSibling
nextElementSibling

详细官方文档; http://www.w3.org/TR/ElementTraversal/

对于元素间的空格,IE9以前的版本不会返回文本节点,而其他浏览器都会将空格当做是文本节点返回。这就导致了在使用childNodes和firstChild的属性时行为的不一致。为了弥补这一差异,而同时又保持DOM规范的不变,W3C Element Traversal规范新定义了一组属性。

Element Traversal API为DOM元素添加了下面5个属性:

  • childElementCount:返回子元素(不包括文本节点和注释)的个数。
  • firstElementChild:指向第一个子元素。
  • lastElementChild:指向最后一个子元素。
  • previousElementSibling:指向前一个同辈元素。
  • nextElementSibling:指向后一个同辈元素。

支持的浏览器为DOM元素添加了这些属性,利用这些元素不必担心空白文本节点,从而可以非常方便的查找DOM元素了。

下面是一个示例。在以前,要跨浏览器遍历某个元素的所有子元素时,需要像下面这样编写代码:

var i,len,child = element.firstChild;
while(child != element.lastChild){
 if(child.nodeType == 1){
  processChild(child);
 }
 child = child.nextSibling;
}

而使用Element Traversal新增的属性,代码就会变得非常简洁:

var i,len,child = element.firstElementChild;
while(child != element.lastElementChild){
 processChild(child);
 child = child.nextElementSibling;
}

支持Element Traversal规范的浏览器有:IE9+,Firfox3.5+,Safari4+,Chrome和Opera10+。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之获得ExtJS
Apr 29 Javascript
了解了这些才能开始发挥jQuery的威力
Oct 10 Javascript
nodeType属性返回被选节点的节点类型介绍
Nov 22 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
详解js静态资源文件请求的处理
Aug 01 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
详解JS模块导入导出
Dec 20 Javascript
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
关于vue中的ajax请求和axios包问题
Apr 19 #Javascript
详解vue 数据传递的方法
Apr 19 #Javascript
Vue 去除路径中的#号
Apr 19 #Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 #Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 #Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 #Javascript
JS使用setInterval实现的简单计时器功能示例
Apr 19 #Javascript
You might like
6个超实用的PHP代码片段
2015/08/10 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
jquery中动态效果小结
2010/12/16 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
使图片旋转的3种解决方案
2013/11/21 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python中p-value的实现方式
2019/12/16 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
化学相关工作求职信
2013/10/02 职场文书
酒店管理自荐信
2013/10/23 职场文书
男方婚礼答谢词
2015/01/20 职场文书
运动会100米广播稿
2015/08/19 职场文书
改进工作作风心得体会
2016/01/23 职场文书
学习计划是什么
2019/04/30 职场文书