Если hasClass, то addClass к родителю

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

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();
}

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


person curly_brackets    schedule 17.11.2010    source источник


Ответы (6)


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

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

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

person BoltClock    schedule 17.11.2010

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

if ($('#navigation a').is(".active")) {
    $(this).parent().addClass("active");
}
person Marcus Whybrow    schedule 17.11.2010
comment
$('#navigation a.active').parent().parent().addClass('active') сделает то же самое. Условие — это то, что можно обрабатывать с помощью селектора. - person Bill Criswell; 19.11.2010

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

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

person SLaks    schedule 17.11.2010

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

person Bill Criswell    schedule 17.11.2010
comment
Мне нужен скрипт, который определяет, есть ли объект с классом .aktiv. Если класс найден, родительский родительский элемент должен получить тот же класс. Отредактированная часть с предложением if - это просто то, на что я наткнулся - ошибка, если хотите, которую я просто хотел услышать от вас, ребята. - person curly_brackets; 19.11.2010
comment
Вы можете сделать $('#content h1.aktiv').parent().parent().addClass('aktiv') без условных выражений. - person Bill Criswell; 19.11.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"
    }
});
person Marcus Whybrow    schedule 17.11.2010

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

if (jQuery('.dropdown-menu li').hasClass('active')) {
    jQuery('.current-menu-parent').addClass('current-menu-item');
}
person Edgar Quintero    schedule 11.02.2017