在单个选择器上定义多个内容

时间:2017-04-01 22:24:18

标签: jquery

这是我的代码:

$('body').on('click', '.class1', function() {
    sth ...
});

我想将这些行添加到我的代码中:

$('body').on('click', '.class2', function() {
    some other things ...
});

但这似乎是一种错误的做法......我的IDE(pyCharm)说你不应该使用重复的jQuery选择器'

我能知道什么?

2 个答案:

答案 0 :(得分:2)

你可以链接.on个电话,因为它们会在同一个选择器上发挥作用:

$('body').on('click', '.class1', function() {
    sth ...
}).on('click', '.class2', function() {
    some other things ...
});

这会使 pyCharm 沉默: - )

你也可以通过一次点击处理来解决它,并通过.is()调用进行区分,尽管这可能会使你的代码不那么可读:

$('body').on('click', '.class1, .class2', function() {
    if ($(this).is('.class1')) {
        sth ...
    } else {
        some other things ...
    }
});

答案 1 :(得分:1)

没有任何结构上的错误,您的IDE会发出错误警报,这些错误警报比与代码有效性相关的性能更强

为了满足IDE,您可以将$('body')缓存在变量或链多个on()

var $body=$('body');

$body.on('click', '.class1', function(){...});
$body.on('click', '.class2', function(){...});

或者

$('body').on('click', '.class1', function(){...})
         .on('click', '.class2', function(){...});

另一种方法是为多个类使用一个单击侦听器,并在处理程序

中使用条件
$('body').on('click', '.class1, .class2', function(){
  if($(this).hasClass('class1')){
     // do class 1 stuff
  }else{
   // do class 2 stuff
  }    
});