如何将类数组应用于classList.contains

How to apply an array of classes to classList.contains?

本文关键字:应用于 classList contains 数组      更新时间:2023-09-26

在我的HTML中,我有一个类似的div

<div class="a b c"></div>

在我的JavaScript中,我有一系列感兴趣的类:

var goodClasses = ['a', 'c'];

在好的浏览器中,我可以使用令人敬畏的classList功能来测试我的div是否具有合适的类:

return div.classList.contains(goodClasses[0], goodClasses[1]);

这没关系,但我真正想做的是这样的事情(语法很傻,但这是一般的想法):

return div.classList.contains.apply(div, goodClasses);

有办法做到这一点吗?如果我必须循环遍历我的类数组,那么classList就不那么酷了。

正如@Felix Kling正确指出的那样,classList.contains只接受一个参数。

如果您支持的浏览器支持Array上的every()方法,则可以执行以下操作:

return goodClasses.every( function( c ) {
    return div.classList.contains( c );
});

不支持它的浏览器可以使用MDC兼容性修复程序:

if (!Array.prototype.every)
{
  Array.prototype.every = function(fun /*, thisp */)
  {
    "use strict";
    if (this === void 0 || this === null)
      throw new TypeError();
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t && !fun.call(thisp, t[i], i, t))
        return false;
    }
    return true;
  };
}

这应该能在中工作

String(el.className).includes(class)