JavaScript: Durchläuft alle von getElementsByTagName zurückgegebenen Elemente
Ich versuche eine Schleife durch alle Elemente retruned von getElementsByTagName("input")
forEach zu verwenden. Irgendwelche Ideen, warum dies nicht funktioniert in FF, Chrome oder IE?
<html>
<head>
</head>
<body>
<input type="text" value="" />
<input type="text" value="" />
<script>
function ShowResults(value, index, ar) {
alert(index);
}
var input = document.getElementsByTagName("input");
alert(input.length);
input.forEach(ShowResults);
</script>
</body>
</html>
InformationsquelleAutor der Frage slayernoah | 2013-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie konvertieren die nodelist-array mit:
oder verwenden Sie die for-Schleife.
und ändern Ausstellungsergebnisse Funktion:
InformationsquelleAutor der Antwort Dvir
Yay, ES6:
MDN Doc für Spread-Operator (
...
)InformationsquelleAutor der Antwort jtheletter
Weil
input
ist kein array, es istHTMLCollection
Verwenden Sie eine
for
Schleife wäre besser.Und da
HTMLCollection
s sind array-ähnliche Objekte können Siecall
Array#forEach
auf, wie dieseInformationsquelleAutor der Antwort grape_mao
Es ist becauseinput ist html-collection. html-Sammlung nicht über forEach.
können Sie ganz einfach conver es auf array von Arrays.der Prototyp.Scheibe
Beispiel:
http://jsfiddle.net/fPuKt/1/
InformationsquelleAutor der Antwort Daniel Dykszak
Grund, dies nicht funktionieren wird, weil 'getElementsByTagName' gibt ein array - artiges Objekt, anstatt eine tatsächliche array. In Fall, dass Sie nicht bewusst sind, hier ist, wie beide Aussehen :-
So, da Array-ähnliche Objekte Erben von " Objekt.Prototyp' statt 'Array.Prototyp', dies bedeutet, dass die Array-ähnliche Objekte können nicht auf gemeinsame Array-Prototyp-Methoden wie forEach(), push(), map(), filter () und slice().
Hoffe, das hilft!
InformationsquelleAutor der Antwort Naman Sancheti
HTMLCollections nicht die gleichen Methoden wie arrays. Sie können dies überprüfen, durch tiping dies in der javascript-Konsole Ihres Browsers.
Und die Konsole zurück
true
wennelements
(in diesem Fall) hat eine Methode namensforEach
zu nennen.InformationsquelleAutor der Antwort Andrés Torres
In ES6 können Sie die
spread
Betreiber zu konvertieren, eine HtmlCollection in ein Array. siehe diese Frage Warum kann ich nicht mit Arrays.forEach auf eine Sammlung von Javascript-Elementen?InformationsquelleAutor der Antwort inostia
Habe ich dieses:
Können Sie jetzt mit der Karte auf jeden
HTMLCollection
.InformationsquelleAutor der Antwort Toni Almeida