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