“另类”的阻止冒泡

论坛里有人问

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
this is a demo — shawphy
test
test



/*
Shawphy:用于查找不含子元素的元素(可以包含文本,不同于:empty选择器)
*/
;(function($) {
$.extend($.expr[“:”], {
nochild : function( a ) {
return $(a).children().length == 0; //Shawphy:子元素数量为0的元素会被保留
}
});
})(jQuery);
//Shawphy:测试是否能查到所需要的东西
alert($(‘div:contains(shawphy):nochild’).length)