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>

.playlist_boxでマークされた領域でトリガーされない機能にonclickイベントハンドラーを適用したいと思います。私はさまざまな要素の選択を解除しようとしましたが、作品ではありません。それらのいくつかは次のとおりです。

  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
    }
});

それらすべてを支配する1つのハンドラー: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 に答える