选择TD的文本包含foo的任何TR

时间:2011-03-06 00:33:07

标签: jquery-selectors

我很确定这可以在不进入函数的情况下完成,但我想抓住任何TR,例如<td>Mail ...</td><td>Foo ... </td>

我一直认为它应该像

$('tr[./text()^="foo"]')但Chrome并不喜欢它。 或$('tr[./td/text()^="Mail"]')但没有运气 可以用一个简单的选择器来完成吗?

3 个答案:

答案 0 :(得分:21)

我很惊讶没有人想到这个,也许我的问题太模糊了。

$('tr:has(td:contains("Leather"))').hide()
$('tr:has(td:contains("Mail"))').hide()
$('tr:has(td:contains("Cloth"))').hide()
$('tr:has(td:contains("Bow"))').hide()
$('tr:has(td:contains("Gun"))').hide()

将其作为用于搜索dk或pally的装甲和武器的书签

答案 1 :(得分:5)

一种可能的解决方案:

$('td').filter(function() {
    return $(this).text().indexOf('Foo') === 0;
}).closest('tr');

您必须使用.filter()来处理元素的文本(您不能使用选择器执行此操作,至少不是您想要的方式)并且.closest()应该自我解释。< / p>

编辑:但这可以多次选择<tr>个元素。我实际上不知道jQuery如何处理这个问题。另一个解决方案是使用两个嵌套的filter(在trtd上,但不知怎的,效果不佳)。

Edit2:从版本1.4.4开始,jQuery似乎足够聪明,可以处理同一元素的多次出现(即它就像一个集合)。 DEMO here (如果您更改为1.4.2版,则会看到第一行被选中两次)。

答案 2 :(得分:1)

有“包含:”

TD:contains("Mail")

但这只是在元素中的任何地方查找邮件(没有'开头')。