jquery在<td>中找到文本

cof*_*tor 6 jquery jquery-selectors

我正在玩一些选择器,而且我在一个单元格中选择Text时撞墙.

这是我正在做的一个简单的尝试.

<table>
 <tr>
     <td>First Name</td>
     <td>*required</td>
  </tr>
</table> 
Run Code Online (Sandbox Code Playgroud)

我想将该单元格的类更改为"红色" - 如果找到字符串"*required".

这是我对jquery的尝试:

$("td:contains('*required')").addClass("red");
Run Code Online (Sandbox Code Playgroud)

它似乎导致所有细胞应用该类.有没有更好的方法来寻找特定的文字?

Nic*_*ver 23

你有什么工作,你可以在这里测试它,记住任何父级 <td> 包含该文本,但做一个完全匹配这样做:

$("td").filter(function() { return $.text([this]) == '*required'; })
       .addClass("red");
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下.

  • @lonesomeday - 不,不是真的,它是`Sizzle.getText()`下面,它只是一个更便宜的方式做`$(this).text()`而没有jQuery对象创建成本. (2认同)

mwa*_*way 5

您可以随时使用$.filter(),其中只有回调返回true的元素才会包含在选择中.例如:

$('td').filter(function(i) {
    $(this).html().indexOf('*required') >= 0;
});
Run Code Online (Sandbox Code Playgroud)

另外:你需要更加具体的选择 - 为了效率,还因为尼克的答案.虽然如果你正在考虑效率,你最好不要使用首先使用回调的方法.:)

对于选择者来说,考虑使用$('#tableID > tr > td')...或类似的东西.