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 回答