检查一个元素是否包含 JavaScript 中的类?

2022-08-29 22:25:13

使用普通的JavaScript(不是jQuery),有没有办法检查一个元素是否包含类?

目前,我正在这样做:

var test = document.getElementById("test");
var testClass = test.className;

switch (testClass) {
  case "class1":
    test.innerHTML = "I have class1";
    break;
  case "class2":
    test.innerHTML = "I have class2";
    break;
  case "class3":
    test.innerHTML = "I have class3";
    break;
  case "class4":
    test.innerHTML = "I have class4";
    break;
  default:
    test.innerHTML = "";
}
<div id="test" class="class1"></div>

问题是,如果我将HTML更改为此...

<div id="test" class="class1 class5"></div>

...不再有完全匹配,因此我得到无的默认输出()。但我仍然希望输出是,因为静止包含类。""I have class1<div>.class1


答案 1

Use element.classList 方法:.contains

element.classList.contains(class);

这适用于所有当前的浏览器,并且还有polyfills来支持较旧的浏览器。


或者,如果您使用较旧的浏览器并且不想使用polyfills来修复它们,则使用indexOf是正确的,但您必须对其进行一些调整:

function hasClass(element, className) {
    return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1;
}

否则,如果您要查找的类是另一个类名的一部分,您也将获得。true

演示

jQuery使用类似的(如果不相同)方法。


应用于示例:

由于这不能与 switch 语句一起使用,因此您可以使用以下代码实现相同的效果:

var test = document.getElementById("test"),
    classes = ['class1', 'class2', 'class3', 'class4'];

test.innerHTML = "";

for(var i = 0, j = classes.length; i < j; i++) {
    if(hasClass(test, classes[i])) {
        test.innerHTML = "I have " + classes[i];
        break;
    }
}

它的冗余;)


答案 2

简单有效的解决方案是尝试.contains方法。

test.classList.contains(testClass);