Подтвердить что ты не робот

Проверьте, имеет ли какой-либо предок класс с использованием jQuery

Есть ли какой-либо способ в jQuery, чтобы проверить, есть ли у какого-либо родителя, прародителя, праведного родителя класс.

У меня есть структура разметки, которая оставила меня делать такие вещи в коде:

$(elem).parent().parent().parent().parent().hasClass('left')

Однако, для чтения кода я хотел бы избежать такого рода вещей. Есть ли способ сказать: "у любого родителя/прародителя/праведного родителя есть этот класс"?

Я использую jQuery 1.7.2.

4b9b3361

Ответ 1

if ($elem.parents('.left').length) {

}

Ответ 2

Существует множество способов фильтрации для предков элементов.

if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents().hasClass('parentClass')) {/*...*/}
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/}
if ($elem.is('.parentClass *')) {/*...*/} 

Остерегайтесь, closest() метод включает сам элемент, проверяя селектор.

В качестве альтернативы, если у вас есть уникальный селектор, соответствующий $elem, например #myElem, вы можете использовать:

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}

Если вы хотите сопоставить элемент, зависящий только от своего класса-предка, только для использования стиля CSS:

.parentClass #myElem { /* CSS property set */ }

Ответ 3

Вы можете использовать метод parents с указанным селектором .class и проверить, соответствует ли какое-либо из них:

if ($elem.parents('.left').length != 0) {
    //someone has this class
}