2017-02-22 7 views
2

Я пытаюсь сделать следующее:.hasClass() не функция?

$('.myEm').closest('.area').hasClass('medium').toggleClass('large-4 large-12'); 

Но я получаю сообщение об ошибке говорящее .hasClass не является функцией. Что мне не хватает?

+1

Если 'jQuery' ничего не находит для' .closest() ', то вы на самом деле вызываете' .hasClass() 'на объект не jquery –

ответ

7

Вы не можете цеплять другие методы после .hasClass() method вот так.

.hasClass() method возвращает логическое значение, основанное на том, имеет ли селектор jQuery определенный класс. Похоже, что вы ищете .has() method, который будет фильтровать коллекцию элемента (ов) на основании того, имеет ли он конкретный потомок элемент, соответствующий селектор:

$('.myEm').closest('.area').has('.medium').toggleClass('large-4 large-12'); 

... или вы могли бы использовать в качестве :has() selector хорошо:

$('.myEm').closest('.area:has(.medium)').toggleClass('large-4 large-12'); 

причина вы можете цепи большинство других методов JQuery, потому что они возвращают jQuery object. Если вы проверяете документацию по любому методу или селектору jQuery, и вы можете определить тип возврата (который укажет, можно ли впоследствии связать дополнительные методы). Как уже упоминалось выше, метод .hasClass() не возвращает объект JQuery, он возвращает true/false, поэтому вы видите следующее сообщение об ошибке о том, что она не является функцией:

Uncaught TypeError: $(...).closest(...).hasClass(...).toggleClass is not a function

+0

Спасибо. Быстрый вопрос: «средний» - это класс. Мне не нужно иметь период до него, как в .has ('. Medium') – santa

+0

@santa - Да, обновлено. Хороший улов. –