Bestellen von DOM NodeList von getChildNodes () zurück
Frage
Die DOM-Methode getChildNodes()
eine NodeList
der Kinder des aktuellen Node
zurückgibt. Während ein NodeList
bestellt wird, ist die Liste garantiert in dem Dokument, um sein?
Zum Beispiel gegeben <a><b/><c/><d/></a>
a.getChildNodes()
garantiert eine NodeList
mit b
, c
und d
in dieser Reihenfolge zurückzukehren
Die javadoc ist auf diese nicht klar.
Lösung
Nach meiner Erfahrung, ja. Die DOM spec ist nicht klarer. Wenn Sie paranoid sind, versuchen Sie so etwas wie
current = node.firstChild;
while(null != current) {
...
current = current.nextSibling;
}
Andere Tipps
Ein Dokument geordneten Knotenliste ist das Verhalten in anderen Implementierungen des DOM, wie Javascript oder des Pythons. Und eine zufällig geordnete Knotenliste wäre völlig nutzlos. Ich denke, es ist sicher auf abzuhängen Knoten in Dokumentreihenfolge zurückgegeben werden.
Meine Erfahrung ist, dass jedes Mal, wenn ich die Mühe gemacht haben, schauen sie in der Reihenfolge des Dokuments war. Allerdings glaube ich, dass ich irgendwo gelesen, ist es nicht sein, in der Dokumentreihenfolge garantiert. Ich kann nicht finden, wo ich, dass gerade jetzt lesen, so nehmen Sie es als Hörensagen. Ich denke, die beste Wahl, wenn Sie auf muss haben sie in dem Dokument, um dann zu verwenden, wäre Firstchild nextSibling, bis es keine mehr sibs sind.
Ich würde gerne sagen, dass dies gewährleistet ist (wie ich glaube, es ist), aber die Document Object Modellspezifikation selbst scheint in diesem Fall nicht eindeutig. Ich bin mir ziemlich sicher, dass es immer dokumentieren Ordnung, though.
In Ihrem Beispiel, wie dargestellt. Ich glaube schon. Allerdings habe ich die reale Welt Erfahrungen erlebt, in denen Räume interpretiert wurden als Knoten so:
<a><b/><c/><d/></a>
ist anders als
<a><b/> <c/><d/></a>
Wenn Sie bei Index gesuchte [1], Firefox und IE können unterschiedliche Ergebnisse präsentieren. Ich würde davon abraten, in der Größenordnung unter Berufung je nach Bedarf.
Ja sie bestellt werden, da sie eine nodeList zurückkommt, würden Sie getNamedChildNodes zu sagen haben, um eine Liste zu erhalten, die nicht wie in namedNodeList bestellt wird.