2013-02-09 10 views
10

Ich habe einen Code mit vielen Untermenüs, die den gleichen Klassennamen teilen.Gegenüber von jQuery. Schließen (Top/Weit-Most?)

Hier ist eine Struktur:

.menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
     .elem 
     .elem 
    .sub-menu 

Beachten Sie, dass .sub-menu tief endlose Ebenen sein kann.

Also wie erreiche ich das: wenn .elem angeklickt wird, möchte ich das DOM nach oben durchlaufen, bis die oberste .sub-menu erreicht ist und einen Stil darauf anwenden. Ich kenne und .parent() und .find(), aber ich habe keine Ahnung, ob jQuery solche Funktion wie .topMost(selector) hat?

Der einzige Weg, an den ich denken kann, ist vielleicht eine Schleife laufen und durch .closest('.sub-menu') des neuen Elements gehen, bis seine Länge Null ist (es gibt keine Eltern mit dieser Klasse, also muss es die oberste sein). Ich denke jedoch, dass es einen praktischeren Ansatz geben sollte.

Antwort

19

Unter der Annahme von ‚Gegenteil von den am nächsten‘ wollen Sie das ‚am weitesten‘ Eltern-Elemente, können Sie parents().last() wie folgt verwenden:

$('.elem').click(function() { 
    var $topSubMenu = $(this).parents('.sub-menu').last(); 
}); 

Hinweis, Sie das letzte Element im Array wollen wie jQuery up durchläuft die DOM, also wird das oberste Element das letzte in der Sammlung sein.

21

Die Frage ist leicht irreführend als. closest() könnte falsch interpretiert werden. Eigentlich heißt es, den Baum aufzusuchen, bis das erste gefunden ist. Das Gegenteil ist die Suche im Baum, bis eine Übereinstimmung gefunden wird und diese Methode ist. first().

Zu finden alle Nachkommen könnte man find() verwenden. Das Gegenteil von find() ist parents().

am nächsten() (alle Ebenen) Für jedes Element in dem Satz, das erste Element erhalten, das durch Testen des Element selbst die Wähler übereinstimmt und im DOM-Baum durch seine Vorfahren durchlaufen werden.

First() (alle Stufen) Reduzieren des Satzes von abgestimmten Elementen an den ersten in dem Satz

Eltern() (alle Ebenen) Holen die Vorfahren jedes Elements in der aktuellen Gruppe von übereinstimmenden Elementen, optional gefiltert durch einen Selektor.

parent() (nächste Ebene nur) Holen der übergeordneten jedes Element in dem aktuellen Satz von abgestimmten Elementen, die gegebenenfalls durch einen Selektor filtriert.

find() (alle Stufen) Liefert die Abkömmlinge jedes Element in dem aktuellen Satz von abgestimmten Elementen, durch einen Selektor gefiltert, jQuery Objekt oder Element.

+0

Fühlen Sie sich frei, den Titel zu einem geeigneteren zu redigieren, wenn Sie denken, dass es den Zweck der Frage für zukünftige Leser klären wird. –

+0

Ich bin damit cool. Es ist was ich gegoogelt habe. Einfach gepostet für zukünftige Referenz :) –

+3

Dies ist falsch in Bezug auf find() ist das Gegenteil von engsten(). find() findet alle Elemente im Baum. Das Gegenteil von engsten(), nach unten suchen, wäre find(). First(). –