2012-08-06 78 views
5

我必须过滤一个html表格。为此,我为所有tr元素创建了一个回调函数,并测试其中一个tr-children是否包含某些特定模式。测试孩子是否包含使用jQuery的特定文本

$("#filter").keypress(function() { 
    var filter = $(this).val(); 

    $("#table1 tr[data-config]").each(function(){ 

     var val = $(this).find(":contains('" + filter + "')"); 

     if(val.length > 0){ 
      $(this).css("display","table-row"); 
     }else{ 
      $(this).css("display","none"); 
     } 
    }); 
}); 

它的工作原理,但是有一个函数来测试一个元素是否包含一些文本?

目前我检索包含模式的所有元素的列表并计数是否大于零。有没有jQuery函数,它测试这种模式是否发生并返回一个布尔值?该表可以包含很多行,因此我希望尽可能少的开销。

+0

嗨,NaN,如果你想发布一个答案,ping我,我会删除我的(标记为社区wiki)。否则,请将此评论标记为过时。谢谢! – brasofilo 2015-10-27 05:23:51

回答

4
///// replace these lines... 
// var val = $(this).find(":contains('" + filter + "')"); 
// if(val.length > 0){ 

///// with this line 
if($(this).text().match(filter)){ 

这通过整行内容转换成文本串,然后使用简单字符串比较功能,以检查是否滤波器被包含在文本内(并且因此行)

0

当过滤器壳体敏感的,这是怎么让它不敏感:

.match("/pattern/i"); 

道具Billy

0

的回答都不错,但有使用更简单的方法:包含

在一般情况下,做到这一点:上述

$(".class:contains('texttofind')").css("display", "none"); 

有了具体的例子,这样做:

$("#table1 tr[data-config]:contains('" + filter + "')").css("display","table-row"); 

你可以在这里找到更多:https://api.jquery.com/contains-selector/

这避免了必须循环使用.each.find

相关问题