jquery找到所有精确的td匹配

$('#servertable td:eq(' + server + ')') 

这只找到1(我认为首先)匹配,如何找到所有匹配。 顺便说一句。 td:包含对我不起作用。

eq期望数字索引仅返回单行。 如果要根据内容匹配td,则必须使用:contains选择器。 说“它不起作用”并抛弃它不是解决问题的正确方法,因为选择器(很可能)没有错(请注意它的区分大小写,可能是它……)

无论如何,如果你有这样的表:

 
Hello World
World Hello
Hello Hello

这个jQuery代码:

 $(function() { $("td:contains('Hello')").css('color','red'); }); 

将所有单元格“Hello”变为红色。 演示 。

如果需要不区分大小写的匹配,可以使用filter函数执行此操作:

 $(function() { var search = 'HELLO'.toLowerCase(); $("td").filter(function() { return $(this).text().toLowerCase().indexOf(search) != -1; }).css('color','red'); }); 

如果您需要匹配单元格的确切内容,您可以使用类似于上面的内容:

 $(function() { var search = 'HELLO'.toLowerCase(); $("td").filter(function() { return $(this).text().toLowerCase() == search; }).css('color','red'); }); 

以上是不区分大小写的(通过在比较时将搜索和内容都转换为小写),否则如果您想要区分大小写,则可以删除它们。 演示 。

我可能是错的,但是:eq位置选择器采用整数n找到第n个匹配元素。

所以如果你说td:eq(1) – 你会得到表中的第二个TD元素(第二个因为第一个索引是零/ 0)。

我的猜测是你不想使用:contains选择器,因为你正在寻找一个精确的字符串匹配而不想要部分匹配。

我不知道jquery有一个内置的选择器,可以满足你的需求(如果是这样,请纠正我)。 您可以添加一个作为扩展名或使用其他方法,例如属性选择器来搜索您。

如果您能够控制生成的HTML,您可以为每个TD添加ID属性,如下所示:

  
ServerMemory
Mars4 GB
Venus1 GB
Jupiter2 GB
Uranus8 GB
Mars_20104 GB

以下属性选择器将在表中找到正确的TD:

    

如果您想要定位具有您正在寻找的TD的整行,您可以添加其他选择器:

  $("#servertable tbody tr").css("background-color", ""); $("#servertable tbody tr:has(td[id='server_" + server.toLowerCase() + "'])").css("background-color", "#FFFF00"); 

tbody标记不是完全必要的,它只是有助于区分表体中的行和表头中的行。

尝试:containsExact

http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html

  $.extend( $.expr[":"], { containsExact: $.expr.createPseudo ? $.expr.createPseudo(function(text) { return function(elem) { return $.trim(elem.innerHTML.toLowerCase()) === text.toLowerCase(); }; }) : // support: jQuery <1.8 function(elem, i, match) { return $.trim(elem.innerHTML.toLowerCase()) === match[3].toLowerCase(); }, containsExactCase: $.expr.createPseudo ? $.expr.createPseudo(function(text) { return function(elem) { return $.trim(elem.innerHTML) === text; }; }) : // support: jQuery <1.8 function(elem, i, match) { return $.trim(elem.innerHTML) === match[3]; }, containsRegex: $.expr.createPseudo ? $.expr.createPseudo(function(text) { var reg = /^\/((?:\\\/|[^\/]) )\/([mig]{0,3})$/.exec(text); return function(elem) { return RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)); }; }) : // support: jQuery <1.8 function(elem, i, match) { var reg = /^\/((?:\\\/|[^\/]) )\/([mig]{0,3})$/.exec(match[3]); return RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)); } }); 
 $('#servertable td') 

会找到所有的td元素,但它并不完全清楚你的期望。

我也遇到了和原作者一样的问题。 正如保罗原来提出的问题一样。 我可以使用哪个选择器来匹配基于元素内容的相等检查元素。 至少我认为这就是他所做的(就像我一样)试图实现,这也可以解释为什么他(以及我)不能使用包含ra170在他的评论中指出的显而易见的原因。 无论如何,如果有人偶然发现在这里寻找这个问题的答案,这里是简短的答案:

jQuery默认没有这样的匹配器。 解决方案是定义自己的匹配器。 要解决手头的问题,请参阅Motte的这篇优秀博客文章 。