I'm trying to make a simple loop:
const parent = this.el.parentElement
console.log(parent.children)
parent.children.forEach(child => {
console.log(child)
})
But I get the following error:
VM384:53 Uncaught TypeError: parent.children.forEach is not a function
Even though parent.children
logs:
What could be the problem?
Note: Here's a JSFiddle.
There is no need for the
forEach
, you can iterate using only thefrom
's second parameter, like so:That's because
parent.children
is a NodeList, and it doesn't support the.forEach
method (as NodeList is an array like structure but not an array), so try to call it by first converting it to array usingThis has always worked for me
parent.children
is not an array. It is HTMLCollection and it does not haveforEach
method. You can convert it to the array first. For example in ES6:or using spread operator:
parent.children
will return a node list, technically a html element Collection. That is an array like object, but not an array, so you cannot call array functions over it directly. At this context you can useArray.from()
to convert that into a real array,If you are trying to loop over a
NodeList
like this:I highly recommend loop it this way:
Personally, I've tried several ways but most of them didn't work as I wanted to loop over a
NodeList
, but this one works like a charm, give it a try!The
NodeList
isn't an Array, but we treat it as an Array, usingArray.
So, you need to know that it is not supported in older browsers!Need more information about
NodeList
? Please read its documentation on MDN.