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

Contribuez Discussion :

Création d'éléments HTML


Sujet :

Contribuez

  1. #1
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut Création d'éléments HTML
    Bonjour,

    Je m'étonnais de ne pas encore avoir vu quelque chose du genre ici. En fait, soit j'ai mal regardé, soit j'ai compris pourquoi. J'ai rédigé une petite fonction (je la voulais simple au début mais j'ai du la complexifier) qui permet de créer des éléments HTML.

    A l'origine, j'espérais qu'elle ressemble à ceci:

    Code js : 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
     
    //id_pere = id de l'élément père
    //element = le type d'élément (input, table, ...)
    //tab_attribut = le tableau des attributs des éléments (id, type, name, ...)
    // --- C'est une contraitre, tab_attribut fonctionne par couple: new Array("id", "monId", "type", "text", "name", "monNom");
     
    function create_element(id_pere, element, tab_attribut)
    {
       var objet_element = document.createElement(element);
     
       for(var i=0; i<tab_attribut.length; i++)
       {
          objet_element[tab_attribut[i]] = tab_attribut[++i];
       }
     
       document.getElementById(id_pere).appendChild(objet_element);
     
       return objet_element;
    }

    Appelée par exemple comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <div id="monDiv">&nbsp;</div>
     
    <script>
    var id_pere       = "monDiv";
    var element       = "INPUT";
    var tab_attribut  = new Array("id", "monId1", "type", "text", "name", "nom1", "value", "valeur", "size", "5");
    create_element(id_pere, element, tab_attribut);
    </script>
    C'est fort jolie et ça donne un résultat dans bien des cas.
    ... dans bien des cas mais pas dans tous. J'ai voulu ajouter une couleur de fond à cet input et j'ai du rectifier la fonction car le style me demandait un cssText:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(var i=0; i<tab_attribut.length; i++)
    {
       //...
       //Syntaxe différente pour les style
       if(tab_attribut[i] == "style")
       {
          objet_element[tab_attribut[i]].cssText = tab_attribut[++i];
       }
       //...
    }

    C'était sympa, tout tournait bien, je pouvais même ajouter une image sur un lien que je venais de créer grâce au return dans la fonction.
    En parlant de fonction, si je désire ajouter une fonction sur le onclick par exemple, je n'ai pour l'instant pas trouvé d'autre solution que de créer la fonction dans une variable (merci Bovino). Donc ça passe quand même. Il faut simplement être rigoureux avec ce qu'on précise dans le tableau des attributs.

    Car, soyons fou, j'ai même eu l'idée de construire tout un tableau. C'est niquel. Sauf que j'ai cherché un peu pour faire un simple colspan... La casse, mes amis, la casse:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    element["colSpan"] = maValeur;

    Et puis au loin, j'ai vu l'inquiètude venir. Une checkbox. C'est bête, ça fonctionne bien. Sauf quand on désire la cocher... Bah oui, on coche une case uniquement après l'appendChild. Or dans ma fonction, on fait l'appendChild à la fin. La fonction a donc évolué:

    Code js : 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
     
    for(var i=0; i<tab_attribut.length; i++)
    {
       //...
       //Cocher les cases (1/2)...
       if(tab_attribut[i] == "checked" && tab_attribut[++i] == "true")
       {
          var element_to_check = objet_element;
       }            
       //...
    }
     
    document.getElementById(id_pere).appendChild(objet_element);
     
    //Cocher les cases (2/2)...
    if(element_to_check)
    {
       document.getElementById(element_to_check.id).checked = eval(true);
    }

    Alors voila. Je n'ai pas cherché à tester d'autres éléments. Je vais me contenter de ça car à mon avis, la fonction finirait par s'agrandir encore et le but escompté ne serait plus réalisé...

    Je vous mets une page de test dont vous pouvez lire le code, la fonction y est en entière (la page n'est pas construite HTML-ment parlant, mais ça devrait passer quand même).
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Merci Vermine, je ne voudrais pas être rabat-joie, mais tu es passé à cote de quelques petites choses, en particulier au niveau des différences entre browser

    IE ne sait pas attribuer un name dynamiquement et il existe quelques différences de syntaxe entre IE et les autres browser

    Tu n'as pas du voir cette contribution:

    http://www.developpez.net/forums/d53...t=mais+pas+que
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Non non, tu n'es pas du tout rabat-joie. ^^
    Je me disais bien que ce n'était pas aussi simple que ça.
    Mais mon travail n'est pas vain (pour moi) car j'apprends mieux en testant par moi-même.

Discussions similaires

  1. [JS] Création de code HTML
    Par Badaboumpanpan dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/12/2006, 19h16
  2. [DOM]Récupére la valeur d'un élément HTML
    Par kobe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/06/2006, 20h18
  3. Définir un élément HTML au dessus d'un autre
    Par genova dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/12/2005, 19h55
  4. Regex : création de lien html s'il n'existe pas
    Par GregPeck dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2005, 00h21
  5. Réponses: 6
    Dernier message: 25/10/2004, 09h51

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