Javascript 函数来检查元素是否有任何这些带有本机JS的类

Javascript 函数来检查元素是否有任何这些带有本机JS的类,javascript,html,dom,Javascript,Html,Dom,寻找一个简单、轻量级的函数来检查一个函数是否有任何列出的类而没有jQuery或其他库 这样的函数很容易实现,但是应该有一个规范的、最快的和最简单的答案,人们可以直接复制粘贴 这看起来有点像吸血鬼,但我这么问是为了让谷歌不用自己写 不重复-链接问题检查一个类,此问题要求检查任何类 function hasAnyOfTheseClasses(elem, tofind) { classes = elem.className.split(' '); for(var x in tofind

寻找一个简单、轻量级的函数来检查一个函数是否有任何列出的类而没有jQuery或其他库

这样的函数很容易实现,但是应该有一个规范的、最快的和最简单的答案,人们可以直接复制粘贴

这看起来有点像吸血鬼,但我这么问是为了让谷歌不用自己写

不重复-链接问题检查一个类,此问题要求检查任何类

function hasAnyOfTheseClasses(elem, tofind) {
    classes = elem.className.split(' ');
    for(var x in tofind) {
        var className = tofind[x];
        if (classes.indexOf(className) == -1){
            return false;
        }
    }
    return true;
}

以下是我的实现:

<div id="test" class="a1 a2 a5"></div>

var element = document.getElementById("test") 
if (hasAnyOfTheseClasses(element, ["a1", "a6"])) { 
   //...
}

它既不优雅也不快速。不过还是管用的。请随意编辑以进行改进。

您可以使用正则表达式,不确定它是否纯粹更好,但至少更灵活,因为您当前的测试太依赖于正确输入空格

function hasAnyOfTheseClasses(element, classes) {
    for (var i = 0; i < classes.length; i++) {
        if ((' ' + element.className + ' ').indexOf(' ' + classes[i] + ' ') > -1) {
            return true;
        }
    }
    return false;
}

只需创建一个循环,检查数组中的每个值是否是传递的元素中的类

function hasAnyOfTheseClasses(element, classes) {
    var className = element.className;
    for (var i = 0; i < classes.length; i++) {
        var exp = new RegExp('\b'+classes[i] + '\b');
      if(exp.test(className)) return true;
    }
    return false;
}
使用属性获取元素的类列表。然后可以使用.contains方法测试每个类

function hasAnyOfTheseClasses(elem, tofind) {
    classes = elem.className.split(' ');
    for(var x in tofind) {
        var className = tofind[x];
        if (classes.indexOf(className) == -1){
            return false;
        }
    }
    return true;
}

下面是一个使用和的功能实现

函数hasAnyClasselement,类{ 返回类.somefunctionc{ 返回元素.classList.containsc; }; } var div=document.getElementByIdtest; console.loghasAnyClassdiv[hi,xyz]; console.loghasAnyClassdiv,[xyz,there]; console.loghasAnyClassdiv[xyz,xyz]; 使用和:


谁不希望它能够复制粘贴这种代码呢?对于有基本技能的人来说应该不会太难。你自己试过什么吗?@AlexanderO'Mara是的。它起作用了。我正在寻找一个规范的答案,这样谷歌人就不必再经历这个过程了。我的impl可能不利于性能或优雅。如果您希望发布一个规范问题,请将您的解决方案作为答案发布。不要躲在它后面作为让人们为你写代码的借口。不确定添加一个循环是否需要它自己的问答。基本上是重复的。短版本将是['foo','bar']。。。在……我的也是。这一个有一个bug。太依赖于正确输入空格了,我不这么认为。这怎么会是个问题?这也是jQuery使用的实现。顺便说一句,被Felix的答案欺骗了。哦,天哪,这个答案已经流行了3次了
function hasAnyClass(el, classes) {
  var elClasses = el.className.split(' ');
  return classes.some(c => elClasses.indexOf(c) >= 0)
}