Beim Versuch, mit der getElementsByClassName-Methode über DOM-Elemente zu iterieren, stoßen Entwickler möglicherweise auf eine eigenartiger Fehler: „document.getElementsByClassName(‘myclass‘).forEach is keine Funktion.“ Obwohl in Firefox 3 sowohl getElementsByClassName als auch Array.forEach vorhanden sind, bleibt der Fehler bestehen.
Die Verwirrung entsteht, weil das Ergebnis von getElementsByClassName kein Array ist. In modernen Browsern handelt es sich um eine HTMLCollection, eine spezielle Sammlung, die auf HTML-Elemente zugeschnitten ist. Obwohl es Array-ähnliche Eigenschaften besitzt, handelt es sich nicht um ein echtes Array.
Um das Problem zu lösen und erfolgreich über die Elemente zu iterieren, können Entwickler einen Trick anwenden: Sie können die forEach-Methode des Arrays aufrufen und dabei die HTMLCollection als übergeben dieser Wert:
var els = document.getElementsByClassName("myclass"); Array.prototype.forEach.call(els, function(el) { // Do stuff here });
Diese Technik ermöglicht, dass die Iteration wie erwartet abläuft. Alternativ können Entwickler Array.from verwenden, das in ES6-Umgebungen verfügbar ist, um die HTMLCollection vor der Iteration in ein Array zu konvertieren:
Array.from(els).forEach((el) => { // Do stuff here });
Durch die Verwendung dieser Techniken können Entwickler effektiv über getElementsByClassName erhaltene DOM-Elemente iterieren und so sicherstellen Kompatibilität mit der Array.forEach-Methode.
Das obige ist der detaillierte Inhalt vonWarum funktioniert „getElementsByClassName' nicht direkt mit „forEach'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!