Question

La méthode DOM getChildNodes() retourne un NodeList des enfants du courant Node. Alors qu'un <a><b/><c/><d/></a> est commandé, la liste est-elle garantie dans l'ordre des documents?

Par exemple, étant donné que a.getChildNodes() est b garanti de retourner un c avec d, <=> et <=> dans cet ordre ?

Le javadoc n'est pas clair à ce sujet.

Était-ce utile?

La solution

D'après mon expérience, oui. Spéc. DOM n'est pas plus clair. Si vous êtes paranoïaque, essayez quelque chose comme

current = node.firstChild;
while(null != current) {
    ...
    current = current.nextSibling;
}

Autres conseils

Une liste de noeuds ordonnés par document correspond au comportement des autres implémentations du DOM, telles que celles de Javascript ou de Python. Et une liste de nœuds ordonnée au hasard serait totalement inutile. Je pense qu'il est prudent de dépendre du renvoi des nœuds dans l'ordre des documents.

Mon expérience est que chaque fois que j'ai pris la peine de regarder, c'était dans l'ordre des documents. Cependant, je crois que j'ai lu quelque part qu'il n'est pas garanti d'être en ordre de document. Je ne trouve pas où je lis cela maintenant, alors prenez-le comme ouï-dire. Je pense que votre meilleur pari si vous devez les avoir dans l'ordre des documents serait d'utiliser FirstChild puis NextSibling jusqu'à ce qu'il n'y ait plus de frères.

J'aimerais vous dire que c'est garanti (comme je le crois bien), mais que Document Object La spécification de modèle elle-même semble ambiguë dans ce cas. Je suis à peu près sûr que c'est toujours l'ordre du document.

Dans votre exemple, tel que présenté. Je le crois. Cependant, j'ai vécu des expériences du monde réel dans lesquelles les espaces ont été interprétés comme des nœuds:


<a><b/><c/><d/></a>

est différent de


<a><b/> <c/><d/></a>

Si vous consultez l'index [1], Firefox et IE peuvent présenter des résultats différents. Je vous déconseille de compter sur la commande en fonction de vos besoins.

Oui, ils sont commandés car ils renvoient une liste de noeuds, vous devez dire à getNamedChildNodes pour obtenir une liste qui n’a pas été commandée comme dans namedNodeList.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top