jQuery Selector帮助

时间:2010-09-27 15:03:04

标签: jquery css-selectors

...
<tr>
    <td>222</td>
</tr>
<tr>
    <td>333 222</td>
</tr>
...

我有这个代码选择器:

$("#TableName tr td:contains('222')");

问题:我需要选择html为'222'的单元格 我尝试使用$("#TableName td tr[html=222]")但不起作用。

2 个答案:

答案 0 :(得分:5)

您可以use .filter() instead进行完全匹配。

var result = $("#TableName tr td").filter(function() {
    return $.text([this]) === "222";
});

这使用$.text()来比较<td>"222"的文字值。这只是做$(this).text()的一种更快捷的方式。给你相同的结果。 (请注意,您需要在数组this中传递[this]。)

当匹配时,元素将返回到生成的jQuery对象中。

如果<td>中有空格或尾随空格的可能性,您可以修剪with $.trim()

return $.trim( $.text([this]) ) === "222";

编辑:如果您愿意,可以创建自己的选择器来完成相同的任务:

$.extend($.expr[':'], {
    textIs: function(elem, i, attr) {
        return ($.trim( $.text([elem]) ) === attr[3]);
    }
});
var result = $("#TableName tr td:textIs(222)")

答案 1 :(得分:0)

我发现了这种选择器的实现(在http://api.jquery.com/contains-selector/中的注释中)

$.expr[":"].econtains = function(obj, index, meta, stack){
return (obj.textContent || obj.innerText || $(obj).text() || "").toLowerCase() == meta[3].toLowerCase();
}

示例:

$("div:econtains('john')").css({ color: "#F00" });