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 :

Modification d'un Objet HTML cloné


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Modification d'un Objet HTML cloné
    Bonjour,

    Comme vous vous en douté j'ai une question. Voila j'aimerai modifier l'id d'un sous élément d'un élément clonée dans une page HTML. Je m'explique, j'ai :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div id="parent">
       <div id="enfant">
       </div>
    </div>

    le but étant de clonée la div "parent" comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var clone = document.getElementById('parent').cloneNode(true);
    et de changer l'id d'enfant en passant par clone pour avoir par exemple

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div id="parent">
       <div id="enfant_nb_2">
       </div>
    </div>

    Problème, je ne sais pas comment faire.
    Quelqu'un a une suggestion ?

    Merci

    Edit: J'avais bien chercher des balises code (pas longtemps je l'avoue), mais je m'attendait a ce qu'elle soit représenter plus explicitement, toutes mes confuses :/

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ben si je suis ta logique, après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var clone = document.getElementById('parent').cloneNode(true);
    il te faut changer l'id du noeud que tu viens de créer, sinon bug:
    puis changer l'id de l'enfant (sinon bug):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clone.getElementsBytagName("div")[0].id="enfant2";
    schématiquement, voilà, si ton dom est aussi simple que dans l'exemple;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Merci de ta réponse. J'aurai espérer pouvoir faire quelque chose de plus proche de getElementById, mais ça devrais faire l'affaire.
    A titre purement informatif, cet méthode fonctionne telle sur plusieurs niveaux ? Peut-on faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clone.getElementsBytagName("div")[0].getElementsBytagName("div")[0].id="enfant2";
    J'ajoute que j'ai du louper quelque chose de critique puisque je me prend un jolie :
    clone.getElementsBytagName is not a function

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    attention à la casse, c'est mi qui ai tapé trop vite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clone.getElementsByTagName
    par contre, l'instruction que tu proposes n'a pas tellement de sens vue la structure;

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Effectivement l'instruction que j'ai écrite supposais qu'elle s'applique à une structure avec une plus grande profondeur. Comme trois div les unes dans les autres.

    Au passage j'en profite pour ajouter une question de plus sur le même thème.
    Imaginons maintenant que nous ayons :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="une_div">
      <p>
        Un paragraphe
      </p>
    </div>

    Comment puis-je, toujours dans un clone de la div, modifier le contenue de la balise <p> ? J'ai bien essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var clone = document.getElementById('une_div').cloneNode(true);
    clone.getElementsByTagName('p')[0].innerHTML = 'Lorem Impsum ';
    Mais innerHTML semble être une fonctionnalité propre à l'objet document et ne marche pas ici et comme le texte a modifier n'est pas une propriété de la balise je suis coincé. :/

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Bonjour,
    pour voir la modification il faudrait peut être que l'objet cloné soit ajouté au document.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Bonjour

    Oui c'est évident, et cela arrive dans un second temps.
    Cependant il me parait contre intuitif de devoir ajouter l’élément à l'Objet document pour pouvoir ensuite faire innerHTML dessus.

    C'est contournée le problème. Et par une solution peut élégante qui plus est parce que la place de l’élément <p> dans le document peut être variable et donc nécessité l'ajout d'un id. Alors que sa place dans notre clone est parfaitement connue.

    Allons bon je ne vais quand même pas être obliger d'ajouter un id à l'élément <p> de mon clone pour ensuite pouvoir faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('mon_id').innerHTML = 'Lorem Ipsum';
    C'est trop... moche

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    hum,

    quoique président à titre honorifique des pourfendeurs d'innerHTML, je dois admettre que la "propriété" fonctionne à tous les niveaux du dom!
    revois ton test, ça doit marcher;

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Non il n'est pas nécessaire de l'appender pour faire la modification, mais dans ton code la modification est bel et bien réalisée.
    pour test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <body>
    <div id="une_div">
      <p>Un paragraphe</p>
    </div>
    <div id="autre_div" style="background-color:#FEE;">Ici une autre DIV</div>
    <script>
    var oDest = document.getElementById('autre_div');
    var clone = document.getElementById('une_div').cloneNode(true);
    clone.getElementsByTagName('p')[0].innerHTML = 'Lorem Impsum ';
    oDest.appendChild( clone);
    </script>
    </body>
    [EDIT] tout comme l'a dit javatwister plus rapidement

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Damned, effectivement l'erreur était dans mon script cela fonctione

    Que me propose tu comme solution alternative au innerHTML mon cher javatwister ?

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    innerHTML a été normalisé et appartient désormais au DOM HTML5. Nul besoin de le remplacer, surtout dans ton contexte.

  12. #12
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    principe de précaution: c'est une méthode permissive au dernier degré qui donne l'impression de pouvoir refaire le dom d'un clic, en détruisant toute organisation logique;
    il serait intéressant de tester au validateur certaines structures réécrites à coup de inner...

Discussions similaires

  1. la fonction clone() et modification de l'objet cloné
    Par PP(Team) dans le forum jQuery
    Réponses: 0
    Dernier message: 10/08/2010, 09h31
  2. doc objet html
    Par philou8 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/01/2006, 16h37
  3. Comment Obtenir en JS les infos d'un objet HTML ?
    Par prin-prin dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/12/2005, 16h50
  4. [POO] Passer un objet HTML en argument.
    Par defacta dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/12/2004, 10h44

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