如果DOM元素包含类,我如何检入JavaScript?

Flo*_*ler 15 javascript dom

如果DOM元素包含类,我如何检入JavaScript?

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

if (document.getElementById('element').class == "class_one") {
    //code...
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 36

要获取类属性的全部值,请使用 .className

来自MDC:

className获取并设置指定元素的class属性的值.

自2013年以来,您将获得额外的帮助.

很多年前,当这个问题第一次被回答时,它.className是纯JavaScript中唯一真正的解决方案.自2013年起,所有浏览器都支持 .classList界面.

JavaScript的:

if(document.getElementById('element').classList.contains("class_one")) {
    //code...
}
Run Code Online (Sandbox Code Playgroud)

你也可以做有趣的事情有classList,像.toggle(),.add().remove().

MDN文档.

向后兼容的代码:

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

  • 欢迎来到@alwe (4认同)
  • 这是2016年,我可以使用classList,真棒:) (3认同)

Tim*_*own 16

你需要的财产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
}
Run Code Online (Sandbox Code Playgroud)

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);
    };
Run Code Online (Sandbox Code Playgroud)


Joh*_*ers 6

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

testElement.classList.contains(className)
Run Code Online (Sandbox Code Playgroud)

演示

testElement.classList.contains(className)
Run Code Online (Sandbox Code Playgroud)
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>';
Run Code Online (Sandbox Code Playgroud)


支持的浏览器

在此输入图像描述

(来自CanIUse.com


聚合物填料

如果您想使用Element.classList并且还想支持像 IE8 这样的古老浏览器,请考虑使用Eli Gray这个 polyfill


Nic*_*ver 5

这是.className属性,像这样:

if (document.getElementById('element').className == "class_one") {
    //code...
}
Run Code Online (Sandbox Code Playgroud)

  • 它假设标签只有一个类(并且,如果您想更新它 - 与 [classList](https://developer.mozilla.org/en-US/docs/DOM/element.classList) 无关) 。 (2认同)
  • @tereško - 问题是"如何检查DOM元素的类?",而不是"我如何检查DOM元素是否有类?"......这个问题在其他地方. (2认同)