我有一个表,其中包含逗号分隔的数字列表,如下所示:<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>
s。
基本上,将 ' <span>
' 在 :contains()
字符串正在破坏选择器。有没有类似于 :contains()
的选择器当 HTML 传递给它时,它会正常工作吗?或者有什么方法可以通过 <span>
中的整个字符串进行选择?
顺便说一句,该网站使用的是 jquery 1.3.2。
最佳答案
如果您想坚持使用 <span>
s,即使使用 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);
});
关于jQuery :contains with html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571329/