JQuery选择包含某个td内特定文本的所有行

23

我有一个表格,我想选择所有包含文本“Test”的td行,然后隐藏所有匹配行上的class为“ms-vb-icon”的td。

最初我使用了下面的代码,但这只会在最后匹配行上隐藏class:

 $("td:contains('test'):last").parent().children(".ms-vb-icon").css("visibility","hidden");

我尝试了这个,但它没有起作用...

 $("tr:has(td:contains('test')").each(function(){
  (this).children(".ms-vb-icon").css("visibility","hidden");
  });

简化后的 HTML 如下:

<table>
<tbody>
<tr>
<td class=ms-vb-icon></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>test</td>
</tr>
</tbody>
<table>

1
为什么不从你的原始代码中删除:last呢? - sje397
3个回答

36

尝试:

$("tr td:contains('test')").each(function(){
  $(this).siblings('td.ms-vb-icon').css("visibility","hidden");
});

这里有个演示链接


谢谢,这个很好用。不太确定siblings和children之间的区别,但这个方法很有效! - van
2
子元素属于 td 元素下,因此 td 是父元素。同级元素位于 td 旁边,因此是在同一 tr 中的另一个 td 元素。 - Malachi
只是一个小建议,如果你正在使用jQuery,最好使用.hide()而不是手动设置.css()。 - tim

9

尝试使用

$("tr:has(td:contains('test')").each(function(){
    $(this).parent().children(".ms-vb-icon").css("visibility","hidden");
});

.ms-vb-icon类是tr的子元素,而$(this)函数是指td


请注意,我在每个函数之前加了一个闭合的"。无论如何,您能否提供一个示例标记? - Lorenzo
谢谢,但不知怎么回事,下面的答案有效,尽管它们在我看来看起来都一样... - van
根据tamarteleco的说法,你的代码缺少一个')',这就是为什么它不能工作,请修复代码,因为我无法为你修复它。 - tomdemuyt

8
我猜您少写了')'。这对我来说有效:
$("tr:has(td:contains('1'))").each(function () {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接