jQuery:包含html

时间:2011-04-06 18:38:16

标签: 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>

基本上,将“<span>”放在:contains()字符串中会破坏选择器。是否有任何类似于:contains()的选择器在HTML传递给它时能够正常工作?或者我可以通过<span>中的整个字符串选择某种方式吗?

BTW,这个网站正在使用jquery 1.3.2。

6 个答案:

答案 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);
});

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

答案 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;
});

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

答案 3 :(得分:1)

使用jQuery 1.2.6进行测试

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


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

答案 4 :(得分:0)

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

这是一个匹配的基本内容:

/^76$/g

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

答案 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)