“另类”的阻止冒泡

论坛里有人问

HTML:
<div id="b">
<div>sssssssssssss</div>
<div>aaaaaaaaaaaa</div>
</div>

JQ;
$(‘div:contains(aaa)’).addClass(‘aa’);

如何才能让这个id="b"的div不要被选择器匹配到呢?

底下讨论了老半天基本都是无解,只能回避这个问题,加入class之类的限定条件。

后来我仔细翻了翻API,发现还有filter这个方法可以用。

之后还不过瘾,写了个选择器插件,需要的同学可以拿去用。

直接上代码了,写的不好,有能力的帮忙优化一下,毕竟选择器函数属于运算密集型函数。
filter方法:

  1. $('div:contains(aaa)').filter(function() {
  2.       return $(this).children().length == 0;
  3. });

选择器插件:

  1. <div>
  2.         <div>shawphy</div>
  3.         <div>this is a demo -- shawphy</div>
  4.         <div>test</div>
  5.         <div>test</div>
  6. </div>
  1. /*
  2.         Shawphy:用于查找不含子元素的元素(可以包含文本,不同于:empty选择器)
  3. */
  4.         ;(function($) {
  5.                 $.extend($.expr[":"], {
  6.                         nochild : function( a ) {
  7.                                 return $(a).children().length == 0; //Shawphy:子元素数量为0的元素会被保留
  8.                         }
  9.                 });
  10.         })(jQuery);
  11.         //Shawphy:测试是否能查到所需要的东西
  12.         alert($('div:contains(shawphy):nochild').length)
This entry was posted in jQuery and tagged . Bookmark the permalink.

2 Responses to “另类”的阻止冒泡

  1. gordianyuan says:

    $("div:contains(aaa):not(:has(*))")
    ~~:)

    • Shawphy says:

      哈哈,这位兄弟对选择器理解的比我透彻,大赞!
      (小心选择器用的过多影响效率哦~~呵呵)

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>