Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
75
rated 0 times [  81] [ 6]  / answers: 1 / hits: 175672  / 10 Years ago, wed, july 16, 2014, 12:00:00

I'm trying to loop through childNodes like this:



var children = element.childNodes;
children.forEach(function(item){
console.log(item);
});


However, it output Uncaught TypeError: undefined is not a function due to forEach function. I also try to use children instead of childNodes but nothing changed.



Does anybody know what's going on?


More From » loops

 Answers
35

The variable children is a NodeList instance and NodeLists are not true Array and therefore they do not inherit the forEach method.



Also some browsers actually support it nodeList.forEach






ES5



You can use slice from Array to convert the NodeList into a proper Array.



var array = Array.prototype.slice.call(children);



You could also simply use call to invoke forEach and pass it the NodeList as context.



[].forEach.call(children, function(child) {});






ES6



You can use the from method to convert your NodeList into an Array.



var array = Array.from(children);



Or you can also use the spread syntax ... like so



let array = [ ...children ];






A hack that can be used is NodeList.prototype.forEach = Array.prototype.forEach and you can then use forEach with any NodeList without having to convert them each time.



NodeList.prototype.forEach = Array.prototype.forEach
var children = element.childNodes;
children.forEach(function(item){
console.log(item);
});





See A comprehensive dive into NodeLists, Arrays, converting NodeLists and understanding the DOM for a good explanation and other ways to do it.


[#70188] Monday, July 14, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
rayvenc

Total Points: 666
Total Questions: 125
Total Answers: 99

Location: Northern Ireland
Member since Mon, Nov 14, 2022
2 Years ago
;