2

我创建了一个名为“containsExactly”的选择器插件,正如您所期望的,它旨在过滤包含所提供文本的元素:

(function($){
    $.extend($.expr[":"],{
        containsExactly: function(element, index, matches, set){
            var text= matches[3];
            if ($(element).text() == text){
                return true;
            } 
            return false;
        }
    });
})(jQuery);

然后,我尝试将我的自定义选择器集成到更大的选择中,以隐藏第四个表格单元格不完全包含提供的文本字符串的所有表格行:

$("#news").find("tr").has("td").not(function(){
    return $(this).children(":nth-child(4):containsExactly("+ topic +")");
}).hide();

但它对表格的行没有影响,我很难过。任何人都可以看到问题是什么?提前致谢。

更新:我创建了一个小提琴: http: //jsfiddle.net/BnTnN/3/第一行应该是可见的,第二行应该是隐藏的。

4

1 回答 1

2

它在这里工作:http: //jsfiddle.net/BRU5Z/5/

JS是:

$("#news").find("tr").has("td").not(function(){
    var elem = $(this).children(":nth-child(4):containsExactly("+ topic +")");
    return elem.length ? elem : '';
}).hide();

我认为这是因为一个实例$(this).children(":nth-child(4):containsExactly("+ topic +")")正在返回undefined并弄乱了.not()函数。

于 2013-06-06T16:45:53.007 回答