Визначте, чи має елемент клас 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')

4
Я не погоджуюсь. Документація організована за категоріями, але ви також можете легко побачити всі методи в алфавітному порядку. Все подається з прикладом, і розділ коментарів зазвичай очищає все, що залишилося. jQuery має багато відмінних функцій та утиліт, і для їх виявлення потрібне певне навчання. -EDIT- Це має сенс, це, безумовно, довгий шлях.
Трафальмадоріан

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 повернеться істинним, якщо БУДЬ-які елементи в поточній колекції збігаються з будь-якими елементами колекції на основі" - bennadel.com/blog/…
zack

11

Що стосується заперечення, якщо ви хочете дізнатися, чи не має елемент клас, ви можете просто зробити так, як сказав Марк.

if (!currentPage.parent().hasClass('home')) { do what you want }

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+' ')?
Blexy

1
Тому що indexOfreturn -1- клас не існує. Якби я !!-1це зробив би true. Оскільки я це роблю !!-1+1, це буде помилково. Кращий спосіб був би ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), але я цього не пам’ятав.
Ісмаїл Мігель

Вибачте, я мав на увазі...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ісмаель Мігель

3

В інтересах допомогти кожному, хто приземлився тут, але насправді шукав безкоштовний спосіб jQuery:

element.classList.contains('your-class-name')



0

У моєму випадку я використовував функцію 'is' jQuery, у мене був доданий HTML-елемент із різними класами css, я шукав конкретний клас посеред них, тому я використав гарну альтернативу для перевірки "є" клас, що динамічно додається до 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();
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.