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

如何删除表格中除首单元格包含指定字符串外的所有行?

问题:保留表格中首单元格含指定文本的行,删除其余行

需求:删除表格中所有行,仅保留首单元格包含字符串“Revisions Required – CM”的行,原jQuery代码未生效。

原代码(未生效)

JavaScript

//Code that I have tried but it doesnt work:
$('#historyOfStatus table td').not(':contains("Revisions Required – CM")').parents("tr").remove();

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="historyOfStatus">
  <table>
    <tbody>
      <tr>
        <th>Value</th>
        <th>Date Time</th>
        <th>By</th>
      </tr>
      <tr>
        <td class="Data1">Draft</td>
        <td class="Data1">2022-11-14 13:34:31</td>
        <td class="Data1">Muhammad Akhtar</td>
      </tr>
      <tr>
        <td class="Data1">Revisions Required – CM</td>
        <td class="Data1">2022-11-14 13:40:18</td>
        <td class="Data1">a</td>
      </tr>
      <tr>
        <td class="Data2">Under CFF Contracts Manager Review</td>
        <td class="Data2">2022-11-14 13:41:38</td>
        <td class="Data2">aa</td>
      </tr>
      <tr>
        <td class="Data1">Under CFF Compliance Review</td>
        <td class="Data1">2022-11-14 13:41:43</td>
        <td class="Data1">aaaa</td>
      </tr>
      <tr>
        <td class="Data2">Revisions Required – CM</td>
        <td class="Data2">2022-11-14 13:41:48</td>
        <td class="Data2">bb</td>
      </tr>
      <tr>
        <td class="Data2">Revisions Required – CM</td>
        <td class="Data2">2022-11-14 13:43:10</td>
        <td class="Data2">cc</td>
      </tr>
    </tbody>
  </table>
</div>

问题分析

原代码逻辑存在两个核心问题:

  • 选中范围错误:直接选中所有<td>,只要行内任意一个<td>不包含指定文本,就会触发整行删除,和“仅检查首单元格”的需求不符。
  • 匹配逻辑偏差:符合条件的行中,其他单元格大概率不含目标文本,会被原代码误判为需要删除的行。

修正后的代码

方法1:使用jQuery选择器直接过滤

// 保留表头,删除首单元格不含指定文本的数据行
$('#historyOfStatus table tbody tr').not(':has(td:first-child:contains("Revisions Required – CM"))').remove();

方法2:遍历行逐一检查(更直观,便于调试)

$('#historyOfStatus table tbody tr').each(function() {
  // 获取首单元格的文本并去除首尾空格
  const firstCellText = $(this).find('td:first').text().trim();
  // 检查是否匹配目标字符串,不匹配则删除该行
  if (firstCellText !== "Revisions Required – CM") {
    $(this).remove();
  }
});

说明

  • 两种方法都会保留表头行(因为表头行使用<th>,td:first-child不会匹配到)。
  • 注意字符串中的长破折号“–”,要确保和页面内的文本完全一致,避免因字符差异导致匹配失败。

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:25:44