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 :

ajout dynamique de balises html


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut ajout dynamique de balises html
    salutatous,

    j'ai créé un formulaire qui me permet d'ajouter dynamiquement des champs par le biais d'un submit

    voulant séparer ces champs par la balise <br />, au début j'ai utiliser "createTextNode" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calque.appendChild(document.createTextNode("<br /><br />"));
    mais comme ça ne fonctionnait pas, j'ai ensuite utiliser "createElement" qui lui fonctionne, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calque.appendChild(document.createElement('br'));
    et en cherchant je viens de tomber sur "innerHTML" que j'ai essayé, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calque.appendChild(document.getElementById(?????).innerHTML = "<br /><br />");
    question 1 :
    quelle est la meilleure méthode, "createTextNode" ou "innerHTML"

    question 2 :
    pour "innerHTML", que dois-je mettre à la place des points d'interrogation ?

    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    document.createTextNode sa reste de la programmation, innerHTML c'est moche peut lisible et pas modulable c'est un peut comme du flash dans une page sa n'a rien a voir avec javascript

  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 mekal Voir le message
    document.createTextNode sa reste de la programmation, innerHTML c'est moche peut lisible et pas modulable c'est un peut comme du flash dans une page sa n'a rien a voir avec javascript
    Ah tiens, c'est en contradiction avec ta signature

    @nicomax34 > Puisque tu ajoutes des éléments, tu modifies le DOM de ta page.
    Il est donc tout à fait logique et préférable d'utiliser les instructions prévues à cet effet.
    Bien que innerHTML fonctionne aussi sans problème dans certains cas ...

    A+

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    Ok merci je vais voir du côté du DOM

  5. #5
    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
    salut

    pour commenter,

    la notion de "textNode" est incompatible avec celle de "balise", donc, évidemment, ton premier essai ne marchait pas;

    innerHTML (et rappelons que Microsoft était aussi l'heureux inventeur d'un innerText) est une aberration qui continue à être tolérée par l'ensemble des browsers; propriété magique par excellence, elle te permet d'écrire les bêtises suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <img src="image.gif" id="im" alt="image" />
    ...
    document.getElementById("im").innerHTML="<a href='' id='lnk'>lien</a>";
    joyeux bordel dans le DOM de la page, bugs prévisibles, apprenti-sorcellerie, etc.

    intervenir sur une architecture html s'effectue aujourd'hui de manière plus écologique , en respectant la logique des balises block / inline et en préservant les neurones du navigateur;

    autre point: si tu veux permettre l'ajout de champs, fais-le avant le "submit"; pas besoin de faire un aller retour au serveur pour ajouter ta ligne html;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    merci pour ces infos javatwister

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    innerHTML est très utile dans la plupart des cas. Tous les navigateurs le prennent parfaitement en compte.

    C'est pour cette raison que le consortium W3C l'a adopté à partir de HTML5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    container=document.createElement('div');
    container.innerHTML='<p>Je ne suis qu\'un petit paragraphe, et la fonction <strong>innerHTML<\/strong> est parfaitement adaptée pour moi';
    document.body.appendChild(container);

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ah tiens, c'est en contradiction avec ta signature
    je suis un incompris

  9. #9
    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
    Citation Envoyé par Eric2a Voir le message
    Salut,

    innerHTML est très utile dans la plupart des cas. Tous les navigateurs le prennent parfaitement en compte.

    C'est pour cette raison que le consortium W3C l'a adopté à partir de HTML5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    container=document.createElement('div');
    container.innerHTML='<p>Je ne suis qu\'un petit paragraphe, et la fonction <strong>innerHTML<\/strong> est parfaitement adaptée pour moi';
    document.body.appendChild(container);
    Bon puisqu'on se lance dans un débat théorique, je vais ajouter mon grain de sel

    Personnellement, bien qu'il m'arrive d'utiliser innerHTML comme beaucoup, je me range à l'avis de javatwister.
    D'une part parce qu'il s'agit à la base d'une instruction propriétaire (reste à comprendre pourquoi innerHTML est devenu répandu et pas innerText, outerHTML ou outerText), mais aussi et surtout parce que comme le fait remarquer judicieusement javatwister, ça implique de mélanger des notions d'architecture DOM et du texte, en gros, ça revient à inventer l'addition de pommes et de poires si chère aux institutrices de mon enfance !

    Enfin, lorsqu'on mélange les méthodes du DOM (createElement, appendChild, removeChild etc.) avec innerHTML on obtient des effets de bord assez surprenants puisqu'au final, c'est IE qui se met à planter !

    Par exemple :
    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
    <html>
    <head>
    <script type="text/javascript">
        var div1 = document.createElement('div');
        div1.appendChild(document.createTextNode('Contenu généré par le DOM'));
        function ajout(){
            document.getElementById('test').innerHTML = '';
            document.getElementById('test').appendChild(div1);
        }
        window.onload = ajout;
    </script>
    </head>
     
    <body>
        <div id="test"></div>
        <input type="button" onclick="ajout()" value="Recommencer" />
    </body>
    </html>
    Avec IE, le contenu de div1 a été vidé

  10. #10
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Surprenant en effet Bovino !

    Testé sur IE8 et confirmé... div1 est bien vidé.

    Pour les puristes... Le même code 100% DOM, c'est Ok bien entendu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
    	var div1 = document.createElement('div');
    	div1.appendChild(document.createTextNode('Contenu généré par le DOM'));
    
    	function ajout(){
    		var test=document.getElementById('test');
    		while(test.hasChildNodes())test.removeChild(test.lastChild); // innerHTML non adapté dans ce cas
    		test.appendChild(div1);
    	}
    
    	window.onload = ajout;
    </script>

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

Discussions similaires

  1. Ajouter dynamiquement une balise div
    Par JCD21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/02/2010, 13h56
  2. Ajout d'une balise HTML dans un JTextPane
    Par adriien dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/03/2008, 10h56
  3. Ajout dynamique de balise SELECT
    Par ythim dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 10h45
  4. Réponses: 1
    Dernier message: 06/06/2006, 09h47
  5. [JEditorPane]ajout de balises html
    Par almass dans le forum Composants
    Réponses: 12
    Dernier message: 12/05/2004, 17h07

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