我如何在JavaScript中检查一个DOM元素是否包含某个类?
我尝试了下面的代码,但是由于某种原因它没有起作用...
if (document.getElementById('element').class == "class_one") {
//code...
}
我如何在JavaScript中检查一个DOM元素是否包含某个类?
我尝试了下面的代码,但是由于某种原因它没有起作用...
if (document.getElementById('element').class == "class_one") {
//code...
}
要获取整个class属性的值,请使用.className
。
className 获取或设置指定元素的 class 属性的值。
许多年前,当首次回答此问题时,.className
是在纯 JavaScript 中唯一的解决方案。自 2013 年以来,所有浏览器都支持 .classList
接口。
JavaScript:
if(document.getElementById('element').classList.contains("class_one")) {
//code...
}
你还可以使用 classList
进行有趣的操作,如 .toggle()
、.add()
和 .remove()
。if(document.getElementById('element').className.split(" ").indexOf("class_one") >= 0) {
//code...
}
你需要的属性是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<=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);
};
if (hasClass(...))
的例子中需要传递一个类名("class_one" 是 OP 想要检查的那个)。 - Christian C. Salvadó所有现代浏览器都支持Element.classList
的contains
方法:
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)
如果你想要使用Element.classList
,并且还想支持像IE8这样的古老浏览器,请考虑使用这个兼容性补丁,作者是Eli Grey。
.className
属性,代码如下:if (document.getElementById('element').className == "class_one") {
//code...
}
className
始终是一个字符串,所以这并不会有什么区别。除非你是jslint。;) - ThiefMaster==
有什么歧义吗? - Tim Down==
强制我去考虑在本来不需要的时候类型转换,使用严格相等会更加透明,方便未来的你或开发者查看这个语句。我不会说它完全错误,但个人认为在像这样的情况下不应该使用。 - rlemonvar 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')
}
}
if ($('.yourclass').length) {
// do something
}
$('.yourclass').length > 2
。在元素上切换toggleClass
var el = document.getElementById('element');
el.classList[['add','remove'][+el.classList.contains('class_one')]]('class_one');
或者
el.classList.toggle('class_one');
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;
}