Если hasClass, то addClass для родителя - PullRequest
6 голосов
/ 17 ноября 2010

Исходное сообщение: Почему этот простой скрипт не работает?

if ($('#navigation > ul > li > ul > li > a').hasClass('.active')) {
    $(this).parent().parent().parent().addClass(".active");
}

РЕДАКТИРОВАТЬ:

Это не скроетH1:

if ($('#content h1').hasClass('aktiv')) {
    $(this).hide();
}

Только так будет:

if ($('#content h1').hasClass('aktiv')) {
    $('#content h1').hide();
}

Почему я не могу использовать (это)?

Ответы [ 6 ]

29 голосов
/ 17 ноября 2010

Точка не является частью имени класса. Он используется только в нотации селектора CSS / jQuery. Попробуйте вместо этого:

if ($('#navigation a').hasClass('active')) {
    $(this).parent().addClass('active');
}

Если $(this) ссылается на этот якорь, вы должны также изменить его на $('#navigation a'), поскольку условие if не имеет области обратного вызова jQuery.

2 голосов
/ 17 ноября 2010

В качестве альтернативы вы можете использовать:

if ($('#navigation a').is(".active")) {
    $(this).parent().addClass("active");
}
0 голосов
/ 11 февраля 2017

Если кто-то использует WordPress, вы можете использовать что-то вроде:

if (jQuery('.dropdown-menu li').hasClass('active')) {
    jQuery('.current-menu-parent').addClass('current-menu-item');
}
0 голосов
/ 18 ноября 2010

Причина, по которой это не работает, заключается в том, что this не имеет конкретного значения внутри оператора if, вам придется вернуться к уровню области действия, где определено this (функция).

Например:

$('#element1').click(function() {
    console.log($(this).attr('id')); // logs "element1"

    if ($('#element2').hasClass('class')) {
        console.log($(this).attr('id')); // still logs "element1"
    }
});
0 голосов
/ 18 ноября 2010

Вы не можете использовать $(this), так как jQuery не знает, что это там. Вы, кажется, усложняете вещи. Вы можете сделать $('#content h1.aktiv').hide(). Нет причин проверять, существует ли класс.

0 голосов
/ 17 ноября 2010

Возможно, вы захотите изменить условие на if ($(this).hasClass('active'))

Также hasClass и addClass принимают имен классов , а не селекторы.
Поэтому вам не следуетвключает ..

...