使用jQuery删除不包含search-term的行

时间:2011-10-06 13:49:54

标签: javascript jquery

我正在使用以下JQuery来过滤数据表上的行,这样可以正常工作......

yuiDtFilter = function(tableDivId, filter) {
     //custom jQuery function defines case-insensitive fn:Contains, use default fn:contains for case-sensitive search
     jQuery.expr[':'].Contains = function(a,i,m){
       return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
     };
     $("#" + tableDivId + " .yui-dt-data").find('tr').hide();
     $("#" + tableDivId + " .yui-dt-data").find('td:Contains("' + filter + '")').parents('tr').show();
 }

但是我需要以相反的方式进行过滤器工作。我需要它来删除匹配搜索词的行。

我发现我需要使用'not()',但我花了大部分时间徒劳地试图让它工作(使用我能找到的每个例子)。

我尝试过多种变体 -

$("#" + tableDivId + " .yui-dt-data")
    .find(:not(('td:Contains("' + filter + '")'))
    .parents('tr').remove();

任何人都可以用我的代码作为起点来帮助我吗?

2 个答案:

答案 0 :(得分:2)

尝试

$("#" + tableDivId + " .yui-dt-data").find('td').not(':contains("' + filter + '")').parents('tr').remove();

$("#" + tableDivId + " .yui-dt-data").find( 'td:not(:contains("' + filter + '"))' ).parents('tr').remove()

答案 1 :(得分:1)

使用jquery从HTML表中删除不包含特定文本或字符串的行。

注意:如果HTML表中只有两列,我们可以使用“ last-child”属性来查找。

*$(document).ready(function(){
    $("#tabledata tbody .mainTR").each(function(){
        var lastTD = $(this).find("td:last-child");
        var lastTdText = lastTD.text().trim();
        if(!lastTdText.includes("DrivePilot")){
            $(this).remove();
        }
    });
  });

注意:如果HTML表中有两列以上,则可以使用“ nth-child(2)”属性来查找。

传递带有“ nth-child(列索引)”的列索引

$(document).ready(function(){
    $("#tabledata tbody .mainTR").each(function(){
        var lastTD = $(this).find("td:nth-child(2)");
        var lastTdText = lastTD.text().trim();
        if(!lastTdText.includes("DrivePilot")){
            $(this).remove();
        }
    });
  });

注意:“ DrivePilot”只不过是文本或字符串