4

下にあるすべてのアイテムをバインドしたいとしましょう

#mainDiv .user

を除外する

#mainDiv #exception .user

私は考えることができます

$('#mainDiv .user').bind('event',function(){
    if($(this).parents('#exception').length>0){}else{
       // do stuff;   
    }

});

また:

$('#mainDiv :not('#exception').find('.user').bind('event',function(){
    if($(this).parents('#exception').length>0){}else{
       // do stuff;   
    }

});

より良いものは何ですか?

4

3 に答える 3

15

代わりに次のようなものを提案するかもしれません

$('#mainDiv .user').not('#mainDiv #exception .user').bind('event',function()
{
    //do stuff
});

not() 関数は、既存の jquery セットを取得し、パラメーターとして渡されたセレクターに適合する要素をその中から削除します。

セレクターと if ステートメントの両方を使用するよりも、事前にプールをフィルター処理する方がクリーンでパフォーマンスが高くなります (おそらく問題にはなりませんが、良い方法です)。フィルター処理が完了すると、if ステートメントは不要になります。

補足として、「#mainDiv #exception .user」のフィルタリングは、私には奇妙に思えます。「#exception」は、独自の一意の識別子である必要があります-何らかの理由で「#mainDiv」が「#exception」の子である可能性があることを懸念しない限り。

于 2012-03-02T22:27:37.460 に答える
2

最初にすべての要素を取得してから、除外する要素を削除します。

$('#mainDiv .user').not('#mainDiv #exception .user').bind('event', function(){
  // do stuff
});
于 2012-03-02T22:29:12.833 に答える
0

私はイベントを委任します:

$( '#mainDiv' ).on( 'event', '.user', function () {

    if ( $( this ).parent().is( '#exception' ) ) { return; }

    // do your thing

});

this.parentNode.id === 'exception'また、チェックを行うことができます...

于 2012-03-02T22:36:27.637 に答える