13 ответов:
вы можете проверить, является ли
element.classNameигр/\bthatClass\b/.\bсоответствует разрыву слов.или вы можете использовать собственную реализацию jQuery:
var className = " " + selector + " "; if ( (" " + element.className + " ").replace(/[\n\t]/g, " ").indexOf(" thatClass ") > -1 )чтобы ответить на ваш более общий вопрос, вы можете посмотреть на jQuery исходный код на github или в источнике для
hasClassконкретно в этом источнике просмотра.
просто использовать
classList:if (document.body.classList.contains('thatClass')) { // do some stuff }другое использование
classList:document.body.classList.add('thisClass'); // $('body').addClass('thisClass'); document.body.classList.remove('thatClass'); // $('body').removeClass('thatClass'); document.body.classList.toggle('anotherClass'); // $('body').toggleClass('anotherClass');Поддержка Браузера:
- Chrome 8.0
- Firefox 3.6
- IE 10
- Опера 11.50
- Safari 5.1
самый эффективный один лайнер, который
- возвращает логическое значение (в отличие от ответа Orbling)
- не возвращает ложное срабатывание при поиске
thisClassна элементе, который имеетclass="thisClass-suffix".- совместим с каждым браузером вплоть до IE6
function hasClass( target, className ) { return new RegExp('(\s|^)' + className + '(\s|$)').test(target.className); }
атрибут, который хранит классы в использовании является
className.Так что вы можете сказать:
if (document.body.className.match(/\bmyclass\b/)) { .... }Если вы хотите место, которое показывает вам, как jQuery делает все, я бы предложил:
// 1. Use if for see that classes: if (document.querySelector(".section-name").classList.contains("section-filter")) { alert("Grid section"); // code... }<!--2. Add a class in the .html:--> <div class="section-name section-filter">...</div>
Я использую простое / минимальное решение, одну строку, кросс-браузер, а также работает с устаревшими браузерами:
/\bmyClass/.test(document.body.className) // notice the \b command for whole word 'myClass'этот метод является большим, потому что не требует полифиллы и если вы используете их для
classListэто гораздо лучше с точки зрения производительности. По крайней мере для меня.Update: я сделал крошечный полифилл, который является универсальным решением, которое я использую сейчас:
function hasClass(element,testClass){ if ('classList' in element) { return element.classList.contains(testClass); } else { return new Regexp(testClass).exec(element.className); } // this is better //} else { return el.className.indexOf(testClass) != -1; } // this is faster but requires indexOf() polyfill return false; }для других манипуляций с классом см. полный файл здесь.
функция hasClass:
HTMLElement.prototype.hasClass = function(cls) { var i; var classes = this.className.split(" "); for(i = 0; i < classes.length; i++) { if(classes[i] == cls) { return true; } } return false; };функция addClass:
HTMLElement.prototype.addClass = function(add) { if (!this.hasClass(add)){ this.className = (this.className + " " + add).trim(); } };функция removeClass:
HTMLElement.prototype.removeClass = function(remove) { var newClassName = ""; var i; var classes = this.className.replace(/\s{2,}/g, ' ').split(" "); for(i = 0; i < classes.length; i++) { if(classes[i] !== remove) { newClassName += classes[i] + " "; } } this.className = newClassName.trim(); };
хорошим решением для этого является работа с classList и содержит.
Я делал так:
... for ( var i = 0; i < container.length; i++ ) { if ( container[i].classList.contains('half_width') ) { ...Итак, вам нужен ваш элемент и проверьте список классов. Если один из классов совпадает с тем, который вы ищете, он вернет true, если нет, он вернет false!
Ну все вышеперечисленные ответы довольно хороши, но вот небольшая простая функция, которую я взбил. Это работает довольно хорошо.
function hasClass(el, cn){ var classes = el.classList; for(var j = 0; j < classes.length; j++){ if(classes[j] == cn){ return true; } } }
эта функция "hasClass" работает в IE8+, FireFox и Chrome:
hasClass = function(el, cls) { var regexp = new RegExp('(\s|^)' + cls + '(\s|$)'), target = (typeof el.className === 'undefined') ? window.event.srcElement : el; return target.className.match(regexp); }
что вы думаете о таком подходе?
<body class="thatClass anotherClass"> </body> var bodyClasses = document.querySelector('body').className; var myClass = new RegExp("thatClass"); var trueOrFalse = myClass.test( bodyClasses );
Comments