not()函数不起作用

时间:2012-09-19 13:09:30

标签: jquery

我有以下html元素

<div id="featured">
...
    <div class="playlist_box" style="display: block; ">
        <ul>
            <li><a href="javascript:void(0)" class="list" fileid="undefined"> element 1</a></li>
            <li><a href="javascript:void(0)" class="list" fileid="undefined"> element 2</a></li> 
            <li><a href="javascript:void(0)" class="list" fileid="undefined"> element 3</a></li>
        </ul>
    </div>
</div>

我想将一个onclick事件处理程序应用于在标有.playlist_box的区域时不会被触发的特征。我试图取消选择各种元素,非作品,其中一些是:

  jQuery("#featured").not('.playlist').click(function()...
  jQuery("#featured").not('li').click(function()...

似乎 not()不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

为什么不使用这样的东西?

$("#featured:not('.playlist')").click(function() {
    //function
});

Here is how to use it.

答案 1 :(得分:2)

.not()从匹配元素集中删除元素。
您只选择ID为#featured的div,因此.not()将再次返回div。此外,该课程为playlist_box而不是playlist

如果您坚持.not(),那么您将不得不做类似

的事情
$("#featured").children().not(".playlist_box").click(...);

但为什么不呢

$("#featured").on("click", "li.list", function(ev) {
    if ($(this).closest("div").hasClass("playlist_box")) {
        // do something
    } else {
        // do something else
    }
});

一个处理所有人的处理程序:D

编辑:添加了对父

的检查

答案 2 :(得分:1)

看起来效果很好,请参阅fiddle

另请注意,您正在尝试应用不存在的playlist。你应该寻找playlist_box。但是,如果您这样做,它将无法与.not()一起使用,因为您将.not()应用于没有该类的#featured,因此它将失败,您需要使用过滤:not()或以其他方式使用jQuery("a").not('.list').click(function(){

您也可以尝试这样做

jQuery("#featured:not('.playlist')")

请参阅此fiddle