I want to iterate over some DOM elements, I’m doing this:
document.getElementsByClassName( "myclass" ).forEach( function(element, index, array) {
//do stuff
});
but I get an error:
document.getElementsByClassName(“myclass”).forEach is not a function
I am using Firefox 3 so I know that both getElementsByClassName and Array.forEach are present. This works fine:
[2, 5, 9].forEach( function(element, index, array) {
//do stuff
});
Is the result of getElementsByClassName an Array? If not, what is it?
No, it’s not an array. As specified in DOM4, it’s an
HTMLCollection(in modern browsers, at least. Older browsers returned aNodeList).In all modern browsers (pretty much anything other IE <= 8), you can call Array’s
forEachmethod, passing it the list of elements (be itHTMLCollectionorNodeList) as thethisvalue:If you’re in the happy position of being able to use ES6 (i.e. you can safely ignore Internet Explorer or you’re using an ES5 transpiler), you can use
Array.from: