2010-11-01 49 views
6

我在玩弄一些选择器,并且在单元格内选择文本时碰到了墙。jquery在里面找到文本​​

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

<table> 
<tr> 
    <td>First Name</td> 
    <td>*required</td> 
    </tr> 
</table> 

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

这里是我的jQuery的尝试:

$("td:contains('*required')").addClass("red"); 

它将使所有单元以应用类,它似乎。 任何更好的方法来查找特定的文本?

+0

到目前为止,我可以看到它的工作正常。 http://jsfiddle.net/nY29Q/ – 2010-11-01 22:00:27

+0

这适用于我。你能链接到/张贴在http://jsfiddle.net你实际使用的代码吗? – lonesomeday 2010-11-01 22:00:50

回答

23

你有什么作品,you can test it here,请记住,任何<td>包含文本,虽然,做一个精确匹配做到这一点:

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

You can test it here

+0

+1击败我吧! – Stephen 2010-11-01 22:01:04

+0

这是一个有趣的网站。我可能必须将其加入书签! 我使用的代码正在工作,当我将它放在一个简单的网站上时,这意味着我必须有别的东西对我不利。要做更多的调查。 – coffeemonitor 2010-11-01 22:01:27

+0

我不熟悉'$ .text()'函数 - 是否记录在某处? – lonesomeday 2010-11-01 22:03:40

5

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

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

另外:你会希望对你的选择器更具体 - 提高效率,也因为Nick的回答。尽管如果你考虑效率,你最好不要使用首先使用回调的方法。 :)

就选择器去,考虑使用$('#tableID > tr > td')...或类似的东西。

-2

你不应该使用JavaScript来做到这一点。你应该使用的是一个CSS类:

<table> 
<tr> 
    <td>First Name</td> 
    <td class="required">*required</td> 
    </tr> 
</table> 


<style type="text/css"> 
td.required { 
    color:red; 
} 
</style> 
+0

我认为问题在于单元没有课程开始。 – 2010-11-01 22:01:40

+0

这就是要点。谢谢Craver。 – coffeemonitor 2010-11-01 22:05:33

+0

难道你不能控制标记吗?您如何才能编写JavaScript,但无法正确使用CSS?你只是试验选择器作为一种学习练习吗? – SnickersAreMyFave 2010-11-01 22:57:15