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 :

[DOM] Récupérer l'id d'un noeud parent - DOM


Sujet :

JavaScript

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut [DOM] Récupérer l'id d'un noeud parent - DOM
    Bonjour , voici mon problème :

    j'ai l'arborescence suivante :

    tr - id = 'id_du_tr'
    \
    td
    \
    table - id= 'mois_courant'

    var Mois_courant = document.getElementById('mois_courant').id;

    Voila je voudrais pouvoir récupérer l'id du tr a partir de l'element table dont l'id est mois_courant en utilisant ParentNode et compagnie.
    J'espère avoir été assez clair

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    dans la balise table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="alert(this.parentNode.parentNode.id)"
    le premier parentNode étant le td contenant le table
    le second étant le tr contenant le td ...

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par identifiant_bidon Voir le message
    J'espère avoir été assez clair
    moyen, mais si c'est une table incluse dans un td :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(document.getElementById('mois_courant').parentNode.parentNode.id);
    1° parentNode => td
    2° parentNode => tr

    A+

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Spaffy E.bzz, je suis daccord avec vous pour le parentNode.parentNode, mais dans le cas ou son élément se trouverait dans d'autres balises ? p , div et autres ?

    j'aurais plutôt utilisé une fonction récursive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans nom</title>
    <script type="text/javascript">
    function trouveLigneParente(MonElement){
    	var Parent = MonElement.parentNode ;
    	if(Parent.tagName != "TR"){
    		temp = trouveLigneParente(Parent);
    	}
    	else{
    		temp = Parent;
    	}
    	return temp;
    }
    </script>
    </head>
     
    <body><table width="100%" border="1">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr id="toto">
        <td>&nbsp;</td>
        <td><div><input type="button" value="Trouve ma ligne" onclick="alert(trouveLigneParente(this).id)" /></div></td>
      </tr>
    </table>
     
    </body>
    </html>

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Exact Le_Chom, mais ce n'est pas le structure qu'il nous à indiqué ...

    j'apporterais une petit précaution à prendre au niveau de ton script
    en focntion de navigateurs je ne suis jamais sur de la casse de la balise, je préfère donc


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Parent.tagName.toLowerCase() != "tr")

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Merci de ces précisions pour le toLowerCase() j'ai justement eu l'erreur en codant le script :p .
    Pour la fonction je l'ai donnée , à titre d'information pour que sa structure soit plus générique

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Dans la continuité de ma première question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	var row = document.createElement("tr");
     
        for (var i = 1; i <= 28; i++) {
            cell = document.createElement("td");
            texte = document.createTextNode("M");
            cell.appendChild(texte);
            row.appendChild(cell);
         }
     
    	document.getElementById('mois_courantFevrier').appendChild(row);
    	document.getElementById('mois_courantFevrier').setAttribute("border", "1");
    Ce code fonctionne a merveille sous firefox mais pas du tout sous IE7. mois_courantFevrier est l'id d'un tbody.
    Est-ce que qq'un a une idée de ce qui ne va pas avec IE ???
    Merci

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    étrange : je viens de tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <input type="button" value="test" onclick="test()" />
     
    <table width="100%" border="1" >
    <tbody id="mois_courantFevrier">
    </tbody>
    </table>
    avec ton code et cela marche parfaitement sous ie7/firefox par contre si j'assigne l'id sur le tableau directement effectivement ça n'affiche rien sous ie7 MAIS ! en faisant un alert(document.getElementById('mois_courantFevrier').innerHTML) juste après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('mois_courantFevrier').appendChild(row);
    j'ai bien mon code généré dans la source

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Autant pour moi, il s'agissait d'une erreur de ma part.

    Au moins, on aura appris que si on met pas de TBODY avec un id dessus, ça marche pas avec IE

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    il faut juste toujours appender dans le tbody ...

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Autrement question subsidiaire : me sera-t-il possible avec le code donné ci dessus de gérer des evenements tels que onclick, onmouseover, ... sur les cellules que j'ai créé (pour en changer la couleur par exemple) ??? Et cela fonctionnera-t-il avec les 2 principaux navigateurs ??

  12. #12
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    oui tu as juste a ajouter les évènement au moment de la création de tes cellules/lignes et oui ce sera compatible ie/firefox

  13. #13
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok merci pour les renseignements.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] Récupérer un noeud parent
    Par persia dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 14/04/2009, 20h38
  2. [DOM] Recuperer l'index d'un noeud dans sont parent (DOM)
    Par Dougui_bzh dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/07/2008, 09h21
  3. [DOM] Récupérer le nom du premier noeud d'un fichier XML en PHP
    Par ePsymon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/02/2008, 09h17
  4. [DOM] récupérer un noeud particulier
    Par julien.63 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/01/2008, 18h41
  5. [DOM] DOM : Récupérer un élément parent
    Par atar64 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/07/2007, 09h34

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