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