jQuery:包含html

我有一个表格,其中包含逗号分隔的数字列表,如下所示:

72,76,81

。 我正在尝试选择包含特定数字的表格单元格。 这个选择器工作:

$("td:not(:contains('76'))", $table)

问题是可能存在包含’576’或’761’等的行。

为了解决这个问题,我决定在每个数字周围放一个 ,现在就是:

72,76,81

。 我的选择器现在是:

$("td:not(:contains('76'))", $table)

当我在Firebug中调试这个选择器时,它会返回一些实际上不存在于HTML源代码中的span标记,而不是正确的

基本上,将’ ‘放在:contains()字符串中会破坏选择器。 是否有任何选择器类似于:contains() ,当HTML传递给它时,它将正常工作? 或者有什么方法可以通过的整个字符串进行选择?

顺便说一句,这个网站使用的是jquery 1.3.2。

如果你想坚持使用 ,即使使用jQuery 1.3.2,这仍然有效:

 var $tds = $("table td").filter(function() { return !$(this).find('span').filter(function () { return $(this).text() === '76'; }).length; }); 

http://jsfiddle.net/mattball/PFk8H/


另一方面,如果你想回到旧的标记,它实际上很容易:

 var $tds = $("table td").filter(function() { return !$(this).text().match(/\b76\b/); }); 

http://jsfiddle.net/mattball/L6AFz/


要在正则表达式中使用变量,请使用new RegExp(string)构造函数语法 :

 var n = 76, re = new RegExp("\\b" + n + "\\b"); var $tds = $("table td").filter(function() { return !$(this).text().match(re); }); 

http://jsfiddle.net/mattball/hKQH7/

试试这个:

$(“td span:not(:contains(’76’))”,$ table).parent()

 $("td span", $table).filter(function(){return $(this).text() != '76';}).parent() 

您可能无法使用:contains此内容。 如你所述:contains('76')将匹配’76’,’576’,’761’等。你可以尝试使用.filter来获得你想要的东西。

 $('td:has("span")').filter(function(){ var x = true; $('span', this).each(function(){ x = x && $(this).text() != '76'; }); return x; }); 

演示: http : //jsfiddle.net/KvK3J/

用jQuery 1.2.6测试

http://jsfiddle.net/G27JF/4/

$("td>span").filter(function() { return ($(this).text() != 76); }).parent().css("text-decoration", "underline");
$("td>span").filter(function() { return ($(this).text() != 76); }).parent().css("text-decoration", "underline"); 

要避免“包含”问题,您可以将它们作为类:

  

和:

 $("td:not(:has(span.76)"), $table) 

这可以调整为在1个对象中具有倍数,如下所示:

  

或者甚至放入TD本身就可以更加简化选择器

 $("td:not(.76 .77, $table) 

我会使用正则表达式来匹配表行的内部。 首先迭代所有元素,然后忽略与正则表达式匹配的元素

这是一个匹配的基本:

 /^76$/g 

查看RegExr以构建更多正则表达式。