为什么我的JQuery自定义选择器不起作用?

时间:2013-06-06 16:07:05

标签: jquery

我创建了一个名为“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/第一行应该是可见的,第二行应该是隐藏的。

1 个答案:

答案 0 :(得分: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()函数。