新闻中心

js中如何递归遍历dom树

2025-11-10
浏览次数:
返回列表
递归遍历DOM树可访问元素及其所有后代,常用childNodes或children遍历子节点并递归调用自身,根据需求选择处理节点类型。

js中如何递归遍历dom树

在 J*aScript 中,递归遍历 DOM 树是一种常见的操作,用于访问某个元素及其所有后代节点。你可以通过检查节点的子节点并递归调用自身来实现。

基本思路

从一个根节点开始,访问该节点,然后遍历它的每个子节点,对每个子节点再次执行相同的操作。这样就能深入到树的每一层。

常用方法如下:

使用 childNodes 遍历所有子节点(包括文本节点、注释等):

如果你需要处理所有类型的节点,可以使用 childNodes

示例代码:

function walkDOM(node) {
  // 处理当前节点
  console.log(node.nodeName);

  // 获取所有子节点
  let children = node.childNodes;
  for (let i = 0; i < children.length; i++) {
    walkDOM(children[i]); // 递归调用
  }
}

// 调用:从 document.body 开始遍历
walkDOM(document.body);

只遍历元素节点(忽略文本和注释)

如果只想处理 HTML 元素(如 div、span 等),建议使用 children 或检查 nodeType

方式一:使用 children(只包含元素节点)

火龙果写作 火龙果写作

用火龙果,轻松写作,通过校对、改写、扩展等功能实现高质量内容生产。

火龙果写作 277 查看详情 火龙果写作

function walkElements(node) {
  console.log(node.tagName); // 输出标签名

  let children = node.children; // 只包含元素节点
  for (let i = 0; i < children.length; i++) {
    walkElements(children[i]);
  }
}

walkElements(document.body);

方式二:使用 childNodes + nodeType 判断

更精确地控制节点类型,例如只处理元素节点(nodeType === 1)。

function walkNodeByType(node) {
  if (node.nodeType === 1) { // 元素节点
    console.log('Element:', node.tagName);
  }

  let child = node.firstChild;
  while (child) {
    walkNodeByType(child);
    child = child.nextSibling;
  }
}

walkNodeByType(document.body);

应用场景举例

  • 查找特定类名或属性的所有元素
  • 修改页面中所有文本节点的内容
  • 序列化 DOM 结构为 JSON 格式
  • 实现自定义的事件委托机制

比如:收集页面中所有 input 元素:

function findAllInputs(node, result = []) {
  if (node.nodeType === 1 && node.tagName === 'INPUT') {
    result.push(node);
  }

  node.childNodes.forEach(child => {
    findAllInputs(child, result);
  });

  return result;
}

const inputs = findAllInputs(document.body);
console.log(inputs);

基本上就这些。递归遍历 DOM 的关键是理解树形结构,并正确访问子节点。选择 childNodes 还是 children 取决于你是否需要处理非元素节点。不复杂但容易忽略细节。

以上就是js中如何递归遍历dom树的详细内容,更多请关注其它相关文章!


# 如果你  # 网站建设企业品牌公司  # 瀍河网站建设哪里有  # 恩平市网络推广营销  # 维基类网站推广  # 什么网站可以推广净水器  # 建设网站的三方面建议  # 批量关键词排名提升公式  # 传统seo怎么优化  # 网站seo优化联络天天软文  # 甘肃抖音seo排名厂家  # 你可以  # 是一种  # javascript  # 扁平化  # 如何实现  # 如何使用  # 自定义  # 有哪些  # 遍历  # 递归  # node  # json  # js  # html  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  千牛数据看板网页版_千牛数据看板网页版访问方法  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  在React函数组件中利用原生HTML5进行邮箱地址验证  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  微信网页版登录教程_微信网页版登录入口在哪  使用Python高效删除Word宏并转换DOCM为DOCX格式  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  浏览器打开即用 美图秀秀网页版入口  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  整合Supabase认证与Django模型:跨模式迁移的解决方案  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  抖音网页版平台入口 抖音网页版官网在线访问教程  机器学习中对数变换预测结果的反向还原  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  Lar*el 8 多关键词数据库搜索优化实践  如何在Promise链中有效终止错误处理后的执行  黑猫投诉统一入口官网 消费者权益保护投诉平台  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  J*aScript中在Map循环中检测并处理空数组元素  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  Python中高效访问嵌套字典与列表中的键值对  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  python3时间如何用calendar输出?  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  EMS快递官网app_中国邮政速递物流手机客户端  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  Fabric模组开发:自定义物品与物品组的现代管理方法  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  必由学在线入口 必由学网页版快速登录入口  4399免费游戏网址入口 4399小游戏免费入口点开即玩  J*aScript中高效管理与清空动态列表:避免循环陷阱  C++ vector二维数组定义_C++ vector of vector用法  蛙漫安全无毒 官方认证的绿色入口  必由学官方网站入口 必由学学生教师共用登录通道  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  AO3最新官网入口公告_2025AO3镜像站实时查询方法  J*aScript设计模式实践_j*ascript代码优化  蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗  126邮箱网页版官方入口 126邮箱账号在线登录平台  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口 

搜索