我有一个包含逗号分隔的数字列表的表格,如下所示:<td>72,76,81</td>
。我正在尝试选择不包含特定数字的表格单元格。这个选择器有效:
$("td:not(:contains('76'))", $table)
问题是可能存在包含'576'或'761'等的行
为了解决这个问题,我决定在每个号码周围放一个<span>
,现在就是:<td><span>72</span>,<span>76</span>,<span>81</span></td>
。我的选择器现在是:
$("td:not(:contains('<span>76</span>'))", $table)
当我在Firebug中调试此选择器时,它会返回一些实际上不存在于HTML源代码中的span标记,而不是正确的<td>
。
基本上,将“<span>
”放在:contains()
字符串中会破坏选择器。是否有任何类似于:contains()
的选择器在HTML传递给它时能够正常工作?或者我可以通过<span>
中的整个字符串选择某种方式吗?
BTW,这个网站正在使用jquery 1.3.2。
答案 0 :(得分:5)
如果您想坚持使用<span>
,即使使用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)
constructor syntax:
var n = 76,
re = new RegExp("\\b" + n + "\\b");
var $tds = $("table td").filter(function() {
return !$(this).text().match(re);
});
答案 1 :(得分:2)
试试这个:
$(“td span:not(:contains('76'))”,$ table).parent()
$("td span", $table).filter(function(){return $(this).text() != '76';}).parent()
答案 2 :(得分:1)
您可能无法使用: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;
});
答案 3 :(得分:1)
使用jQuery 1.2.6进行测试
$("td>span").filter(function() {
return ($(this).text() != 76);
}).parent().css("text-decoration", "underline");
答案 4 :(得分:0)
答案 5 :(得分:0)
要避免“包含”问题,您可以将它们作为类:
<span class="76"></span>
和
$("td:not(:has(span.76)"), $table)
这可以调整为在1个对象中具有倍数:
<span class="76 77 78"></span>
甚至放入TD本身就可以简化选择器了
$("td:not(.76 .77, $table)