Gibt es eine ähnliche Funktion wie das jQuery
.closest()
Durchqueren von Nachkommen und das Zurückgeben nur der nächsten?
Ich weiß, dass es eine .find()
Funktion gibt, aber sie gibt alle möglichen Übereinstimmungen zurück, nicht die nächsten.
Bearbeiten:
Hier ist die Definition von am nächsten (zumindest für mich) :
Zuerst werden alle Kinder durchquert, dann werden die einzelnen Kinder durchquert.
In dem unten angegebenen Beispiel sind die id='2'
nächsten .closest
Nachkommen vonid="find-my-closest-descendant"
<div id="find-my-closest-descendant">
<div>
<div class="closest" Id='1'></div>
</div>
<div class="closest" Id='2'></div>
</div>
Bitte beachten Sie den JSfiddle-Link .
.find("filter here").eq(0)
?:first
Filter?Antworten:
Gemäß Ihrer Definition von
closest
habe ich das folgende Plugin geschrieben:quelle
.closest()
Funktion entspricht diese auch dem Element, für das sie aufgerufen wurde. Siehe meine jsfiddle . Wenn Sie$currentSet = this.children(); // Current place
es ändern, beginnen Sie mit den Kindern stattdessen jsfiddleWenn Sie mit "nächstgelegenem" Nachkommen das erste Kind meinen, können Sie Folgendes tun:
Oder:
Um nach dem ersten Auftreten eines bestimmten Elements zu suchen, können Sie Folgendes tun:
Oder:
Wirklich, wir brauchen eine solide Definition dessen, was "nächster Nachkomme" bedeutet.
Z.B
Welches
<span>
würde$('#foo').closestDescendent('span')
zurückkehren?quelle
$('#foo').find('.whatever').first();
"Breite zuerst" oder "Tiefe zuerst" istSie können
find
mit dem:first
Selektor verwenden:In der obigen Zeile finden Sie das erste
<p>
Element in den Nachkommen von#parent
.quelle
find('whatever:first')
.Was ist mit diesem Ansatz?
Dieser "Direktkind" -Selektor funktioniert für mich.
quelle
Reine JS-Lösung (mit ES6).
Beispiel
Betrachtet man die folgende Struktur:
Code-Snippet anzeigen
quelle
while
Ausdruck hat Nebenwirkungen. 2) Verwenden Sie den.matches
Scheck auf zwei Zeilen anstatt nur auf einer.Für den Fall, dass jemand nach einer reinen JS-Lösung sucht (mit ES6 anstelle von jQuery), verwende ich Folgendes:
quelle
matches
wenn ich auf meine zurückblicke, fühlt es sich so an, als würde es versuchen, zu klug und tatsächlich umständlich zu sein ( zweimal zu laufen ärgert mich auch ziemlich). +1 für Sie :)Ich denke, dass man zuerst definieren muss, was "am nächsten" bedeutet. Wenn Sie meinen, dass der Nachkommenknoten Ihren Kriterien entspricht und in Bezug auf die elterlichen Verbindungen die kürzeste Entfernung entfernt ist, funktioniert die Verwendung von ": first" oder ".eq (0)" nicht unbedingt:
In diesem Beispiel ist das zweite ".target"
<span>
-Element "näher" am "Start"<div>
, da es nur einen elterlichen Sprung entfernt ist. Wenn Sie das mit "am nächsten" meinen, müssen Sie den Mindestabstand in einer Filterfunktion ermitteln. Die Ergebnisliste eines jQuery-Selektors befindet sich immer in DOM-Reihenfolge.Vielleicht:
Das ist eine Art Hack-Plugin, weil es das Ergebnisobjekt erstellt, aber die Idee ist, dass Sie aus allen übereinstimmenden Elementen, die Sie finden, den kürzesten elterlichen Pfad finden müssen. Dieser Code wird aufgrund der
<
Prüfung in Richtung der Elemente im DOM-Baum nach links verschoben.<=
würde nach rechts voreingenommen sein.quelle
Ich habe mir das ausgedacht, noch keine Implementierung für Positionsselektoren (sie brauchen mehr als nur
matchesSelector
):Demo: http://jsfiddle.net/TL4Bq/3/
Es gibt wahrscheinlich einige Fehler, die nicht sehr oft getestet wurden.
quelle
Rob Ws Antwort hat bei mir nicht ganz funktioniert. Ich habe es daran angepasst, was funktioniert hat.
quelle
.find(filter).first()
, nur langsamer;)Ich würde Folgendes verwenden, um das Ziel selbst einzuschließen, wenn es mit dem Selektor übereinstimmt:
Markup:
quelle
Obwohl es ein altes Thema ist, konnte ich nicht widerstehen, mein engstes Kind zu implementieren. Liefert den ersten gefundenen Nachkommen mit der geringsten Reise (Atem zuerst). Einer ist rekursiv (persönlicher Favorit), der andere verwendet eine Aufgabenliste, also ohne Rekursion als jQquery-Erweiterungen.
Hoffe, jemand profitiert.
Hinweis: Die Rekursive wird gestapelt, und ich habe die andere verbessert, die jetzt der vorherigen Antwort ähnelt.
quelle
Das folgende Plugin gibt die n-ten nächsten Nachkommen zurück.
quelle
Ich suchte nach einer ähnlichen Lösung (ich wollte alle engsten Nachkommen, dh zuerst die Breite + alle Übereinstimmungen, unabhängig davon, welches Level es gibt). Am Ende habe ich Folgendes getan:
Ich hoffe das hilft.
quelle
Sie können einfach sagen,
quelle
Es gibt einen ausgezeichneten Artikel, der darauf hinweist, dass das, was das OP erfordert, leicht mit den engsten [Geeks for Geeks]
1 erreicht werden kann. 1 https://www.geeksforgeeks.org/jquery-closest-with-examples/
quelle
Sie haben viele Möglichkeiten, aber
$("#parent").children(".child");
das Fastet ist. Überprüfen Sie diesen Artikel für Details und Benchmarkquelle