您可以使用以下函数,使用正则表达式来匹配由空格或行首或行尾包围的字符串。但如果您打算使用正则表达式特殊字符,则必须小心准备它们,因为搜索参数将被解释为字符串而不是 RegExp 文字:
var hasClass = function(s, klass) {
var r = new RegExp("(?:^| )(" + klass + ")(?: |$)")
, m = (""+s).match(r);
return (m) ? m[1] : null;
};
hasClass("a b c", "a"); // => "a"
hasClass("a b c", "b"); // => "b"
hasClass("a b c", "x"); // => null
var klasses = "widget util cookie i18n-username";
hasClass(klasses, "username"); // => null
hasClass(klasses, "i18n-username"); // => "i18n-username"
hasClass(klasses, "i18n-\\w+"); // => "i18n-username"
正如其他人指出的那样,您也可以简单地使用“split”和“indexOf”:
var hasClass = function(s, klass) {
return (""+s).split(" ").indexOf(klass) >= 0;
};
但是,请注意,“indexOf”函数最近才被引入 JavaScript,因此对于较旧的浏览器,您可能必须自己实现它。
var hasClass = function(s, klass) {
var a=(""+s).split(" "), len=a.length, i;
for (i=0; i<len; i++) {
if (a[i] == klass) return true;
}
return false;
};
[Edit]
请注意,对于大多数浏览器(尽管不是全部), split/indexOf 解决方案可能更快。这jsPerf 基准测试显示哪种解决方案对于各种浏览器来说更快 - 值得注意的是,Chrome 必须有一个非常好的正则表达式引擎!