如何删除表格中除首单元格包含指定字符串外的所有行?
问题:保留表格中首单元格含指定文本的行,删除其余行
需求:删除表格中所有行,仅保留首单元格包含字符串“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
相关产品推荐
相关产品推荐

