die Auswahl des root-Elements in jquery
Ich in der Lage sein müssen wählen Sie das root-element von einem fragment, ohne zu wissen, die Arten von Knoten, Klassen -, id-oder Hierarchie.
<div id="0">
<div id="0a">
<div id="a01"></div>
</div>
<div id="0b">
</div>
<div id="0c">
</div>
</div>
Ich möchte in der Lage sein, etwas zu tun, wie $('root') und 0 im Beispiel oben gewählt.
Besser, trotzdem würde ich lieber $(':level(0)')
was bedeuten würde, das gleiche wie oben, $(':level(1)')
auswählen würde, 0a, 0b und 0c und $(':level(1)>div')
auswählen würde a01.
Irgendwelche Ideen auf, wie man es sauber?
- gibt es irgendwelche Eigenschaften, die Sie wissen lassen, was ist das 'root' - element in Ihrem Fall? sprich, was hindert Sie durchqueren, um welches element <div id="0"> enthalten ist?
- Definieren Sie "root-element" in deinem Beispiel.
- Wie in der äußersten element, in diesem Fall
<div id="0">
- das äußerste element, was? Wenn Sie halten diese Struktur als dom-element foo, dann wollen Sie $(foo). So einfach ist das.
- Tut es nicht klingen wie Sie haben eine klare Vorstellung davon, was Sie versuchen zu wählen, wenn Sie dies tun, dann sind Sie nicht Sie effektiv zu kommunizieren. Wenn du sagst "ich brauche einen Weg, das zu tun
:root
", was ist dein Ausgangspunkt, dass Sie versuchen, wählen Sie aus? Auch das markup in Ihrem Kommentar zu Lesen ist hart. Es ist auch nicht gültig - Ihnen fehlt ein schließender tag irgendwo. Ich würde empfehlen die Bearbeitung in Ihrer ursprünglichen Frage. - BTW deine argu... Ihre id-Attribute sind ungültig: w3.org/TR/html401/types.html#type-name
- Ich glaube, dass entweder deine Frage sollte umformuliert werden oder man sollte überdenken, was die Antwort, die Sie ausgewählt haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während diese Frage beantwortet war vor einer Weile vollkommen richtig - ich habe nur versucht, zu versuchen, diese selbst und war nicht allzu begeistert über einen Selektor wie
*:not(* *)
-- vor allem wegen der wahrscheinlichen Gesamtkosten. Ich weiß nicht, ob dies ist eine aktuelle Ergänzung zu jQuery die Fähigkeit (ich bin mit 1.8) aber Sie verwenden können:Diese wählen, wird das erste Gefundene nicht-textnode-element, so es sei denn, der dom, die Sie Durchlaufen werden, ist illegal, es ist die Bildung, Sie sollte immer das root-element. Es ist auch sehr optimal, da jQuery sollte wissen, zu stoppen, nachdem das erste element gefunden.
Also hier ist ein wenig etwas für all diejenigen, die WSOD-fans da draußen:
Oh, und nur für den Fall, dass es nicht offensichtlich, dass die oben genannten code-snippets wurden nur zur Veranschaulichung der Selektor, und Sie finden sich arbeiten mit einer teilweisen fragment (anstatt das ganze Dokument), dann sollten Sie diesen Selektor, mit jQuery-filter-Methode:
Jedoch, wenn die Arbeit mit Fragmenten können Sie nur Folgendes tun:
Obwohl beachten Sie, dass
.get(0)
können wählen, text/Kommentar-Knoten, wenn Sie sind das erste Element im Dokument, in der Erwägung, dass die filter-Ansatz wird immer die erste eigentliche element.OK, also, was Sie tun müssen, ist die folgenden (vorausgesetzt, Sie verwenden das Beispiel, das Sie haben), wenn Sie wollen finden Sie die top-level-Knoten mithilfe von jquery ist die folgende:
Was Sie sind buchstäblich zu Fragen, denn das hier ist für alle Knoten, die keine Kinder anderer Knoten. Das problem ist, dass für ein html-Dokument, dieses wird Ihnen immer nur das html-element, das ist nicht besonders hilfreich. Also, wenn Sie wollen, finden Sie die top-level-element in den Körper eines html-Dokuments, die Sie verwenden würden, etwas viel einfacheres:
wenn Sie wollte dann die zweite Ebene, Sie würde nur gehen
Aber, vorausgesetzt, Sie haben eine Art von beliebigem Dokument-Struktur (wie die foo ein, die Sie erwähnen), was man tun kann, ist das erste Beispiel zu finden, die erste Ebene:
und dann für die zweite Ebene
und für die Dritte Ebene
und so weiter und so Fort. Wenn Sie auf der Suche nach einem root-div-element (vorausgesetzt, dass Ihre Probe ist wie die Frage), können Sie dies tun:
und so weiter, und ersetzen * mit div. Nicht wirklich sicher, warum Sie wollen, dies zu tun, aber es funktioniert. Das problem ist die Frage nicht wirklich genügend Kontext für uns, um Ihnen eine bessere alternative.
Ich bin mehr ein Prototyp Kerl, aber ich denke, Sie könnte bekommen alle Knoten, dann bekommen die ersten Knotens in das array:
Dann Holen Sie sich die Kind-Elemente des (für 0a, 0b und 0c)
Wenn Sie haben Ihre Elemente als ein jQuery-fragment wie:
dann finden Sie das erste element durch:
Die filter-Funktion, sieht aus wie das root-element des fragments.
jQuery wird nicht benötigt...
var root = $(document.firstChild);
Ich kann sein Missverständnis der Frage, aber vorausgesetzt, von root, du meinst den Punkt, an dem die Eltern ist ein anderes tag, um das Kind dann die folgenden arbeiten sollten.
Diese im Grunde Spaziergänge auf den Baum, bis er eine findet ein Mutterunternehmen, das ist ein anderer tag und dann wieder das Element. Für dein Beispiel würde das bedeuten, dass wenn ein element war , oder was auch immer, es würde erkennen, es als die Wurzel und wieder zurück.
Machen eine benutzerdefinierte jquery-Selektor mit diesem sollte möglich sein zu, ist aber natürlich komplizierter.
Sollte es auch relativ leicht erweitern dieses um eine ganze Zahl, die definiert die Ebene. Alles, was Sie würde tun müssen ist, gehen Sie den Baum zu der angegebenen Tiefe, sobald Sie gefunden haben, die Wurzel und wieder diese Elemente.
sehen Sie in der Verwendung der parent () - und (Kinder -) Funktionen. ist Sie müssen gehen mehrere Ebenen , können Sie die Kette wie Sie so ist.
bitte siehe mein Kommentar, und ich werde versuchen, eine bessere Lösung.
Bekomme ich ein html-fragment von ajax-Aufrufs, und ich auch brauchen, um das root-div aus. Was ich Tat, war rufen Sie einfach
$(data)
und jQuery analysiert die Rückkehr text als HTML und geben Sie das root.Wenn Sie möchten, wählen Sie die Obere Ebene übergeordnete element des Elements, aber immer noch unter dem Körper, ich würde gehen