javascript - 我需要使用递归来导航 DOM 中的每个元素的帮助

标签 javascript recursion dom

我需要使用递归来导航 DOM 中的每个元素,并且对于每个 body 元素,确定它是否是元素节点。如果是,我需要向其添加一个子节点。我需要使用 JavaScript 来完成这项作业。这是我的 JavaScript 文件中到目前为止的内容:

    window.addEventListener("load", function() {

      var highlightButton = document.getElementById("highlight");
      highlightButton.addEventListener('click', search);

      function search(node) {
       if (node.nodeType === 1) {
       var spanEl = document.createElement("span");
       spanEl.className = "hoverNode";
       node.appendChild(spanEl);
       spanEl.innerHTML = spanEl.parentNode.tagName;
     }
   }
 })

我了解如何附加子节点,但不知道如何遍历整个 DOM 并将子节点附加到每个元素。

最佳答案

鉴于“每个正文元素”实际上意味着“正文中的每个元素”,您可以从一个元素开始并获取其所有子元素。循环遍历子元素,如果有任何类型为 1 并且有子节点,则使用该元素再次调用该函数。

如果它没有子节点,则转到下一个子节点,依此类推。以下只是递归所有节点并仅选出类型 1 的示例。您可以修改它来执行任何操作。

// Call with a document or HTML element
function checkBodyElements(node) {

  // Recursive function
  function traverseBody(node) {

    if (node.childNodes.length) {

      // Loop over every child node
      node.childNodes.forEach(child => {

        // If it's a type 1, call the function recursively
        if (child.nodeType == 1) {
          console.log(child.tagName, child.nodeType)
          traverseBody(child);
        }
      });
    }
  }

  // Get the body element      
  let body = node.querySelector('body');
  
  // If a body element was found, traverse its children
  if (body) {
    traverseBody(body);
  }
}

window.onload = checkBodyElements(document);
<div>
  <div>
    <p><span></span>
    </p>
  </div>
  <div>
    <p><span></span>
    </p>
  </div>

</div>

关于javascript - 我需要使用递归来导航 DOM 中的每个元素的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142547/

相关文章:

javascript - 如何使用 javascript 或 jquery 迭代自己制作的 xhtml 节点

algorithm - 计数紊乱

c - 需要解释我们如何使用递归二进制搜索算法搜索数学函数的零点

javascript - 更改 'window' 时,存储在 'Window.location.href' 对象上的属性将被删除

javascript - 指定组件所需的 props

javascript - 三 JS 网格在模型的另一侧可见

javascript - jQuery 缓存和遍历对象

recursion - 函数式编程,递归游戏状态循环

javascript - 未命名的 href 链接包装在两个容器中

javascript - 如何让我的条件语句不那么难看