IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Un getElementsByTagName hiérarchiquement


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut Un getElementsByTagName hiérarchiquement
    Bonjour,

    Le méthode javascript ObjRoot.getElementsByTagName('MaBalise') retourne tous les objets de type MaBalise se situant hiérarchiquement en dessous de ObjRoot.

    Donc si on a :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <PROPRIETAIRE>
        <NOM>Robert</NOM>
        <ENFANT>
            <NOM>Jules</NOM>
            <AGE>Masculin</AGE>
        </ENFANT>
        <ENFANT>
            <NOM>Jack</NOM>
            <AGE>Masculin</AGE>
        </ENFANT>
    </PROPRIETAIRE>

    proprietaire.getElementsByTagName('nom'); va retourner un tableau dont l'élément à l'indice 0 contiendra "Robert" (je fais abstraction de l'objet qui contient la propriété robert), en 1, on aura Jules et en 2 Jack. Pas de problème pour récupérer le nom de mon de "propriétaire".

    En revanche, son age n'étant pas spécifié, si je fais proprietaire.getElementsByTagName('age'), je vais avoir un tableau qui contiendra en 1er indice l'age de "Jules"...

    Donc à moins de vérifier à chaque fois que le parent de l'objet contenu en indice 1 du tableau soit bien l'objet racine, je ne sais pas si il s'agit d'une balise appartenant à "propriétaire" ou à l'un de ses "enfants".

    Existe t-il donc une méthode similaire qui ne permette de ne chercher que dans les objets enfant direct, sans récursivité ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bonjour,
    Essaie ça :

    pour récupérer un seul noeud (le premier trouvé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjRoot.querySelector("PROPRIETAIRE > AGE")
    pour récupérer tous les noeuds trouvés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjRoot.querySelectorAll("PROPRIETAIRE > AGE")
    pour récupérer tous les enfants directs d'un noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proprietaire.childNodes
    pour récupérer tous les enfants directs d'un noeud, sans compter les noeuds de type texte et commentaires

  3. #3
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Le QuerySelector n'agit pas de façon récursive ? Il me retournera NULL si j'execute proprietaire.querySelector("> AGE") ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Il prend la même syntaxe que les sélecteurs CSS. Mais je t'ai dit des bêtises en le faisant commencer par ">" pour récupérer les enfants directs, il faut forcément un élément avant. Je vais éditer mon message.

    Et oui, s'il ne trouve rien il renvoie null.

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    tout comme tu as écrit
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    proprietaire.getElementsByTagName('nom');
    tu peux écrire
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    enfant[n].getElementsByTagName('age');

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    @Auteur: je pense que tu n'as pas compris la question

Discussions similaires

  1. BindingCollection et recordset hiérarchique
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/09/2005, 10h34
  2. [vbscript][DOM]pb avec getElementsByTagName...
    Par toyyo dans le forum APIs
    Réponses: 2
    Dernier message: 16/02/2005, 16h56
  3. Quel algorithme utilisé pour faire un arbre hiérarchique
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/01/2005, 21h30
  4. renvoyer des données sous forme de XML hiérarchique
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/01/2005, 18h06
  5. Tri sur code hiérarchique
    Par cafou33 dans le forum SQL
    Réponses: 5
    Dernier message: 22/03/2004, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo