如果其td不包含文本,请隐藏tr

时间:2013-10-16 13:42:31

标签: jquery html-table hide

我想隐藏tr,如果它的td不包含text2。 当我使用此代码时:

$('td:contains("text2")').parent().toggle()}))

它隐藏了在td中包含text2的tr,但我想在td中隐藏所有不包含text2的表行,所以我编写了这段代码:

$('td:not(:contains("text2"))').parent().toggle()}))

但它隐藏了所有行。

jsfiddle example

4 个答案:

答案 0 :(得分:6)

您目前遇到的问题是,如果td不包含text2,则无论兄弟td是否包含该文本,它都会隐藏整行。

在不改变任何标记的情况下,我能想到的最好的事情是选择每行的第一个td,然后对父tr进行过滤:

$('td:first-child').parent('tr:not(:contains("text2"))').toggle();

或者您可以直接在tr上过滤,省略那些包含th元素的内容(以便包含th's的行不会被隐藏):

$('tr:not(:has(th)):not(:contains("text2"))').toggle();

Here's a fiddle

答案 1 :(得分:0)

它不起作用,因为如果任何列不包含text2,那么它将隐藏该行。

您可以使用以下内容,但如果条件适用于任何列,则必须区分标题和其他行。

contains()适用于任何后代,因此您可以直接检查tr

的条件
$('tr:not(.head):not(:contains("text2"))').toggle()

这是更新后的JSFiddle

答案 2 :(得分:0)

试试这个:

$(document).ready(function(){
    $('#contains').change( function() {
        $('td:contains("text2")').parent().toggle()
    });

    $('#notContains').change( function() {
        $('td').parent().toggle();
        $('td:contains("text2")').parent().toggle();
    });
});

答案 3 :(得分:-1)

使用此代码进行更改

U很好但是最初你必须找到元素所以使用find ...

父:

获取当前匹配元素集中每个元素的父元素,可选择通过选择器进行过滤。

查找

获取当前匹配元素集中每个元素的后代,由选择器,jQuery对象或元素过滤。

所以, 使用此代码进行更改

隐藏td使用text2:

     $(document).find('td:contains("text2")').toggle()}));

隐藏td没有text2:

     $(document).find('td:not(:contains("text2"))').toggle()}));

这是代码

$(document).ready( 
$('#contains').change( function() {
    $(document).find('td:contains("text2")').toggle()}));
 $(document).ready( 
 $('#notContains').change( function() {

  $(document).find('td:not(:contains("text2"))').toggle()}));

Demo

谢谢老兄