Javascript jquery查找所有精确的td匹配项

Javascript jquery查找所有精确的td匹配项,javascript,jquery,Javascript,Jquery,这只会找到1个匹配项,如何找到所有匹配项。 顺便说一句,td:contains对我不起作用 $('#servertable td:eq(' + server + ')') 将查找所有td元素,但并不完全清楚您期望的是什么。我可能错了,但取整数n并查找第n个匹配元素 如果你说td:eq(1)——你会得到表中的第二个td元素(第二个,因为第一个索引是0/0) 我的猜测是,您不想使用,因为您正在寻找精确的字符串匹配,而不希望部分匹配 我不知道jquery有一个内置选择器可以满足您的需要(如果有,请纠

这只会找到1个匹配项,如何找到所有匹配项。 顺便说一句,td:contains对我不起作用

$('#servertable td:eq(' + server + ')')
将查找所有td元素,但并不完全清楚您期望的是什么。

我可能错了,但取整数n并查找第n个匹配元素

如果你说td:eq(1)——你会得到表中的第二个td元素(第二个,因为第一个索引是0/0)

我的猜测是,您不想使用,因为您正在寻找精确的字符串匹配,而不希望部分匹配

我不知道jquery有一个内置选择器可以满足您的需要(如果有,请纠正我)。您可以添加一个作为扩展,也可以使用另一种方法(如属性选择器)为您进行搜索

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

$('#servertable td')

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

eq
要求数字索引只返回一行。如果要通过td的内容匹配td,则必须使用选择器。说“它不工作”然后扔掉它不是解决问题的正确方法,因为选择器(很可能)没有错(注意区分大小写,可能是它…)

无论如何,如果你有这样一张桌子:

      $("#servertable tbody tr").css("background-color", "");
      $("#servertable tbody tr:has(td[id='server_" + server.toLowerCase() + "'])").css("background-color", "#FFFF00");
将所有带有“Hello”的单元格变为红色

如果需要不区分大小写的匹配,可以使用以下函数:

$(function() {
    $("td:contains('Hello')").css('color','red');
});
如果需要匹配单元格的确切内容,可以使用类似于上面的内容:

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

以上内容不区分大小写(通过在比较时将搜索和内容都转换为小写),否则,如果需要区分大小写,您可以删除这些内容

我也遇到了与原作者相同的问题。正如保罗所说,波瑟最初提出的问题。我可以使用哪个选择器来匹配基于元素内容的相等性检查的元素。至少我认为这就是他(和我一样)试图实现的目标,这也可以解释为什么他(和我一样)不能使用contains,因为ra170在他的评论中指出了明显的原因。不管怎样,如果有人碰巧在这里绊倒,寻找这个问题的答案,这里有一个简短的答案:

默认情况下,jQuery没有这样的匹配器。解决方案是定义自己的匹配器。要解决当前的问题,请参阅莫特的这篇优秀博客。

试试:containsExact

$.extend($.expr[“:”]{
ContainesAct:$.expr.createPseudo?
$.expr.createPseudo(函数(文本){
返回函数(elem){
返回$.trim(elem.innerHTML.toLowerCase())==text.toLowerCase();
};
}) :

//支持:jQuery可以显示一点HTML标记吗?你确定它只找到一个匹配项吗?你怎么知道?你是在检查集合中返回了多少个元素,还是在做一些事情来突出显示结果?多一点代码会有所帮助。你在做eq,它只能匹配一个元素,因为它是由i选择的ndex.这相当于使用$('#servertable td').eq(#)或$('#servertable td')[#]好的,那么如果您的表中有:Hello buddy?将会发生的是,“Hello buddy”也会变成红色,但是如果您只想变成“Hello”呢要添加到答案中:因为您只需要标记的内容,所以不必对其进行包装,您可以使用
返回this.innerHTML.toLowerCase()==search
@ra170我在下面添加的containsExact扩展将解决只查找“Hello”而不查找“Hello buddy”的确切字符串的测试用例你的答案包含我答案的链接,基本上没有其他内容。很好的总结。:@TimoLehto刚刚注意到你几年前的评论。没有复制你的答案,甚至没有注意到你的链接。在我的答案中添加了代码示例
<table>
  <tr>
    <td>Hello</td>
    <td>World</td>
  </tr>
  <tr>
    <td>World</td>
    <td>Hello</td>
  </tr>
  <tr>
    <td>Hello</td>
    <td>Hello</td>
  </tr>
</table>
$(function() {
    $("td:contains('Hello')").css('color','red');
});
$(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');
});
    $.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));
  }

});