Как проверить JavaScript, если элемент DOM содержит класс?
Я попробовал следующий код, но по какой-то причине он не работает...
if (document.getElementById('element').class == "class_one") {
//code...
}
Как проверить JavaScript, если элемент DOM содержит класс?
Я попробовал следующий код, но по какой-то причине он не работает...
if (document.getElementById('element').class == "class_one") {
//code...
}
Чтобы получить все значение атрибута класса, используйте .className
className получает и устанавливает значение атрибута класса указанного элемента.
Много лет назад, когда на этот вопрос впервые был дан ответ, .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
}
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);
};
Это свойство .className
, например:
if (document.getElementById('element').className == "class_one") {
//code...
}
Лучшим решением, чем все из них (если вы используете HTML5), является использование API-интерфейса classList.
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')
}
}
Все современные браузеры поддерживают метод 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>
toggleClass для элемента
var el = document.getElementById('element');
el.classList[['add','remove'][+el.classList.contains('class_one')]]('class_one');
или
el.classList.toggle('class_one');
Если вы используете jQuery, тогда просто этот простой код поможет:
if ($('.yourclass').length) {
// do something
}
Если вы хотите проверить более 2 классов на странице, используйте $('.yourclass').length > 2
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;
}