Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Lister les elements dans mon arbre (JS)

Envoyé par : Veovis

Date : 04/09/2006 10:25

Bonjour,

J'ai un petit souci pour lister tous les elements dans un arbre en JavaScript. Tout d'abord voici comment se présente mon arbre :

  AAA
     a1
     a2
     a3
 BBB
     b1
     b2
     b3

Ce que j'aimerais obtenir c'est les noeuds AAA, a1, a2, a3, BBB, b1, b2, b3. J'avais pensé à faire du nextSibling mais ca m'affiche uniquement les neouds AAA, BBB.

Quelqu'un aurait une idée ?

Merci pour les reponses...

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : chBok

Date : 04/09/2006 10:58

nextSibling te donne les noeuds de même niveau voisins, donc, c'est normal de passer de AAA à BBB. Si tu fais une boucle, tu devrais tester si le noeud contient des fils, avec hasChildNode() puis de prendre le premier fils firstChild(), etc.

En général, si tu as une arborescence plus complexe (plusieurs sous niveaux imbriqués) et indéterminée, il est préférable de passer par une fonction récursive... :-)

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : Veovis

Date : 04/09/2006 11:46

Oki merci je n'avais pas du tout penser a hasChildNode().

En effet, je pense que je vais me pencher sur une fonction récursive.

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : thefab

Date : 04/09/2006 15:08

Tu peux aussi essayer du côté de XPath qui contient une fonction count(), la syntaxe devrait ressembler à ça (vraiment en gros):

var xpath = new XPathEvaluator();
var nodes = xpath.evaluate("count(*)", root, resolver, type, result);
  • root est le noeud dont tu veux compter les enfants
  • resolver permet de résoudre les espaces de noms (je crois que tu peux mettre null)
  • type c'est le genre de noeuds que tu veux compter (éléments, attributs,...)
  • et result je sais plus.

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : laurentj

Date : 05/09/2006 17:09

ou encore mieux, et beaucoup plus sympa (et plus standard ;-) ), utiliser le treewalker (voir document.createTreeWalker)

exemple simple :

var tw = document.createTreeWalker( element_depart, 1, null, false);
// 1= montrer que les élements = [nsIDOMNodeFilter.SHOW_ELEMENT|http://xulplanet.com/references/xpcomref/ifaces/nsIDOMNodeFilter.html]

while(tw.nextNode()){
   var elt = tw.currentNode();
   // traitement sur elt...
}

Dans elt, tu auras tour à tour tous les élements de ton arbre. Là c'est un exemple d'un simple parcours. Mais tu peux aussi utiliser tw pour te balader dans tous les sens (revenir en arrière, sur l'élément parent du courant, sauter un sous arbre etc..). tu peux aussi changer le filtre (ne voir que les commentaires, ou que les noeuds textes etc.. ou un mix de plusieurs types de noeuds)

Voir toutes les méthodes du treewalker

(note, il y a aussi le node iterator : document.createNodeIterator, mais ce n'est pas implémenté actuellement)

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : thefab

Date : 12/09/2006 09:40

Je sais pas pourquoi j'ai proposé de voir du côté d'XPath, j'ai cru que tu voulais les compter... bien que XPath puisse aussi te retourner les éléments voulus avec une requête du genre: //* c'est vrai que TreeWalker est bien plus sympa, par contre je ne vois pas en quoi c'est plus standard ?

# Re: Lister les elements dans mon arbre (JS)

Envoyé par : laurentj

Date : 14/09/2006 10:11

il ne me semble pas que l'interface de XPathEvaluator soit une recommandation du W3C (mais le langage XPath en lui même si bien sûr). L'api du treewalker fait vraiment parti des specs du dom.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.