Переменная childrenявляется NodeListэкземпляром, а NodeLists не являются истинными, Arrayпоэтому они не наследуют forEachметод.
Также некоторые браузеры поддерживают его nodeList.forEach
ES5
Вы можете использовать slicefrom Arrayдля преобразования NodeListв правильный Array.
var array = Array.prototype.slice.call(children);
Вы также можете просто callвызвать forEachи передать его в NodeListкачестве контекста.
[].forEach.call(children, function(child) {});
ES6
Вы можете использовать этот fromметод для преобразования вашего файла NodeListв формат Array.
var array = Array.from(children);
Или вы также можете использовать синтаксис распространения,... например
let array = [ ...children ];
Хак, который можно использовать, NodeList.prototype.forEach = Array.prototype.forEachи вы можете использовать forEachс любым NodeListбез необходимости конвертировать их каждый раз.
NodeList.prototype.forEach = Array.prototype.forEach
var children = element.childNodes;
children.forEach(function(item){
console.log(item);
});
См. Подробное описание списков узлов, массивов, преобразования списков узлов и понимания модели DOM для получения хорошего объяснения и других способов сделать это.