Mit forEach über ein array von getElementsByClassName Ergebnisse in "TypeError: undefined ist keine Funktion"

In mein JSFiddle, ich bin einfach zu versuchen, Sie zu iterieren über ein array von Elementen. Das array ist nicht leer, da die log-Anweisungen beweisen. Doch der Aufruf forEach gibt mir die (nicht so hilfreich) "nicht Erfasste TypeError: undefined ist nicht eine Funktion" Fehler.

Ich muss etwas dumm, was mache ich falsch?

Mein code:

JS:

var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
  console.log(v);
});

CSS:

.myClass {
  background-color: #FF0000;
}

HTML:

<div class="myClass">Hello</div>

  • arr ist kein array, sondern ein HTMLCollection. Das es nicht die gleichen Methoden wie ein array. developer.mozilla.org/en-US/docs/Web/API/... . Hier ist SO ein post darüber auch: stackoverflow.com/questions/13433799/...
  • So etwas wie [1,2,3].forEach(function(v,i,a) { console.log(v); }); ist in Ordnung. Was ist der Unterschied zwischen dieser und der array in meinem Beispiel?
  • Sie nicht eine array in deinem Beispiel. Was macht Sie denken, es ist ein array?
  • die Tatsache, dass ich verwendet getElementsByClassName anderswo und iteriert über die es mit einer normalen for-Schleife. Sie lernen jeden Tag etwas neues!
  • Ahh, dass ist es, was ich erwartete, Sie zu sagen. Also das ist ja, als dystroy zeigte in seiner Antwort, es gibt array-ähnliche Objekte, können "act" auf die gleiche Weise - mit Indizes für properties...was getElementsByClassName gibt
  • Als arr instanceof Array führt false es nicht wahrnehmen kann jeder Prototyp Methoden der Array Objekt wie - Array.der Prototyp.forEach(). arr ist ein HTMLCollection und ein array-Objekt wie (aber nicht Erben oder instanziieren Array). Damit Ihre standard - for Schleife funktioniert so, dass einfach durchläuft den index des Objekts und ist nicht ein Prototyp Array.
  • sollte sich die Unterschiede zwischen integrierten und host-Objekte. Erstere entsprechen ECMA-262, die später nur so viel, wie der Gastgeber wünscht. Der DOM hat viele Objekte, die es ermöglichen, Zugang zu den Mitgliedern, die durch den index (- Dokument.Bilder, Dokument.Formen, bilden.Elemente, wählen Sie.Optionen, etc.), meist basierend auf der NodeList-Schnittstelle.

InformationsquelleAutor Jer | 2014-06-17
Schreibe einen Kommentar