web-dev-qa-db-ja.com

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

(これ)が使えないのはなぜですか?

6
curly_brackets

ドットはクラス名の一部ではありません。これは、CSS/jQueryセレクター表記でのみ使用されます。代わりにこれを試してください:

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

$(this)がそのアンカーを参照している場合、if条件にはjQueryコールバックスコープがないため、アンカーも$('#navigation a')に変更する必要があります。

29
BoltClock

または、次を使用することもできます。

if ($('#navigation a').is(".active")) {
    $(this).parent().addClass("active");
}
2
Marcus Whybrow

JQueryは何があるかわからないので、$(this)を使用することはできません。あなたは物事を複雑にしています。 $('#content h1.aktiv').hide()を実行できます。クラスが存在するかどうかをテストする理由はありません。

0
Bill Criswell

機能しない理由は、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
Marcus Whybrow

条件をif ($(this).hasClass('active'))に変更することをお勧めします

また、hasClassaddClassは、セレクターではなく、クラス名を取ります。
したがって、.を含めるべきではありません。

0
SLaks

誰かがWordPressを使用している場合は、次のようなものを使用できます。

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