Wenn ich zum Beispiel das übergeordnete Element der 3. Ebene des Elements erhalten möchte, das ich schreiben muss. $('#element').parent().parent().parent()
Gibt es dafür eine optimalere Methode?
javascript
jquery
parent
Artur Keyan
quelle
quelle
Antworten:
Da parent () die Ahnenelemente zurückgibt, die von den nächstgelegenen zu den äußeren geordnet sind, können Sie sie in eq () verketten :
quelle
$('.element').first().parents().eq(num);
[2]
gibt das zugrunde liegende DOM-Element zurück, usingeq(2)
gibt ein jQuery-Objekt zurück.Abhängig von Ihren Anforderungen können Sie den Selektor .parents () verwenden, wenn Sie wissen, nach welchem Elternteil Sie suchen.
EG: http://jsfiddle.net/HenryGarle/Kyp5g/2/
Beispiel mit Index:
quelle
Sie können dem übergeordneten Ziel eine ID oder Klasse (z. B. myParent) geben, auf die verwiesen wird
$('#element').parents(".myParent")
quelle
Ein schnellerer Weg ist die direkte Verwendung von Javascript, z.
Dies läuft in meinem Browser erheblich schneller als das Verketten von jQuery-
.parent()
Aufrufen.Siehe: http://jsperf.com/jquery-get-3rd-level-parent
quelle
closest()
Ich habe keine Antwort mit gefunden und ich denke, es ist die einfachste Antwort, wenn Sie nicht wissen, wie viele Ebenen das erforderliche Element enthält. GebenSie daher eine Antwort: Sie können die
closest()
Funktion in Kombination mit Selektoren verwenden, um das erste passende Element zu erhalten beim Aufwärtsfahren vom Element nach oben:quelle
Es ist einfach. Benutz einfach
Dabei ist 0 die übergeordnete Ebene (0 ist die übergeordnete Ebene, 1 ist die übergeordnete Ebene der Eltern usw.)
quelle
Fügen Sie einfach einen
:eq()
Selektor wie folgt hinzu:Sie geben nur den Index an, welcher Elternteil: 0 für den unmittelbaren Elternteil, 1 für den Großelternteil, ...
quelle
Wenn Sie diese Funktionalität wiederverwenden möchten, besteht die optimale Lösung darin, ein jQuery-Plugin zu erstellen:
Natürlich können Sie es erweitern, um einen optionalen Selektor und andere solche Dinge zu ermöglichen.
Ein Hinweis: Dies verwendet einen
0
basierten Index für Eltern,nthParent(0)
ist also dasselbe wie das Aufrufenparent()
. Wenn Sie lieber eine1
basierte Indizierung haben möchten, verwenden Sien-- > 0
quelle
var p = 1 + n; while (p--) { $p = $p.parent(); }
und wenn Sie zu 1 wechseln möchten, wobei Javascript "falsey" ist, können Sie Folgendes verwenden:while (n--) { $p = $p.parent();}
Speichern eines bedingten SchecksnthParent(-2)
? Ihr Beispiel ist gebrochen.(function($) { $.fn.nthParent = function(n) { return $(this).parents().eq(n); }; }(jQuery));
parents
für Auswahlen mit mehr als einem Element falsch ist.var p = n >? (1 + n):1;
würde die Verwendung von stattdessen in diesem Fall eher das erste übergeordnete Element als "nichts" zurückgeben - oder wo es in meinem Beispiel die Schleife durchbricht. SO sollte es wahrscheinlich sein:(function($) { $.fn.nthParent = function(n) { var $p = $(this); if (!(n > -0)) { return $() }; var p = 1 + n; while (p--) { $p = $p.parent(); } return $p; }; }(jQuery));
wenn Sie nichts zurückgeben möchten.Wenn Sie ein gemeinsames übergeordnetes Div haben, können Sie den Link parentUntil () verwenden
z.B:
$('#element').parentsUntil('.commonClass')
Der Vorteil ist, dass Sie sich nicht daran erinnern müssen, wie viele Generationen zwischen diesem Element und dem gemeinsamen übergeordneten Element (definiert durch commonclass) vorhanden sind.
quelle
Sie können auch verwenden:
Beispiel:
$(this).ancestors().eq(2)
-> der Elternteil des Elternteils vonthis
.quelle
Sie könnten so etwas verwenden:
http://jsfiddle.net/Xeon06/AsNUu/
quelle
Die Verwendung von eq scheint das dynamische DOM zu erfassen, während die Verwendung von .parent (). parent () das ursprünglich geladene DOM zu erfassen scheint (falls dies überhaupt möglich ist).
Ich verwende sie beide für ein Element, auf das Klassen es bei onmouseover angewendet haben. Gleichung zeigt die Klassen, während .parent (). parent () dies nicht tut.
quelle
Da parent () eine Liste zurückgibt, funktioniert dies auch
quelle