什么是javascript树结构_如何遍历DOM树?

13次阅读

JavaScript 中的“树结构”指 DOM 这种分层数据组织方式,以 document 为根节点,HTML 元素按父子、兄弟关系嵌套构成树;常用遍历法包括 childNodes/children、parentNode、next/previousElementSibling、querySelector 及递归 DFS 与队列 BFS。

什么是 javascript 树结构_如何遍历 DOM 树?

JavaScript 中的“树结构”指的是一种分层的数据组织方式,DOM(文档对象模型)就是典型的树结构——网页的 HTML 元素以父子、兄弟关系嵌套连接,形成一棵从 document 根节点出发的树。

DOM 树长什么样?

比如这段 HTML:

  

标题

  

一段文字

  

        

  • 列表项 1
  •     

  • 列表项 2
  •   

它对应的 DOM 树根是 document#app 是它的子节点(通常为 document.bodydocument.documentElement 的直接子元素),h1pul#app 的子节点,li 又是 ul 的子节点……逐层向下,构成清晰的父子层级。

立即学习Java 免费学习笔记(深入)”;

常用遍历 DOM 树的方法

遍历不等于“操作”,而是按某种顺序访问每个节点。DOM 提供了多种原生方式:

  • childNodes / children:获取某节点的全部子节点(含文本、注释等)或仅元素子节点(children 更常用)
  • parentNode:向上找父节点,直到 documentnull
  • nextSibling / previousSibling:找同级的下一个 / 上一个节点(注意可能拿到空白文本节点)
    → 更安全用 nextElementSiblingpreviousElementSibling
  • querySelector / querySelectorAll:用 CSS 选择器“跳着查”,适合目标明确的查找,不算严格意义上的遍历,但很实用

递归遍历:深度优先(DFS)

这是最贴近“树遍历本质”的写法,从根开始,先处理当前节点,再递归处理所有子元素:

function traverse(node) {
  if (node.nodeType === Node.ELEMENT_NODE) {
    console.log(node.tagName); // 只处理元素节点
  }
  for (let child of node.children) {
    traverse(child);
  }
}
traverse(document.body);

它自然地按 HTML 结构顺序访问:BODY → DIV → H1 → P → UL → LI → LI

循环遍历:广度优先(BFS)

用队列实现,一层一层往下扫,适合需要“先看到所有一级子元素”的场景:

function bfs(root) {
  const queue = [root];
  while (queue.length> 0) {
    const node = queue.shift();
    if (node.nodeType === Node.ELEMENT_NODE) {
      console.log(node.tagName);
    }
    for (let child of node.children) {
      queue.push(child);
    }
  }
}
bfs(document.body);

输出顺序类似:BODY → DIV → H1 → P → UL → LI → LI(取决于 div 下是否还有其他同级元素)。

基本上就这些。DOM 树本身不复杂,但容易忽略节点类型(如文本节点)、空白符影响和 childrenchildNodes 区别。用对方法,遍历就变得清晰可控。

以上就是什么是

text=ZqhQzanResources