2016-08-15 24 views
-1

这是Ive第二次遇到这个&这次决定提出一个问题,而不是寻找替代解决方案。在DOM元素数组上调用内置函数

场景: 我们从document.getElementsByClassName获取元素列表。返回的列表是一个数组。为什么我不能在这个返回的数组上使用像map, find, filter这样的内置数组函数?

https://jsfiddle.net/xbka5pt2/

<div class="classy"></div> 
<div class="classy"></div> 
<div class="classy"></div> 
<div class="classy"></div> 
<div class="classy"></div> 

的Javascript:

let list = document.getElementsByClassName("classy"); 
console.log(list); 
// the following returns a 'typeError': 
// "list.map is not a function" 
list.map(function(ele){ 
    console.log("ele is", ele); 
}); 

我得到的错误:TypeError: list.map is not a function当我尝试&使用地图功能列表阵列上。谢谢。

+2

因为它不是一个数组,它是一个活[的HTMLCollection](https://developer.mozilla.org/de/文档/网络/ API /的HTMLCollection)。 – DavidDomain

+0

感谢大卫,我该如何将它转换为数组? – Kayote

+1

由于您使用的是ES6,您可以简单地调用'Array.from(list)'。 – DavidDomain

回答

1

这是因为getElementsByClassname返回一个HtmlCollection。这里是一个工作的解决方案:

let list = document.getElementsByClassName("classy"); 
console.log(list); 

Array.prototype.map.call(list, function(ele) { 
    console.log("ele is", ele); 
}); 

通过调用从列表作为参数Array的原型可以映射每个函数。另一种可能性是与[]算这样称呼它:

[].map.call(list, function (el) {...}); 
+0

谢谢,这很有道理。 – Kayote