@bjorn-mozyakin

Существует ли аналог нативного js-метода elem.classList.contains("class") на JQuery?

В нативном Javascript есть метод elem.classList.contains("test-class"), который возвращает true/false в зависимости от того, есть ли класс ("test-class") у элемента (elem) ИЛИ его потомков.

Есть ли аналог такого метода на JQuery?

На данный момент приходится использовать два отдельных метода:
$(elem).hasClass('test-class') - чтобы узнать, есть ли класс у самого элемента
и, например,
$(elem).find('test-class').length (или через children) - чтобы узнать, есть ли класс у потомков/детей

Подозреваю, что метод должен быть (есть же метод closest, делающий то же самое в обратную сторону). Но не могу найти ничего подходщего...
  • Вопрос задан
  • 2030 просмотров
Пригласить эксперта
Ответы на вопрос 4
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
В нативном Javascript есть метод elem.classList.contains("test-class"), который возвращает true/false в зависимости от того, есть ли класс ("test-class") у элемента (elem) ИЛИ его потомков.

Вы ошибаетесь.
Соответственно, альтернатива classList.contains - hasClass.
Ответ написан
Stalker_RED
@Stalker_RED
.closest('.test') возвращает не false, а ищет ближайшего родителя подходящего под описание, и возвращает объект.

.children() ищет только на один уровень вниз.

Похоже, что готового метода нет, но его не сложно добавить:
jQuery.fn.anyBodyHome = function (selector) {
    return this.is(selector) ? this
        : this.find(selector).first()
}

Пример с тестами: jsfiddle.net/1xjcbdgd

Если нужно именно true/false то
return this.is(selector) || this.find(selector).length > 0
Ответ написан
MDN
contains ( String ) Проверяет, есть ли данный класс у элемента (вернет true или false)
Ничего про потомков не сказано
Ответ написан
Чтобы не вызывать 2 метода можно вызвать второй метод от родителя текущего объекта : )
$(elem).parent().find('test-class').length
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
22 мая 2024, в 07:09
50000 руб./за проект
22 мая 2024, в 02:15
10000 руб./за проект
21 мая 2024, в 23:47
30000 руб./за проект