Nel*_*mel 8 javascript prototype nodelist internet-explorer-8
我很难NodeList在IE 8 中将数据转换为数组.以下在Chrome中完美运行,但在IE 8 toArray()中无法识别为有效:
NodeList.prototype.toArray = function() {
var a = [];
for (var i = 0, len = this.length; i < len; i++) {
a[i] = this[i];
}
return a;
}
document.all.tags("div").toArray();
Run Code Online (Sandbox Code Playgroud)
我尝试将一个原型函数添加到一个数组只是为了检查我的理智,它正常工作.这让我觉得IE 8实际上并没有返回NodeList?这是一个完整的例子:
我究竟做错了什么?
如果您正在寻找使用ES6的现代答案:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
var nodes = document.querySelectorAll('div');
nodes = Array.from(nodes);
Run Code Online (Sandbox Code Playgroud)
老问题,但这是一个久经考验的真实方法:
var nodes=document.querySelectorAll("div"); // returns a node list
nodes=Array.prototype.slice.call(nodes); // copies to an array
Run Code Online (Sandbox Code Playgroud)
解释
document.querySelectorAll使用 CSS 样式的选择器来查找元素并返回一个节点列表。它从 IE 8 开始工作。slice方法将类数组集合的一部分(在本例中为全部)复制到一个新数组中。call 允许您从一个对象借用一个方法以用于另一个对象要查找节点列表,您也可以使用`document.getElementsByTagName(),但这个更灵活。
首先,不要使用document.all——它是非标准的并且已被弃用。用于document.getElementsByTagName获取您案例中的 DIV 元素。
其次,不要扩展 DOM 对象,例如NodeList——内置对象是一个非常奇怪的品种,不需要像您通常使用的任何其他对象一样运行。请参阅这篇文章以获得对此的深入解释:扩展 DOM 有何问题。
| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |