2010-11-17 4 views
6

Ursprünglicher Beitrag: Warum funktioniert dieses einfache Skript nicht?Wenn hasClass dann addClass zum übergeordneten

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

EDIT:

Dies wird die H1 nicht verbergen:

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

Nur dies:

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

Warum kann ich nicht verwenden, um die (das)

Antwort

24

Der Punkt ist nicht Teil des Klassennamens. Es wird nur in der CSS/jQuery-Selektornotation verwendet. Versuchen Sie stattdessen:

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

Wenn $(this) zu diesem Anker verweist, müssen Sie es auch zu $('#navigation a') ändern, da die, wenn die Bedingung nicht jQuery Rückruf Umfang hat.

0

Sie wollen wahrscheinlich die Bedingung if ($(this).hasClass('active'))

auch ändern, hasClass und addClass nehmen Klassennamen, nicht Selektoren.
Daher sollten Sie keine . einschließen.

+0

Ich habe Probleme mit meinem (this) ... frage mich, warum ... –

2

Alternativ können Sie verwenden:

if ($('#navigation a').is(".active")) { 
    $(this).parent().addClass("active"); 
} 
+0

+ 1 für 'is()', aber 'addClass()' muss immer noch den Punkt löschen. – BoltClock

+0

Ah guter Platz, ich werde die Änderung vornehmen –

+0

Ahh .. Wusste nicht über diesen Punkt. Siehe meinen bearbeiteten Post. –

0

Sie nicht $(this) da jQuery weiß es nicht verwenden können, was es gibt. Du scheinst Dinge zu komplizieren. Sie können $('#content h1.aktiv').hide() tun. Es gibt keinen Grund zu testen, ob die Klasse existiert.

+0

Ich brauche ein Skript, das herausfindet, ob es ein Objekt mit der Klasse ".aktiv" gibt. Wenn die Klasse gefunden wird, sollte der Elternelternteil die gleiche Klasse erhalten. Der bearbeitete Teil, mit dem if-Satz, ist nur etwas, worüber ich gestolpert bin - ein Käfer, wenn du magst, dass ich dich nur hören wollte. –

+1

Sie können $ ('# content h1.aktiv'). Parent(). Parent(). AddClass ('aktiv') ohne Bedingungen. –

0

Der Grund, der nicht funktioniert, ist, weil this keine spezifische Bedeutung innerhalb einer if-Anweisung hat, müssen Sie zurück zu einer Ebene des Geltungsbereichs, wo this definiert ist (eine Funktion).

Zum Beispiel:

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

    if ($('#element2').hasClass('class')) { 
     console.log($(this).attr('id')); // still logs "element1" 
    } 
}); 
0

Wenn jemand Wordpress verwenden, können Sie so etwas wie verwenden:

if (jQuery('.dropdown-menu li').hasClass('active')) { 
    jQuery('.current-menu-parent').addClass('current-menu-item'); 
} 
Verwandte Themen