【问题标题】:Delete all rows from a table not having a specific text string从没有特定文本字符串的表中删除所有行
【发布时间】:2013-08-23 11:04:43
【问题描述】:

如何从表中删除列中没有特定文本的所有行?
这不起作用:

$('#mytable').find('tr:not(:has(th))').filter(
    function() {
          return $(this).find('td').text() != $("#some_component").val();
     }).remove();
}  

更新

发布的答案对我不起作用。他们要么删除所有行(我需要检查特定行中的文本,而不是第一行或任何行),要么他们什么都不做。
以下是我第一次尝试的修改,但

$('#mytable').find('tr:not(:has(th))').filter(
    function() { 

       return ($(this).find('td').text().indexOf($("#some_component").val()) < 0);
    } 
).remove(); 

【问题讨论】:

  • 特定列或任何列?
  • @JeevanJose:Specific 列(但无论如何,此文本不应出现在任何其他列中)

标签: javascript jquery html-table


【解决方案1】:

HTML:

<table id="myTable">
    <tr>
        <td>Example One</td>
        <td>Example Two</td>
        <td>Example Three</td>
    </tr>
    <tr>
        <td>Test One</td>
        <td>Test Two</td>
        <td>Test Three</td>
    </tr>
    <tr>
        <td>Trial One</td>
        <td>Trial Two</td>
        <td>Trial Three</td>
    </tr>
</table>

JavaScript jQuery(如果包含):

$(document).ready( function() {
    $('#myTable td:contains("Test")').parents("tr").remove();
});

JavaScript jQuery(如果不包含):

$(document).ready( function() {
    $('#myTable td').not(':contains("Test")').parents("tr").remove();
});

JSFiddle:http://jsfiddle.net/22QKM/

【讨论】:

  • 如果它包含文本,我想删除
  • 但是你为什么要硬编码字符串"Test"?我的文字来自另一个组件。我怎样才能把$("#some_component").val()放在这个:contains中?
  • 将测试替换为' + $("#some_component").val() + '
  • 如果表格有多个列,则此代码不起作用。在我的情况下,它会删除所有行
【解决方案2】:

出于兴趣,据我所知,您发布的代码确实有效。这是一个jsfiddle:

$(document).ready(function() {

    $("#btn").click(function () {

        console.log($("#some_component").val());
        $('#mytable').find('tr:not(:has(th))').filter(
            function() {
                  return $(this).find('td').text() != $("#some_component").val();
             }).remove();

    })
});

http://jsfiddle.net/EaNEd/

【讨论】:

  • 这对超过 1 列不起作用。因为似乎如果在第一个列中找不到文本,它会删除该行。对我来说,这段代码将删除 all
【解决方案3】:

您可以使用下面的代码来做到这一点。

$("td:not(contains("+$("#some_component").val()+")"))
.siblings()
.filter(":not(contains("+$("#some_component").val()+"))")
.parent('tr')
.remove();

测试代码

$('tr').filter(function()
{
    return $(this).find('td:contains("'+ $("#some_component").val() +'")').parent().css('background-color','red');
});

对其进行测试,然后将.css() 替换为.remove()

DEMO

【讨论】:

  • 到目前为止所有答案适用于超过 1 列的表格。
  • @Jim 很抱歉在没有测试的情况下为您提供解决方案,现在请参阅我已粘贴测试代码的编辑,
  • Hm.#some_component 是另一个表中tr 的一部分,
  • 可能是因为你的代码没有指定表,是它不起作用的原因?
  • @Jim 可能是...所以在tr 选择器中添加#mytable
【解决方案4】:

从没有特定文本字符串的表中删除所有行:

 function RemoveFromTable(tblID, VALUE){         
    $("#"+tblID).find(":not(:contains('"+VALUE+"'))").hide();
 }

注意:也可以使用“remove()”方法代替“hide()”方法”

函数调用如下:

RemoveFromTable('table ID','value')

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 2022-01-19
    • 2018-06-28
    • 1970-01-01
    • 2014-09-14
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多