jQuery :contains with html

标签 jquery jquery-selectors

我有一个表,其中包含逗号分隔的数字列表,如下所示:<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);
});

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

关于jQuery :contains with html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571329/

相关文章:

jQuery - 有多个 $(document).ready(function() {}); 是不是很糟糕?

javascript - 什么是将内容附加到链接 URL 的更简洁的方法?

javascript - 选择时隐藏基础(多个)

javascript - Ajax 调用的返回值

javascript - 如何动画 svg 组元素(基本上缩放)

javascript - 如何根据文本的长度自动调整固定DIV中的文本大小?

jquery - 基于 Aurelia 中的表达式将所选属性添加到选项

javascript - 用于一个祖先的多个元素的 JQuery 选择器

jquery - 为什么 jQuery 不提供 .firstChild 方法?

javascript - 使用 CSS 或 JS 在溢出的 div 中标记最后一个可见的 child