2016-08-15 27 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