我想隐藏tr,如果它的td不包含text2。 当我使用此代码时:
$('td:contains("text2")').parent().toggle()}))
它隐藏了在td中包含text2的tr,但我想在td中隐藏所有不包含text2的表行,所以我编写了这段代码:
$('td:not(:contains("text2"))').parent().toggle()}))
但它隐藏了所有行。
答案 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();
答案 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()}));
谢谢老兄