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

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    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

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