2016-04-11 10 views
0

Ich habe ein Caret nach unten auf meinem Nav-Element und sobald das Nav-Element angeklickt ist, zeigt es das Dropdown-Menü und dreht das Caret 180 und zeigt es auf. Das einzige Problem ist, wenn Sie auf einen anderen Nav-Eintrag klicken, wird das Dropdown-Menü ausgeblendet, aber der Caret bleibt nach oben gerichtet. Dies ist die Javascript-iJavascript Dropdown-Menü Caret Drehen

bin mit
$('.nav li a').click(function() { 
    $(this).children('.caret').toggleClass("rotate-180"); 
}); 

Gibt es eine Möglichkeit die Einfügemarke zu drehen wieder einmal nach unten zeigt ein anderes nav Element geklickt wurde?

Antwort

4

Ihre HTML nicht gesehen haben, ist das, was ich kam mit:

$('.nav li a').click(function() { 
    $(this).children('.caret').toggleClass("rotate-180"); 
    $(this).closest('.nav').find('li a').not(this).children('.caret').removeClass("rotate-180"); 
}); 
+0

Nizza. Liebe die Verwendung von '.not (this)'. Wahrscheinlich ist das egal, aber '.children ('. Caret')' wäre genauer zum ursprünglichen Aufruf von '.toggleClass()' –

+0

schaue auf meine Option - tut das auch – gavgrif

+1

@JosephMarikle Ich war nur Ich habe mein Beispiel gelesen und dachte dasselbe: D aktualisiert – vahanpwns

1

, ohne den Code tthis zu sehen vielleicht nicht die beste Lösung sein, aber Sie können eine .removeClass() Funktion vor dem hinzufügen toggleClass, um alle Einträge zuerst auf die untere Position zurückzusetzen und dann die gewünschte zu drehen.

$('.nav li a').click(function() { 
     $('.nav li a .caret').removeClass("rotate-180"); 
     $(this).children('.caret').addClass("rotate-180"); 
    }); 
+0

Wenn es ein anderes '.nav' auf der Seite gibt, wird bei ausgewählten Elementen darin '.rotate-180' entfernt Gut. Ich bin mir nicht sicher, ob das das beabsichtigte Verhalten ist: S – vahanpwns

+0

Das könnte ein Problem haben, oder? Szenario: Ausgewählt 'a' hat' .caret' mit einer Klasse 'rotate-180', Sie klicken es erneut, Sie durchlaufen diesen Prozess: ' $ ('. Nav li a .caret'). RemoveClass (" rotate-180 ")' - Entfernt die Klasse '$ (this) .children ('. caret'). toggleClass (" rotate-180 ")' - Fügt die Klasse hinzu Und es geht umgekehrt .. –

+0

@ Ilija Lončarević- behoben – gavgrif

1
$('.nav li a').click(function() { 
    if($(this).hasClass('rotate-180')) { 
     $('.nav li a .caret').removeClass('rotate-180'); 
    } else { 
     $('.nav li a .caret').removeClass('rotate-180'); 
     $(this).children('.caret').addClass("rotate-180"); 
    } 
}); 
+1

'removeClass' wird immer verwendet. Sie sollten es vor dem if verschieben. Ändere auch 'if ($ (this ...' to 'if (! $ (this ...') und entferne das else. Das heißt wenn nicht hasclass, dann tu es – vahanpwns

0

Sind Sie sicher, dass Sie Klassen wechseln müssen? Bootstrap macht das wahrscheinlich schon für dich. Zum Beispiel fügen Bootstrap-Dropdown-Listen eine open-Klasse zum Dropdown-Container div hinzu. Sie können ganz einfach ein Nachkomme Stil für diese Situation schaffen:

.dropdown.open .caret { transform: rotate(180deg); }