2012-03-31 103 views
0

我正在使用我发现在我的表中搜索的脚本,并只显示包含与搜索输入字段中的文本相匹配的行的行。jquery筛选器表但排除一列

 $("#searchfahrzeuge").keyup(function(){ 

     $("#fahrzeugliste").find("tr").hide(); 
     var data = this.value.split(" "); 
     var jo = $("#fahrzeugliste").find("tr"); 


     $.each(data, function(i, v){ 
      jo = jo.filter("*:containsIgnoreCase('"+v+"')"); 
     console.log(jo); 
     }); 

     jo.show(); }); 

但现在我要排除的表的两列,它们都有一个类“.nosearch”, 但我不知道怎么做这个...

我试着:

var jo = $("#fahrzeugliste").find("tr:not(.nosearch)"); 

,并在过滤功能:

jo = jo.filter("*:not(.nosearch):containsIgnoreCase('"+v+"')"); 

但都不起作用。

回答

1

你没有提供你的html,但我认为这个类是td。这是您的问题,筛选全部在tr级别完成,因此:not适用于tr,它没有该类。

我会更改它以过滤td s而不是tr元素。像这样(未经):

var jo = $("#fahrzeugliste").find("tr > td"); 

    $.each(data, function(i, v){ 
     jo = jo.filter(":not(.nosearch):containsIgnoreCase('"+v+"')"); 
    }); 

    jo.parent().show(); // show the tr's for all matched tds 
+0

谢谢!有用!对不起,没有显示HTML,但你解决了它呢... – dacami 2012-03-31 19:01:47

0

你总是可以只运行你现在有搜索,然后只需使用

$('.nosearch').hide(); 

算账,而不是试图让你的查询过于复杂。

+0

这将隐藏单个单元格,这只会导致一团糟。 – 2012-03-31 18:42:50

+0

对不起,你说“排除2桌,他们有摊位有一个班”nnnarcharch“”,所以也许我很困惑,TDs或TRs有班吗? – 2012-03-31 18:47:40

+0

他没有包含html,但'tr's是行,而不是列。 – 2012-03-31 18:48:32

0

什么自定义函数的过滤器

var jo = $("#fahrzeugliste tr") 
.filter(":containsIgnoreCase('"+v+"')") 
.filter(function(i){ 
    if(!$(this).children('td').hasClass('nosearch')) 
    return $(this); 
}); 

Like this one。当你真的需要行时可能很有用。