2011-01-04 7 views
0

Kann jQuery eine "if" -Funktion ausführen? Wie in, wenn eine Klasse in einem Menüelement vorhanden ist, wenden Sie diese Klasse auf einen anderen Menüeintrag an? Dies unterscheidet sich geringfügig von der üblichen aktiven Seitenmenü-Hervorhebung, da es sich um aktive Dropdown-Menüs und untergeordnete Seiten handelt.Kann jQuery eine if-Anweisung ausführen?

Was würde Ich mag zu tun ist,

(the usual suspect) $(document).ready(function() { 

If ...

$('#menu-main-menu li.menu-item-1061') "contains the classes 
current-menu-ancestor current-menu-parent" 

    then add those same classes to, i.e.: 

    $('#menu-main-menu li.menu-item-1099').addClass('current-menu-ancestor 
current-menu-parent') 

}); }); 

Sollte eine Möglichkeit für diese zu arbeiten ....

Antwort

9

jQuery ist kein Sprache, es ist eine Bibliothek für JavaScript. Die Antwort ist: "Ja, JavaScript hat if Anweisungen als Teil der Sprache."

Ich verstehe nicht die Pseudo-Logik, die Sie geschrieben haben. Was meinst du mit "Wenn [irgendein Listenelement] 'die Klassen' [foo] [bar]" enthält? Wenn das Listenelement diese beiden Klassen enthält? Einer dieser Klassen? Oder wenn das Listenelement einen Nachkommen mit mindestens einer dieser Klassen hat? Oder wenn das Listenelement einen oder mehrere Nachkommen mit all diesen Klassen hat?

Hier wird mit einer Lösung, die eine Interpretation:

jQuery(function($){ 
    var li = $('#menu-main-menu li.menu-item-1061'); 
    if (li.find('.current-menu-ancestor, .current-menu-parent').length){ 
    // do whatever you want here. 
    } 
}); 
+0

hilft Es ist „pseudo-Logik“, weil das der einzige Weg ist, ich weiß, wie es zu beschreiben. Sieht so aus, als würde das funktionieren, aber ich habe am Ende einen anderen Weg gefunden, um das zu erreichen, was ich mit einer anderen PHP-Funktion brauchte, um die Body-Klasse der Seite zu bestimmen und dann die add.Class auszulösen. – markratledge

2

Nur eine richtige if Aussage über die Existenz dieses machen?

$('#menu-main-menu li.menu-item-1061.current-menu-ancestor.current-menu-parent') 
2

Wie erwähnt, if ein Konstrukt von JavaScript ist, nicht jQuery im Besonderen. Ich denke, was Sie suchen, ist die jQuery-Funktion hasClass, die DOM-Elemente gegen den Namen einer Klasse überprüfen kann und true zurückgibt, wenn das Element derzeit diese Klasse hat.

Sie können es wie folgt verwenden:

if (myElement.hasClass("myClass")) { 
    // do something 
} 

Im Inneren des if Konstrukt, können Sie den Code einfügen, um die Klassen zu den anderen Elementen hinzufügen möchten.

Aktualisiert: „hat eine Reihe von Elementen gegen diesen Wähler abgestimmt haben die Klassen current-menu-ancestor und current-menu-parent Ihr Beispiel ein bisschen seltsam ist, dass Sie scheinen zu wollen, zu fragen, Das ist seltsam, weil Sie einen Satz von Elementen zusammenpassen (Ihr spezifischster Selektor ist eine Klasse, kann also mehr als einen Gegenstand zurückgeben). Es scheint, dass Sie möglicherweise einen Designfehler in Ihrem HTML/CSS haben, da die Klasse klingt, als sollte es eine ID sein (es ist einzigartig), keine Klasse. Wie auch immer, die hasClass Funktion funktioniert immer noch für Sie, da sie true zurückgibt, wenn eine der übereinstimmenden Elemente die Klasse haben.

+0

Danke, ich werde mehr in hasClass sehen müssen. Der Code stammt aus einem von Wordpress generierten Menü und behandelt verschiedene Arten von aktiven Menüelementen und untergeordneten Seiten. – markratledge

2

Javascript kann if Anweisung, führen aber in jQuery können Sie is Funktion um zu bestimmen, benutzen, wenn ein jQuery-Objekt einen anderen Ausdruck passen.

zum Beispiel, haben Sie das jQuery-Objekt

var firstObj = $(".selector1") 

und Sie wollen testen, ob irgendein des Elements diesen Ausdruck passen

".selector2" 

dann können Sie is verwenden als

firstObj.is(".selector2") 
folgt

Wenn ein Element passt, ist die Antwort 'wahr', andernfalls 'falsch'. so können Sie mit Javascript des Mähdreschers if wie

folgt
if (firstObj.is(".selector2")){ 
    // you can do something here 
} 

hoffen, dass es

+0

Danke, scheint so zu funktionieren. Ich habe mit php und add.Class etwas anderes gemacht. – markratledge

Verwandte Themen