Как вы делаете JQuery hasClass
с простым старым JavaScript? Например,
<body class="foo thatClass bar">
Какой способ спросить JavaScript, если <body>
есть thatClass
?
javascript
dom
рукав моря
источник
источник
class
свойство (которое в случае нескольких классов будет иметь несколько имен классов в случайном порядке, разделенных пробелом) и проверить, есть ли в нем имя вашего класса. Не очень сложно, но все равно ужасно неудобно, если не в учебных целях :)Ответы:
Вы можете проверить,
element.className
соответствует ли/\bthatClass\b/
.\b
соответствует разрыву слова.Или вы можете использовать собственную реализацию jQuery:
Чтобы ответить на более общий вопрос, вы можете взглянуть на исходный код jQuery на github или на источник
hasClass
специально для этого средства просмотра исходного кода .источник
rclass
самом деле;))\b
соответствовать "thatClass-anotherClass"?/[\t\r\n\f]/g
. Также стоит упомянуть, что/\bclass\b/
может произойти сбой для имен классов со-
знаком минус (кроме того, что он работает хорошо), поэтому реализация jQuery лучше и надежнее. Например:/\bbig\b/.test('big-text')
возвращает true вместо ожидаемого false.Просто используйте
classList.contains()
:Другое использование
classList
:Поддержка браузера:
classList
Поддержка браузераисточник
.classList
как строка, но он не распознает более современные методы, такие как.classList.contains()
Самый эффективный лайнер, который
thisClass
элемента, который имеетclass="thisClass-suffix"
.источник
Атрибут , который хранит классы в использовании является
className
.Итак, вы можете сказать:
Если вы хотите местоположение, которое показывает вам, как jQuery делает все, я бы предложил:
http://code.jquery.com/jquery-1.5.js
источник
match
Атрибут удобен снова! Действительно ли jQuery делает что-то большее, чем это возможно в JavaScript ?! Если нет, то jQuery - просто лишний вес сокращений.myclass-something
, как\b
соответствует дефису.источник
Функция hasClass:
Функция addClass:
функция removeClass:
источник
Я использую простое / минимальное решение, одну строку, кросс-браузер, а также работает с устаревшими браузерами:
Этот метод хорош, потому что не требует полифилов, и если вы используете их для
classList
него, он намного лучше с точки зрения производительности. По крайней мере для меня.Обновление: я сделал крошечный полифилл, это универсальное решение, которым я сейчас пользуюсь:
Для других манипуляций с классами, смотрите полный файл здесь .
источник
notmyClassHere
?!/myClass/.test(document.body.className)
обратите внимание на!
символ.thisIsmyClassHere
.Хорошим решением для этого является работа с classList и содержит.
я сделал это так:
Итак, вам нужен ваш элемент и проверьте список классов. Если один из классов совпадает с тем, который вы ищете, он вернет true, если нет - false!
источник
Используйте что-то вроде:
источник
myHTMLSelector.classList.indexOf('the-class')
? Разве вы не хотите>=0
в конце?[].indexOf
еслиclassList
естьcontains
метод?myHTMLSelector.classList.indexOf('the-class')
возвращает ошибку,myHTMLSelector.classList.indexOf is not a function
потому чтоmyHTMLSelector.classList
это не массив. Но я думаю, что при вызове с использованиемArray.prototype
какого-либо преобразования происходит. Это может поддерживать старый браузер, ноcontains
имеет очень хорошую поддержку.источник
Эта функция hasClass работает в IE8 +, FireFox и Chrome:
источник
Ну, все вышеприведенные ответы довольно хороши, но вот небольшая простая функция, которую я выбрал. Это работает довольно хорошо.
источник
classList
естьcontains
метод?Что вы думаете об этом подходе?
https://jsfiddle.net/5sv30bhe/
источник
class="nothatClassIsnt"
?Вот самый простой способ:
источник