jQuery hasClass() - 检查多个类

Han*_*ans 153 performance jquery jquery-selectors

附:

if(element.hasClass("class"))
Run Code Online (Sandbox Code Playgroud)

我可以检查一个类,但有一个简单的方法来检查"元素"是否有任何类?

我在用:

if(element.hasClass("class") || element.hasClass("class") ... )
Run Code Online (Sandbox Code Playgroud)

这不是太糟糕,但我想的是:

if(element.hasClass("class", "class2")
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这不起作用.

有类似的东西吗?

Sim*_*old 284

element.is('.class1, .class2')
Run Code Online (Sandbox Code Playgroud)

的作品,它是慢35%,

element.hasClass('class1') || element.hasClass('class2')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你怀疑我说的话,你可以在jsperf.com验证.

希望这能有所帮助.

  • @DamianNowak如果那些程序员不愿意写一些相当数量的更多代码,他们可能不是非常昂贵的代码. (19认同)
  • 19%慢,大不了.程序员更贵. (16认同)
  • 个人无法看到性能优化的必要性.每秒12000次操作对我来说似乎足够快.我会说使用哪个看起来更好.在需要时优化性能. (5认同)
  • @psychobrm:如果你必须一次检查10个课程,你真正需要的是简化你的课程名称.没有理由这样胡说八道.:) (3认同)
  • ...嗯,但我只是在jsperf中为Chrome 21.0.1180运行它,而is()方法现在快了大约20%.但是hasClass()似乎更具可读性. (2认同)
  • 有一个词可以形容这一点——它被称为“过早优化”。当然,如果您在 1000 行的表上运行此程序,那么优化可能非常值得。对于大多数人来说 - 一次性 `.is('.probabbly, .okay')` (2认同)
  • 截至 2017 年 4 月,“.is”在 Chrome 58 上快了 10%,但在 Firefox 53 上慢了 20%,在 Edge 15 上慢了 60% - 所有测试均在 Windows 10 1703 上进行 (2认同)

Mat*_*chu 212

怎么样:

element.is('.class1, .class2')
Run Code Online (Sandbox Code Playgroud)

  • 不,因为那会寻找具有两个类的元素.我认为Marcel正在寻找具有一个或多个类的元素. (8认同)
  • 这对我不起作用,但`$('element').是('.class1.class2')`的确如此 (8认同)
  • @iamchriswick:这与OP要求的略有不同.`.class1.class2`将匹配具有_both_类的元素,但它们正在寻找与_either_ class匹配的元素. (5认同)
  • 编辑为OR系统:) (2认同)

Kal*_*ade 36

$.fn.extend({
    hasClasses: function (selectors) {
        var self = this;
        for (var i in selectors) {
            if ($(self).hasClass(selectors[i])) 
                return true;
        }
        return false;
    }
});

$('#element').hasClasses(['class1', 'class2', 'class3']);
Run Code Online (Sandbox Code Playgroud)

这应该做到,简单易行.

  • 有点小问题,但参数**选择器**应该真正命名为**类**或**classNames**,因为这是你传入的,而不是选择器.选择器前面会有一个点,如$('#element').hasClasses(['.class1','.class2','..class3']); (3认同)
  • 你缺少for(我在选择器中)中的var,因此创建了一个全局变量. (2认同)

Joh*_*lia 10

filter()是另一种选择

将匹配元素集减少到与选择器匹配的元素或传递函数的测试.

$(selector).filter('.class1, .class2'); //Filter elements: class1 OR class2

$(selector).filter('.class1.class2'); // Filter elements: class1 AND class2
Run Code Online (Sandbox Code Playgroud)


小智 6

这个怎么样?

if (element.hasClass("class1 class2")
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在查看“或”条件,这将不起作用。 (3认同)