JQuery .hasClass用于if语句中的多个值

Dan*_*der 78 javascript syntax jquery logic

我有一个简单的if语句:

if ($('html').hasClass('m320')) {

// do stuff 

}
Run Code Online (Sandbox Code Playgroud)

这按预期工作.但是,我想添加更多类来if statement检查<html>标记中是否存在任何类.我需要它所以它不是全部而是只有至少一个类的存在但它可以更多.

我使用的情况是,我有类(例如m320,m768),增加了对各种视口的宽度,所以我只想执行某些jQuery的,如果它是一个特定的宽度(类).

这是我到目前为止所尝试的:

1.

if ($('html').hasClass('m320', 'm768')) {

// do stuff 

}
Run Code Online (Sandbox Code Playgroud)

2.

if ($('html').hasClass('m320')) || ($('html').hasClass('m768')) {

 // do stuff 

}
Run Code Online (Sandbox Code Playgroud)

3.

 if ($('html').hasClass(['m320', 'm768'])) {

 // do stuff 

    }
Run Code Online (Sandbox Code Playgroud)

这些似乎都不起作用.不确定我做错了什么,但很可能是我的语法或结构.

elc*_*nrs 151

您可以使用is()而不是hasClass():

if ($('html').is('.m320, .m768')) { ... }
Run Code Online (Sandbox Code Playgroud)

  • 是啊`hasClass()`可能更快,但`is()`在大多数情况下更方便 (3认同)

Jam*_*gne 68

你在第二次尝试时只是弄乱了一些括号.

var $html = $("html");

if ($html.hasClass('m320') || $html.hasClass('m768')) {

  // do stuff 

}
Run Code Online (Sandbox Code Playgroud)

  • 你真的应该将`$('html')`缓存到一个变量中,而不是多次查找它. (5认同)
  • @epascarello 非常正确,为后代更新答案。 (2认同)

jfr*_*d00 25

为了好玩,我写了一个小jQuery附加组件方法,它将检查多个类名中的任何一个:

$.fn.hasAnyClass = function() {
    for (var i = 0; i < arguments.length; i++) {
        if (this.hasClass(arguments[i])) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的示例中,您可以使用此:

if ($('html').hasAnyClass('m320', 'm768')) {

// do stuff 

}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要传递任意数量的类名.


这是一个增强版本,它还允许您传递由空格分隔的多个类名:

$.fn.hasAnyClass = function() {
    for (var i = 0; i < arguments.length; i++) {
        var classes = arguments[i].split(" ");
        for (var j = 0; j < classes.length; j++) {
            if (this.hasClass(classes[j])) {
                return true;
            }
        }
    }
    return false;
}

if ($('html').hasAnyClass('m320 m768')) {
    // do stuff 
}
Run Code Online (Sandbox Code Playgroud)

工作演示:http://jsfiddle.net/jfriend00/uvtSA/


Kol*_*lja 24

这可能是另一种解决方案:

if ($('html').attr('class').match(/m320|m768/)) {  
  // do stuff   
}  
Run Code Online (Sandbox Code Playgroud)

根据jsperf.com,它也很快.

  • 这也将与'ZZZm320WWW'等级相匹配.尝试...匹配(/\b(m320 | m768)\ b /)其中\ b匹配单词的开头和结尾. (9认同)

Rya*_*fer 5

对于任何想要了解所有这些不同选项的不同性能方面的人,我在这里创建了一个jsperf案例:jsperf

简而言之,使用element.hasClass('class')是最快的.

下一个最好的选择是使用elem.hasClass('classA') || elem.hasClass('classB').关于这一点的说明:订单很重要!如果更有可能找到"classA"类,请先列出它!只要满足其中一个条件语句,OR条件语句就会返回.

到目前为止最糟糕的表现是使用element.is('.class').

jsperf中还列出了Cyber​​Monk的功能Kolja的解决方案.