讲师中心 微信公众号

工具推荐

视频效率加速
剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

如何使用 JavaScript 递归遍历嵌套表格并导出为标准 CSV 文件

胖磊小哥_5063

胖磊小哥_5063

发布时间:2026-01-07 13:51:17

|

362人浏览过

|

来源于php中文网

原创

如何使用 JavaScript 递归遍历嵌套表格并导出为标准 CSV 文件

本文介绍一种健壮的 javascript 方法,用于遍历含嵌套 `

Excel专家专业版
Excel专家专业版

全场景表格诊断与建模引擎,含跨平台降级矩阵、VBA 生成、敏感性分析与仪表盘设计。

下载
` 的 dom 结构(如“profile > linked users”层级),提取所有有效数据行(忽略 `colspan` 占位行和嵌套容器行),生成符合 csv 规范的纯文本,并支持浏览器下载。

在处理动态渲染的层级化表格(例如用户档案 + 关联子用户)时,常见陷阱是将包含嵌套表格的

(如 应与顶层 平权参与 CSV 行生成,而非被包裹在父行中。

正确的解决方案是统一采集所有“叶子级数据行”:即跳过任何含 colspan 的

,并递归提取所有 下的 ,无论其位于主表还是嵌套表中。

以下是生产就绪的实现:

function exportTableToCsv() {
  const table = document.querySelector('table');
  const headers = Array.from(table.querySelectorAll('thead th'))
    .map(th => escapeCsvCell(th.textContent.trim()));

  const rows = [];

  // 递归收集所有有效数据行(排除含 colspan 的容器行)
  function collectDataRows(tbody) {
    tbody.querySelectorAll('tr').forEach(tr => {
      // 跳过包含 colspan 单元格的行(它们只是嵌套容器,非真实数据)
      if (tr.querySelector('td[colspan], th[colspan]')) return;

      const cells = Array.from(tr.querySelectorAll('td, th'))
        .map(cell => escapeCsvCell(cell.textContent.trim()));

      // 只保留列数匹配表头的行(防数据错位)
      if (cells.length === headers.length) {
        rows.push(cells);
      }
    });

    // 递归处理本 tbody 内嵌套的 table > tbody
    tbody.querySelectorAll('table tbody').forEach(nestedTbody => {
      collectDataRows(nestedTbody);
    });
  }

  // 从主表所有 tbody 开始收集
  table.querySelectorAll('tbody').forEach(tbody => {
    collectDataRows(tbody);
  });

  // 组装 CSV 字符串:首行为 header,后续为数据行
  const csvContent = [
    headers.join(','),
    ...rows.map(row => row.join(','))
  ].join('\n');

  downloadCsv(csvContent, 'export.csv');
}

// CSV 单元格转义:处理含逗号、换行、引号的值
function escapeCsvCell(value) {
  if (/[,\"\n\r]/.test(value)) {
    return `"${value.replace(/"/g, '""')}"`;
  }
  return value;
}

function downloadCsv(content, filename) {
  const blob = new Blob([content], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.style.display = 'none';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
}

✅ 关键设计说明:

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

  • 严格过滤容器行:通过 tr.querySelector('td[colspan], th[colspan]') 精准识别并跳过所有用于包裹嵌套表格的占位
,避免“Tom Jack Sam Alex”式错误合并;
  • 跨层级统一采集:collectDataRows() 递归遍历任意深度的
  • 中的容器行)误判为数据行,导致 CSV 出现重复、错位或合并字段(如 "Tom Jack Sam Alex")。根本原因在于:DOM 层级不等于数据层级——嵌套表格是独立的数据源,其
    所在的
    ,确保 Jack/Sam/Alex 与 Tom/Josh 处于同一 CSV 行级别;
  • CSV 安全转义:escapeCsvCell() 自动为含逗号、双引号或换行符的单元格添加双引号,并对内部引号做 "" 转义,符合 RFC 4180 标准;
  • 列数校验:if (cells.length === headers.length) 防止因 HTML 结构异常(如缺失单元格)导致 CSV 列偏移。
  • ⚠️ 注意事项:

    • 该方案假设所有数据行具有与表头一致的列数(
    ),否则需调整选择器。

    调用 exportTableToCsv() 即可一键导出结构清晰、无冗余、兼容 Excel 的 CSV 文件——真正实现“所见数据即所得”。

    数量);若存在动态列宽(如部分行用 colspan 合并展示但实际无数据),需按业务逻辑预处理;
  • 不依赖 innerText(可能受 CSS 隐藏影响),而使用 textContent 确保获取原始文本;
  • 嵌套表格必须位于
  • 内且自身结构完整(含

    热门AI工具

    更多
    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    PixTV
    PixTV Hot

    PixTV是一款面向AIGC内容创作的AI视频生成工具。

    PixPix
    PixPix Hot

    PixPix是一款面向电商视觉生产的AI商品图生成工具。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    Atoms
    Atoms Hot

    Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    SoundView
    SoundView Hot

    SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    Laper
    Laper Hot

    Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

    相关专题

    更多
    length函数用法
    length函数用法

    length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

    2007

    2023.09.19

    DOM是什么意思
    DOM是什么意思

    dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

    6541

    2024.08.14

    excel对比两列数据异同
    excel对比两列数据异同

    Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

    6121

    2023.07.25

    excel重复项筛选标色
    excel重复项筛选标色

    excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

    3876

    2023.07.31

    excel复制表格怎么复制出来和原来一样大
    excel复制表格怎么复制出来和原来一样大

    本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

    3660

    2023.08.02

    excel表格斜线一分为二
    excel表格斜线一分为二

    在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

    1444

    2023.08.02

    excel斜线表头一分为二
    excel斜线表头一分为二

    excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

    717

    2023.08.02

    绝对引用的输入方法
    绝对引用的输入方法

    绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

    5168

    2023.08.09

    Go-Zero API开发使用教程
    Go-Zero API开发使用教程

    本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

    20

    2026.11.12

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn