How can I change the recursion on a tree?

  • 0
    Hello everyone. I need help, I've been in JS for a couple of days. Help me tweak the code a bit. I need to recursively traverse the DOM tree.

    Here is the code
    <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);


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


    But I need to get the innerText of each element like this
    "элемент Привет"
    "элемент мир"
    "элемент ЗАГОЛОВОК"

    Thanks in advance for your help
    JavaScript Anonymous, Mar 2, 2019

  • 1 Answers
  • 0
    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))
    Nicholas Warren

Your Answer
To place the code, please use CodePen or similar tool. Thanks you!