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 相关文章推荐
javascript IE中的DOM ready应用技巧
Jul 23 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
Nov 11 Javascript
jquery一句话全选/取消全选
Mar 01 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
JS实现左右无缝轮播图代码
May 01 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
May 25 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
Vue 表情包输入组件的实现代码
Jan 21 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 Javascript
关于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
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
location.href用法总结(最主要的)
2013/12/27 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
新手vue构建单页面应用实例代码
2017/09/18 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
Python写的英文字符大小写转换代码示例
2015/03/06 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python django model联合主键的例子
2019/08/06 Python
Django之模板层的实现代码
2019/09/09 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
投标担保书范文
2014/04/02 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
结婚典礼致辞
2015/07/28 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书