Em meu JSFiddle , estou simplesmente tentando iterar em uma matriz de elementos. O array não está vazio, como provam as declarações de log. No entanto, a chamada para forEachme dá o (não tão útil) erro “Não capturado TypeError: undefinednão é uma função”.
Devo estar fazendo algo estúpido; O que estou fazendo de errado?
Meu código:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
[1,2,3].forEach(function(v,i,a) { console.log(v); });está bom. Qual é a diferença entre isso e a matriz no meu exemplo?
arr instanceof Arrayresultará, falseele não pode se beneficiar de nenhum método de protótipo do Arrayobjeto, como Array.prototype.forEach () . arré um HTMLCollection e um objeto como um array (mas não herda ou instanciado Array). Portanto, seu forloop padrão funcionará como se simplesmente iterasse através do índice do objeto e não fosse um protótipo de Array.
arrnão é uma matriz, mas aHTMLCollection. Não possui os mesmos métodos de um array. developer.mozilla.org/en-US/docs/Web/API/… . Aqui está um post sobre isso mesmo: stackoverflow.com/questions/13433799/…