论坛里有人问
HTML:
<div id=”b”>
<div>sssssssssssss</div>
<div>aaaaaaaaaaaa</div>
</div>
JQ;
$(‘div:contains(aaa)’).addClass(‘aa’);
如何才能让这个id=”b”的div不要被选择器匹配到呢?
底下讨论了老半天基本都是无解,只能回避这个问题,加入class之类的限定条件。
后来我仔细翻了翻API,发现还有filter这个方法可以用。
之后还不过瘾,写了个选择器插件,需要的同学可以拿去用。
直接上代码了,写的不好,有能力的帮忙优化一下,毕竟选择器函数属于运算密集型函数。
filter方法:
$(‘div:contains(aaa)’).filter(function() {
return $(this).children().length == 0;
});
选择器插件:
/*
Shawphy:用于查找不含子元素的元素(可以包含文本,不同于:empty选择器)
*/
;(function($) {
$.extend($.expr[“:”], {
nochild : function( a ) {
return $(a).children().length == 0; //Shawphy:子元素数量为0的元素会被保留
}
});
})(jQuery);
//Shawphy:测试是否能查到所需要的东西
alert($(‘div:contains(shawphy):nochild’).length)
$(“div:contains(aaa):not(:has(*))”)
~~:)
哈哈,这位兄弟对选择器理解的比我透彻,大赞!
(小心选择器用的过多影响效率哦~~呵呵)