2016-08-15 2 views
-1

Dies ist das zweite Mal, dass ich diese & dieses Mal getroffen habe entschieden, eine Frage zu stellen, anstatt eine alternative Lösung zu finden.Integrierte Funktionen auf DOM-Elementen aufrufen Array

Szenario: Wir haben eine Liste von Elementen, die wir von document.getElementsByClassName erhalten. Die zurückgegebene Liste ist ein Array. Warum kann ich die integrierten Array-Funktionen wie map, find, filter nicht für dieses zurückgegebene Array verwenden?

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); 
}); 

erhalte ich die Fehlermeldung: TypeError: list.map is not a function, wenn ich versuche & die Kartenfunktion auf der Liste Array. Vielen Dank.

+2

Weil es kein Array ist, ist es eine Live-[HTMLCollection] (https://developer.mozilla.org/de/ docs/Web/API/HTMLCollection). – DavidDomain

+0

Danke David, wie konvertiere ich es in ein Array? – Kayote

+1

Da Sie ES6 verwenden, können Sie 'Array.from (list)' einfach aufrufen. – DavidDomain

Antwort

1

Dies liegt daran, dass getElementsByClassname eine HtmlCollection zurückgibt. Hier ist eine funktionierende Lösung:

Durch den Aufruf des Prototyps aus Array mit der Liste als Parameter können Sie jede Funktion zuordnen. Eine andere Möglichkeit wäre es zu nennen mit dem [] Operator wie folgt aus:

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

Danke, das macht Sinn. – Kayote

Verwandte Themen