如何在 JavaScript 中检查 DOM 元素是否包含类?

发布于 2024-10-03 15:39:27 字数 179 浏览 8 评论 0 原文

如何在 JavaScript 中检查 DOM 元素是否包含类?

我尝试了以下代码,但由于某种原因它不起作用......

if (document.getElementById('element').class == "class_one") {
    //code...
}

How can I check in JavaScript if a DOM element contains a class?

I tried the following code, but for some reason it doesn't work...

if (document.getElementById('element').class == "class_one") {
    //code...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

御弟哥哥 2024-10-10 15:39:27

要获取类属性的完整值,请使用 .className

From MDC:

className 获取和设置指定元素的类属性的值。

自2013年起,你会得到额外的帮助。

许多年前,当这个问题首次得到解答时,.className 是纯 JavaScript 中唯一真正的解决方案。自 2013 年起,所有浏览器都支持 .classList 接口。

JavaScript:

if(document.getElementById('element').classList.contains("class_one")) {
    //code...
}

您还可以使用 classList 做一些有趣的事情,例如 .toggle().add().remove()

MDN 文档

向后兼容代码:

if(document.getElementById('element').className.split(" ").indexOf("class_one") >= 0) {
    //code...
}

To get the whole value of the class atribute, use .className

From MDC:

className gets and sets the value of the class attribute of the specified element.

Since 2013, you get an extra helping hand.

Many years ago, when this question was first answered, .className was the only real solution in pure JavaScript. Since 2013, all browsers support .classList interface.

JavaScript:

if(document.getElementById('element').classList.contains("class_one")) {
    //code...
}

You can also do fun things with classList, like .toggle(), .add() and .remove().

MDN documentation.

Backwards compatible code:

if(document.getElementById('element').className.split(" ").indexOf("class_one") >= 0) {
    //code...
}
謌踐踏愛綪 2024-10-10 15:39:27

您需要的属性是className,而不是class。另外,一个元素可以有很多类,所以如果你想测试它是否有一个特定的类,你需要执行如下操作:

function hasClass(el, clss) {
    return el.className && new RegExp("(^|\\s)" +
           clss + "(\\s|$)").test(el.className);
}

var element = document.getElementById('element');
if ( hasClass(element, "class_one") ) {
    // Do stuff here
}

UPDATE

现代浏览器(几乎所有主要的浏览器,除了 IE <= 9) 支持 classList 属性,如 @Dropped.on.Caprica 的回答中所述。因此,在可能的情况下使用它是有意义的。下面是一些示例代码,用于检测浏览器是否支持 classList 并回退到基于正则表达式的代码:

var hasClass = (typeof document.documentElement.classList == "undefined") ?
    function(el, clss) {
        return el.className && new RegExp("(^|\\s)" +
               clss + "(\\s|$)").test(el.className);
    } :
    function(el, clss) {
        return el.classList.contains(clss);
    };

The property you need is className, not class. Also, an element can have many classes, so if you want to test if it has a particular class you need to do something like the following:

function hasClass(el, clss) {
    return el.className && new RegExp("(^|\\s)" +
           clss + "(\\s|$)").test(el.className);
}

var element = document.getElementById('element');
if ( hasClass(element, "class_one") ) {
    // Do stuff here
}

UPDATE

Modern browsers (pretty much everything major except IE <= 9) support a classList property, as mentioned in @Dropped.on.Caprica's answer. It therefore makes sense to use this where available. Here's some example code that detects whether classList is supported by the browser and falls back to the regex-based code otherwise:

var hasClass = (typeof document.documentElement.classList == "undefined") ?
    function(el, clss) {
        return el.className && new RegExp("(^|\\s)" +
               clss + "(\\s|$)").test(el.className);
    } :
    function(el, clss) {
        return el.classList.contains(clss);
    };
笑,眼淚并存 2024-10-10 15:39:27

所有现代浏览器都支持 contains 方法>Element.classList

testElement.classList.contains(className)

演示

var testElement = document.getElementById('test');

document.body.innerHTML = '<pre>' + JSON.stringify({
    'main' : testElement.classList.contains('main'),
    'cont' : testElement.classList.contains('cont'),
    'content' : testElement.classList.contains('content'),
    'main-cont' : testElement.classList.contains('main-cont'),
    'main-content' : testElement.classList.contains('main-content')
}, null, 2) + '</pre>';
<div id="test" class="main main-content content"></div>


支持的浏览器

在此处输入图像描述

(来自 CanIUse.com)


Polyfill

如果你想使用 Element.classList 并且您还想支持 IE8 等古老的浏览器,请考虑使用 这个polyfill,作者:Eli Grey< /a>.

All modern browsers support the contains method of Element.classList :

testElement.classList.contains(className)

Demo

var testElement = document.getElementById('test');

document.body.innerHTML = '<pre>' + JSON.stringify({
    'main' : testElement.classList.contains('main'),
    'cont' : testElement.classList.contains('cont'),
    'content' : testElement.classList.contains('content'),
    'main-cont' : testElement.classList.contains('main-cont'),
    'main-content' : testElement.classList.contains('main-content')
}, null, 2) + '</pre>';
<div id="test" class="main main-content content"></div>


Supported browsers

enter image description here

(from CanIUse.com)


Polyfill

If you want to use Element.classList and you also want to support ancient browsers like IE8, consider using this polyfill by Eli Grey.

懵少女 2024-10-10 15:39:27

它是 .className 属性,如下所示:

if (document.getElementById('element').className == "class_one") {
    //code...
}

It's the .className property, like this:

if (document.getElementById('element').className == "class_one") {
    //code...
}
朮生 2024-10-10 15:39:27

比所有这些(如果您使用的是 HTML5)更好的解决方案是使用 classList API。

var element = document.getElementById('some-element');

if (element.classList.contains('class-you-want-to-check')) {
  console.log('element has target class')
} else {
  element.classList.add('class-you-want-to-check');
  element.classList.remove('class-you-want-to-check');
  element.classList.toggle('class-you-want-to-check');

  if (element.classList.contains('class-you-want-to-check')) {
    console.log('Yep, classList is baller')
  }
}

A better solution than all of these (if you are using HTML5) is to use the classList API.

var element = document.getElementById('some-element');

if (element.classList.contains('class-you-want-to-check')) {
  console.log('element has target class')
} else {
  element.classList.add('class-you-want-to-check');
  element.classList.remove('class-you-want-to-check');
  element.classList.toggle('class-you-want-to-check');

  if (element.classList.contains('class-you-want-to-check')) {
    console.log('Yep, classList is baller')
  }
}
烟酉 2024-10-10 15:39:27

元素上的切换类

var el = document.getElementById('element');
el.classList[['add','remove'][+el.classList.contains('class_one')]]('class_one');

el.classList.toggle('class_one');

toggleClass on element

var el = document.getElementById('element');
el.classList[['add','remove'][+el.classList.contains('class_one')]]('class_one');

or

el.classList.toggle('class_one');
棒棒糖 2024-10-10 15:39:27

如果您使用 jQuery,那么这个简单的代码就会有所帮助:

if ($('.yourclass').length) {
  // do something
} 

如果您想检查页面中 2 个以上的类,则使用 $('.yourclass').length > 2

If you are using jQuery then just this simple code will help:

if ($('.yourclass').length) {
  // do something
} 

If you like to check more than 2 classes in the page then use $('.yourclass').length > 2

铁轨上的流浪者 2024-10-10 15:39:27

hasClass:

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

containsClass:

function containsClass(element, className) {
  return Array.from(element.classList).filter(function (cls) {
    return cls.indexOf(className) > -1;
  }).length > 0;
}

codepen 演示

hasClass:

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

containsClass:

function containsClass(element, className) {
  return Array.from(element.classList).filter(function (cls) {
    return cls.indexOf(className) > -1;
  }).length > 0;
}

codepen demo

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文