如何在jQuery/Javascript中编写switch语句来测试一个元素是否有特定的类?

cat*_*use 11 javascript jquery if-statement class switch-statement

这是我正在使用的if-else语句的结构:

$('.myclass a').click(function() {
   if ($(this).hasClass('class1')) {
        //do something
   } else if ($(this).hasClass('class2')) {
        //do something
   } else if ($(this).hasClass('class3')) {
        //do something
   } else if ($(this).hasClass('class4')) {
        //do something
   } else {
        //do something
   }
});
Run Code Online (Sandbox Code Playgroud)

已经有很多案例,我认为使用switch语句会更整洁.我如何在jQuery/javascript中执行此操作?

Xya*_*ing 20

试试这个.不太清洁,但仍然是一个转换声明.

$('.myclass a').click(function() {
    switch (true) {
      case $(this).hasClass('class1'):
        // do stuff
        break;
      case $(this).hasClass('class2'):
        // do stuff
        break;
      case $(this).hasClass('class3'):
        // do stuff
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @XyanEwing Nicola更好吗?如果class属性中有更多类,则此方法有效,在这种情况下Nicola失败。 (2认同)

Nic*_*tti 19

问题是用户可能有多个班级.否则你可以这样做:

$('.myclass a').click(function() {
   var className = $(this).attr('class');
   switch(className){
      case 'class1':
     //put your cases here
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 使用名为`class`的变量不是一个好主意,因为我认为这是Javascript中的保留字(保留供将来使用).将它改为`className`或除了`class`之外的东西. (2认同)
  • 这节省了很多代码,但是如果$(this)有多个类呢? (2认同)

jfr*_*d00 5

我认为最干净的方式可能就是这样:

$('.myclass a.class1').click(function() {
   // code to process class1
});

$('.myclass a.class2').click(function() {
   // code to process class2
});

$('.myclass a.class3').click(function() {
   // code to process class3
});

$('.myclass a.class4').click(function() {
   // code to process class4
});
Run Code Online (Sandbox Code Playgroud)

如果你有很多,你甚至可以把它们放在这样的数据结构中:

// to define them all
var classHandlers = {
    class1: function() {
        // class1 code here
    },
    class2: function() {
        // class2 code here
    },
    class3: function() {
        // class3 code here
    },
    class4: function() {
        // class4 code here
    }
};

// to register them all
$.each(classHandlers, function(key, fn) {
    $('.myclass a.' + key).click(fn);
});
Run Code Online (Sandbox Code Playgroud)

既然你已经(在评论中)询问如何为没有类名的对象做事件处理程序,那么如果你没有查找类名,你可以这样做:

$(".myclass a").not("[class]").click(function() {
    // code to handle objects with no class name here
});
Run Code Online (Sandbox Code Playgroud)

我在这里测试了它:http://jsfiddle.net/jfriend00/TAjKR/