@KambulovDanil

Как изменить рекурсию по дереву?

Всем привет. Мне нужна помощь, я в JS пару дней. Помогите подправить немного код. Мне надо рекурсивно проходить по DOM дереву.

Вот есть такой код
<ul>
    <li>Привет</li>
    <li>мир</li>
</ul>
<div>
    <h3>ЗАГОЛОВОК</h3>
</div>


function enumChildNodes(node) {
    // если нам передали элемент
    if (node && 1 == node.nodeType) {
        // берем его первый дочерний узел
        var child = node.firstChild;
        // пока узлы не закончились
        while (child) {
            // если этот узел является элементом
            if (1 == child.nodeType) {
                // что-то делаем с найденным элементом
                console.log('элемент ' + child.innerText);
                // рекурсивно перечисляем дочерние узлы
                enumChildNodes(child);
            };
            // переходим к следующему узлу
            child = child.nextSibling;
        };
    };
};
 
// перечисляем содержимое body
enumChildNodes(document.body);


ВЫВОД:
"элемент Привет
мир"
"элемент Привет"
"элемент мир"
"элемент ЗАГОЛОВОК"
"элемент ЗАГОЛОВОК"
"элемент //&lt;![CDATA[


Но мне нужно получить innerText каждого элемента следующим образом
"элемент Привет"
"элемент мир"
"элемент ЗАГОЛОВОК"

Заранее благодарен за помощь
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@i1yas
const enumChildNodes = (node, acc = []) => {
  if (node.children.length === 0) // дошли до последнего уровня
    return acc.concat(`${node.tagName} ${node.innerText}`);
  return acc.concat(
    ...[...node.children].map(node => enumChildNodes(node, acc))
  )
}

enumChildNodes(document.body).forEach(item => console.log(item))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы