Определите, есть ли у элемента класс CSS с помощью jQuery

173

Я работаю с jQuery и смотрю, есть ли простой способ определить, имеет ли элемент определенный класс CSS, связанный с ним.

У меня есть идентификатор элемента и класс CSS, который я ищу. Мне просто нужно иметь возможность в операторе if выполнять сравнение, основанное на существовании этого класса в элементе.

Митчел Селлерс
источник
1
Если вы хотите сделать это без jQuery, «hasClass» с javascript?
Ориоль

Ответы:

237

Используйте hasClassметод:

jQueryCollection.hasClass(className);

или

$(selector).hasClass(className);

Аргументом (очевидно) является строка, представляющая класс, который вы проверяете, и он возвращает логическое значение (поэтому он не поддерживает цепочку, как большинство методов jQuery).

Примечание. Если вы передадите classNameаргумент, содержащий пробелы, он будет сопоставлен буквально со classNameстрокой элементов коллекции . Так что, если, например, у вас есть элемент,

<span class="foo bar" />

тогда это вернется true:

$('span').hasClass('foo bar')

и они вернутся false:

$('span').hasClass('bar foo')
$('span').hasClass('foo  bar')
eyelidlessness
источник
4
Я не согласен. Документация организована по категориям, но вы можете легко увидеть все методы в алфавитном порядке. Все идет с примером, а в разделе комментариев, как правило, проясняется все, что упущено У jQuery есть МНОГО отличных функций и утилит, и для их изучения требуется некоторое обучение. Это имеет смысл, это определенно прошло долгий путь.
Трафальмадориан
1
@Trafalmadorian, я удалил свой оригинальный комментарий, потому что ситуация изменилась. Первоначально вы опубликовали все до -EDIT-, и я ответил, что мой комментарий о качестве документации больше не актуален, а относится к их предыдущей (MediaWiki) системе. Затем вы удалили свой предыдущий комментарий и отказались от использования -EDIT-. Я надеюсь, что эта очистка будет немного понятнее и меньше вводит в заблуждение будущих читателей.
век
@daniloquio, это если вы перейдете непосредственно к api.jquery.com ... по какой-то причине сайт все еще ссылается на ужасную вики-версию на docs.jquery.com
век
21

из FAQ

elem = $("#elemid");
if (elem.is (".class")) {
   // whatever
}

или:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}
Хавьер
источник
3
осторожно с .is () - «Метод is () в jQuery вернет true, если ЛЮБОЙ из элементов в текущей коллекции соответствует ЛЮБОМУ из элементов в коллекции на основе is» - bennadel.com/blog/…
zack
11

Что касается отрицания, если вы хотите знать, что элемент не имеет класса, вы можете просто сделать, как сказал Марк.

if (!currentPage.parent().hasClass('home')) { do what you want }
VinnyG
источник
3

Без jQuery:

var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1;

Или:

function hasClass(e,c){
    return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1);
}
/*example of usage*/
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium');

Это намного быстрее, чем jQuery!

Исмаэль Мигель
источник
почему вы делаете ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1), а не только &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Блекси
1
Потому что indexOfвозврат -1это класс не существует. Если бы я сделал !!-1, это было бы true. Так как я делаю !!-1+1, это будет ложным. Лучше было бы ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), но я не помнил этого в то время.
Исмаэль Мигель
Извините, я имел в виду...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Исмаэль Мигель
3

В интересах помочь любому, кто приземлится здесь, но на самом деле ищет jQuery бесплатный способ сделать это:

element.classList.contains('your-class-name')
Дерек Экинс
источник
0
 $('.segment-name').click(function () {
    if($(this).hasClass('segment-a')){
        //class exist
    }
});
Vineet
источник
0

В моем случае я использовал функцию «is» jQuery, у меня был HTML-элемент с добавленными различными классами CSS, в середине я искал определенный класс, поэтому я использовал «is» хорошую альтернативу для проверки класс, динамически добавляемый в элемент HTML, который уже имеет другие классы CSS, это еще одна хорошая альтернатива.

простой пример:

 <!--element html-->
 <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

 <!--jQuery "is"-->
 $('#menu').is('.cbp-spmenu-open');

расширенный пример:

 <!--element html-->
    <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

   <!--jQuery "is"-->
    if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){
       $("#menu").show();
    }
Эдуардо Пас
источник