You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript提取表格<td>数据:首列取单行,其余列提取-开头内容的问题求助

问题解决:提取表格单元格指定内容

需求说明

  • 第一列<td>仅提取第一行内容(如示例中的“Title 1”)
  • 第二、三、四列<td>提取所有以-开头的内容,每条作为独立条目添加

原代码问题

原JavaScript代码仅提取每个<td>的第一行文本,无法获取后续以-开头的条目,不符合需求。

原JavaScript代码:

const dataSets = [{ set: new Set(), columnIndex: 0 }, { set: new Set(), columnIndex: 1 }, { set: new Set(), columnIndex: 2 }, { set: new Set(), columnIndex: 3 }];
const tbody = document.querySelector("tbody");
const rows = tbody.querySelectorAll("tr");


for (let row of rows) {
    const cells = row.querySelectorAll("td");
    for (let dataSet of dataSets) {
        const cell = cells[dataSet.columnIndex];
        if (cell) {
            dataSet.set.add(cell.innerText.trim().split('\n')[0]);
        }
    }
}

对应的HTML结构:

<tr>
    <td>Title 1<br />
    Line title 1
    </td>
    <td>Specific 1</td>
    <td>- Thing 1<br />
    - Thing 2
    </td>
    <td>- Something 1<br />
    - Something 2<br />
    - Something 3<br />
    - Something 4<br />
    - Something 5<br />
    - Something 6<br />
    - Something 7
    </td>
</tr>

修改后的代码

const dataSets = [{ set: new Set(), columnIndex: 0 }, { set: new Set(), columnIndex: 1 }, { set: new Set(), columnIndex: 2 }, { set: new Set(), columnIndex: 3 }];
const tbody = document.querySelector("tbody");
const rows = tbody.querySelectorAll("tr");

for (let row of rows) {
    const cells = row.querySelectorAll("td");
    for (let dataSet of dataSets) {
        const cell = cells[dataSet.columnIndex];
        if (!cell) continue;
        
        const cellText = cell.innerText.trim();
        const lines = cellText.split('\n').map(line => line.trim()).filter(line => line);
        
        if (dataSet.columnIndex === 0) {
            // 第一列仅取第一行内容
            if (lines.length > 0) {
                dataSet.set.add(lines[0]);
            }
        } else {
            // 其他列提取所有以"-"开头的条目
            const dashItems = lines.filter(line => line.startsWith('-'));
            dashItems.forEach(item => {
                // 可选:去掉开头的"- ",如果需要保留则直接add(item)
                const cleanItem = item.replace(/^-\s*/, '');
                dataSet.set.add(cleanItem);
            });
        }
    }
}

// 测试输出
dataSets.forEach((ds, idx) => {
    console.log(`列${idx + 1}的提取结果:`, Array.from(ds.set));
});

代码说明

  1. 文本预处理:将单元格文本按换行分割,去除每行首尾空格,并过滤空行,避免无效内容干扰
  2. 第一列逻辑:直接取分割后的第一行内容加入Set
  3. 其他列逻辑:筛选出所有以-开头的行,可选去除- 前缀后,逐个加入Set(Set自动去重,适合需要唯一条目的场景)
  4. 容错处理:如果单元格不存在则跳过,避免报错

内容的提问来源于stack exchange,提问作者D A R K VerbalCentaurPL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:37:33