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

时间:2010-11-23 15:18:41

标签: javascript dom

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

我尝试了以下代码,但由于某种原因它无效......

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

8 个答案:

答案 0 :(得分:34)

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

From MDC:

  

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

自2013年起,您将获得更多帮助。

许多年前,当这个问题首次得到解答时,.className是纯JavaScript中唯一的真正的解决方案。自2013年起,all browsers support .classList界面。

JavaScript的:

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

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

MDN documentation

向后兼容代码:

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

答案 1 :(得分: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
}

<强>更新

现代浏览器(除了IE&lt; = 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);
    };

答案 2 :(得分:5)

这是.className property,就像这样:

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

答案 3 :(得分:2)

比所有这些(如果您使用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')
  }
}

答案 4 :(得分:1)

所有现代浏览器都支持Element.classListcontains方法:

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>

支持的浏览器

enter image description here

(来自CanIUse.com

填充工具

如果您想使用Element.classList并且您还想支持IE8等古老浏览器,请考虑this polyfill使用Eli Grey

答案 5 :(得分:0)

元素

上的

toggleClass

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

el.classList.toggle('class_one');

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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