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

Mas*_*low 10 jquery-selectors

我很确定这可以在不进入函数的情况下完成,但我想抓住任何TR,其中有一个<td>Mail ...</td><td>Foo ... </td>作为示例.

我一直认为应该是这样的

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

Mas*_*low 23

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

$('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()
Run Code Online (Sandbox Code Playgroud)

要使它成为用于搜索dk或pally的装甲和武器的书签

  • 好吧,正如答案中所述,`:contains`在元素的任何部分搜索文本,而你专门要求开头.此外,你可以用逗号(`,`)将选择器串起来,这样你就不必使用5` $`和`hide()`s (2认同)

Fel*_*ing 5

一种可能的方案:

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

您必须使用.filter()处理元素的文本(您不能使用选择器,至少不是您想要的方式)并且.closest()应该自我解释.

编辑:但这可以<tr>多次选择一个元素.我实际上不知道jQuery如何处理这个问题.另一个解决方案是使用两个嵌套的filters(on tr和on td但不知何故,这感觉效率低下).

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