1

我有以下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()不起作用。有任何想法吗?

4

3 回答 3

2

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

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

以下是如何使用它。

于 2012-09-19T13:14:05.340 回答
2

.not()从匹配的元素集中删除元素。
您只选择带有 id 的 div,#featured因此.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

编辑:添加了对父项的检查

于 2012-09-19T13:22:11.753 回答
1

看起来它工作得很好,看小提琴

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

您也可以尝试这样做

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

看到这个小提琴

于 2012-09-19T13:13:10.477 回答