JS 遍历 NodeList 对象
文章目录
0x1 问题描述
本博客使用的 Yilia
主题在移动设备上有这样一个问题:标签无法正常显示。使用 Chrome 浏览器进行远程调试,捕捉到了下列错误信息:
|
|
0x2 溯源
JavaScript 的继承机制是基于原型的。例如,一个数组元素 arr
上之所以有一些数组方法(比如 forEach
),是因为它的原型链上有这些方法:
arr → Arrary.prototype → Object.prototype → null
NodeList
元素 tags 的原型链如下:
tags → NodeList.prototype → Object.prototype → null
如果 NodeList 的原型上没有 forEach
方法,调用该方法必然会报错。查阅文档可知,DOM4 中的 NodeList
接口只实现了 item
方法。
但是,只是一些旧的浏览器中 NodeList
对象还没有实现 forEach
、values
这些方法。所以,尽管 NodeList
不是 Array
,它也是能够使用 forEach
方法遍历元素的。
我在手机上使用的 Chrome 浏览器比较老旧,版本是 47.0.2526.83
。使用 Object.getPrototypeOf
查看 NodeList
原型,发现确实是只实现了 item
方法。而在 Macbook 上安装的则是最新版的 Chrome 浏览器。
归根结底,问题原因是处在了对老版本浏览器的兼容上了。
0x3 解决方案
我们可以简单的通过 prototypes
扩展 NodeList 的方法来兼容老浏览器。不过这样做可能会遇到一些问题,具体可以查阅参考文献第三条。
|
|
除了通过 prototypes
扩展 DOM
方法外,我们还可以直接使用 for
循环或者是自定义一个 forEach 的函数来遍历 NodeList。
参考文献
文章作者 疯魔慕薇
上次更新 2016-12-14