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 :

[SRC] DOMBUILDER via innerHTML


Sujet :

Contribuez

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut [SRC] DOMBUILDER via innerHTML
    petit DOMBUILDER via innerHTML, une version avec la possibilité de passer un objet définissant les attributs , et les noeuds devrait être ajouté, car, il est parfois plus difficile de créer un chaine de caracthere plutot, que un objet , et inversement ....

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    (function(spaceName){
        /*------------------------priver-----------------------*/
     
        //element servant a créer les élément html, via innerHTML
        var element = document.createElement('div'),
            isIE = /msie/i.test(navigator.userAgent),
            parent;//parent référencant tout les élément créer depuis une cahine de caractere
     
        //vide le contenue de element
        function iniElement(){
             element.innerHTML = '';
        }
        //céer des élements depuis une string
        function create(str){
            iniElement();
            var wrap = /^<(thead|tbody|tfoot|colg|cap)/i.test(str) ? [ 1, "<table>", "</table>" ]
                : /^<tr/i.test(str) ? [ 2, "<table><tbody>", "</tbody></table>" ]
                : /^(<td|<th)/i.test(str) ? [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] 
                : /^<opt/i.test(str) ? [ 1, "<select multiple='multiple'>", "</select>" ]
                : /^<leg/i.test(str) ? [ 1, "<fieldset>", "</fieldset>" ]
                : /^<col/i.test(str) ? [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] : null;
     
            parent = element;
            if(wrap){
                parent.innerHTML = wrap[1] + str + wrap[2];
                //on définit ele, le dernier parent 
                while (wrap[0]--)
    			    parent = parent.lastChild;
            }else
                //sinon on remplit dans la reférence de element de la chaine html
                parent.innerHTML =  str;
        }
     
        //inser un élement a partir d'une sible et d'une position(before)
        function insert(el, sible, before){
            if(before){
                sible.parentNode.insertBefore(el, sible);
            }else sible.appendChild(el);
        }
     
        //insertion des élement via une string
        function insertHTML(el, str, before){
            create(str); 
            var elem;    
            while (parent.childNodes[0]){
                elem = parent.removeChild(parent.childNodes[0]);
                insert(elem, el, before);
            }       
        }
     
        //insertion des élement via un tableau
        function insertArray(el, array, before){
            for(var i = 0, l = array.length; i < l; i++)
                getFuncInsertion(array[i])(el, array[i], before);
        }
     
        //insertion des élement via une JSON
        function insertJSON(el, object, before){
            var tag = object.tag,
                items = object.items;
            delete object.tag;
            delete object.items;
            var _el = document.createElement(tag);
            for(var i in  object)
                spaceName.setAttribute(_el, i, object[i]); 
            if(items)
                getFuncInsertion(items)(_el, items);
            object.tag = tag;
            object.items = items;
            insert(_el, el, before);
        }
     
        //insertion des élement via  noeud HTML, ou une collection HTML(nodeList)
        function insertNod(el, els, before){
            els = els.length ? els : [els];
            for(var i = 0, l = els.length; i < l; i++)
                insert(els[i], el, before);
        }
     
        function getFuncInsertion(els){
            return typeof els == 'string' ? insertHTML : els.constructor == Object ? insertJSON : els instanceof Array ? insertArray : insertNod;
        }
     
        //création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud    
        var camelGroupe = ['colSpan', 'rowSpan', 'vAlign', 'dateTime', 'accessKey', 'tabIndex', 'encType', 'maxLength', 'readOnly', 'longDesc', 'cellPadding', 'cellSpacing', 'frameBorder', 'useMap', 'id'];
        for (var i = 0, c, isCamel = {'class' : 'className', 'className' : 'className', id : 'id'}; c = camelGroupe[i]; i++)
            isCamel[c.toLowerCase()] = c;
     
        //création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud, et dont dont les valeur de typoe bool doivent avoir une notation XHTML     
        var boolGroupe = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
        for (var i = 0, c, isBool = {}; c = boolGroupe[i]; i++)
            isBool[c] = c;
     
        /*------------------------publique-----------------------*/
     
        //par forcement nécessaire, mais pour etre en 'harmonie' avec toute les autres fonctions
        spaceName.getHTML = function(el){
            return el.innerHTML;
        }
     
           spaceName.getOutherHTML = function(el){
            iniElement();
            element.appendChild(el.cloneNode(true));
            return element.innerHTML; 
        }
     
        spaceName.getAttribute = function(el, attr){
            if(attr == 'style')
                return el.style.cssText;
            var camel, bool;
            return r = isIE || (camel = isCamel[attr]) || (bool = isBool[attr]) ? el[camel || bool || attr] : el.getAttribute(attr);
        }
     
        spaceName.setAttribute = function(el, attr, value){
            if(attr == 'style'){
                el.style.cssText = value;
                return;
            }
            var camel = isCamel[attr], 
                bool = isBool[attr];
            if(bool && !value){
                el[bool] = null;
            }else if(isIE || camel || bool){
                el[camel || bool || attr] = bool || value;
            }else el.setAttribute(attr, value);
        }
     
        spaceName.removeAttribute = function(el, attr){
            if(attr == 'style'){
                el.style.cssText = '';
                return;
            }
            var camel = isCamel[attr], 
                bool = isBool[attr];
            if(isIE || camel || bool){
                el[camel || bool || attr] = null;
            }else el.removeAttribute(attr);
        }
     
        spaceName.setHTML = function(el, els){
            el.innerHTML = '';
            (typeof els == 'string' ? insertHTML : insertNod)(el, els);
        }
     
        spaceName.append = spaceName.insertIntoLast = function(el, els){
            getFuncInsertion(els)(el, els);
        }
     
        spaceName.prepend = spaceName.insertBefore = function(el, els){
            getFuncInsertion(els)(el, els, true);
        }
     
        spaceName.insertIntoFirst = function(el, els){
            var ele; 
            getFuncInsertion(els)((ele = el.childNodes[0]) ? ele : el, els, !!ele);
        }
     
        spaceName.insertAfter = function(el, els){
            var ele; 
            getFuncInsertion(els)((ele = el.nextSibling) ? ele : el.parentNode, els, !!ele);
        }
     
        spaceName.createElement = function(els){
            create(els);
            var els = Array.prototype.slice.call(parent.childNodes);
            return els.length - 1 ? els : els[0];
        }
    })(window)//->remplacer windows par votre espace de nom
    Les insertions acceptent des chaines de caractères, un nœud HTML, ou un tableau de nœuds HTML, et peuvent ètre appliqué à n'importe qu'elle noeud (tr, tbody, select ect...)

    getAttribute et setAttribute normalise l'accession et la modification des attributs

    Voici la list des fonctions:
    - getHTML
    - getOutherHTML
    - setHTML
    - append / insertIntoLast
    - prepend / insertBefore
    - insertIntoFirst
    - insertAfter
    - createElement
    - getAttribute
    - setAttribute
    - removeAttribute


    petit example en supossant que l'element est une balise tr :

    append(document.getElementById('elementTR'), '<td>test</td>');


    La technique utilisé est expliqué dans la source, mais le plus étonnant , c'est que ses fonctions sont plus rapide que innerHTML, et bcp plus rapide que en passant par les fonctions du dom.
    le faite de passé par un élément privé et non intégré au dom, de le remplir par une chaine HTML, puis de récupérer les élément généré, est bcp plus rapide !! bizarre !!

    voilà voilà , bye !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Points : 53
    Points
    53
    Par défaut
    Merci pour ce script, par contre, n'y a t'il pas une erreur pour la méthode prepend ?

    car je l'ai testé avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prepend(document.body, '<div>c\'est ok</div>')
    et j'ai l'erreur suivante dans firebug :

    Node was not found" code: "8
    sible.insertBefore(el, sible);\n
    Mais je peu peut être me tromper ?

    En tout cas merci pour le code.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Points : 53
    Points
    53
    Par défaut
    A mon avis, il doit manquer le firstChild:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	if(before){
    		sible.insertBefore(el, sible.firstChild);
    	} else {
    		sible.appendChild(el);
    	}
    Qu'en penses-tu ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    salut nicko_73, j'ai corrigé l'erreur , en faite insertBefore insère un nœud enfant, avant un autre nœud enfant. Donc c'est le parent qui insère l'élément, ce que la syntaxe ne laisse pas deviner , me suis fais plusieurs fois avoir

    si tu remarque d'autre bug, hésite pas bye

  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 644
    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 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    Au risque de paraitre desagreable ... oser appeller "dombuilder" un script qui colle des élements sur la page à coup de innerHTML ... c'est euphémistiquement "gonflé"

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    pour info , jquery utilise une technique similaire, pour la gestion du DOM, et pourtant personne ne remet en cause le faite que ce soit une librairie javascript orienté sur le DOM...

    Les innerHTML ne sont pas compatible pour toutes les balises, ce script le permet, il normalise l'accèssion et modification au attribut , (genre class, htmlfor ect ...), et fournit une api pour les insertions ciblé à partir d'une chaine (ce qui est impossible via innerHTML (sauf en trifouillant la string en elle même)) ou de nœuds ou tableau de nœuds.

    Si tu aurais regardé la source, je ne fais pas que copié une chaine HTML , à un élément.... La technique utilisé est la plus rapide que j'ai pu tester, elle construit les éléments à partir d'un élément privé via innerHTML, je me sert de ces éléments pour ensuite les insérer à la place voulue dans le DOM...

    De plus j'ai bien spécifié dans le titre de la source "vai innerHTML', donc je ne voit pas du tout l'intérêt de tas remarque...

    Pour info , j'ai aussi réalisé un dombuilder, avec une syntaxe JSON, mais celle-ci est beaucoup plus lourde, et moin rapide, même si elle peut être utile dans certain cas, ou les insertions (création) sont dynamique....Si je trouve le temps je l'inclurais dans mon script...

    bye

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Ma source qui prend maintenant en compte une syntaxe JSON, on peux donc , passé comme argument lors d'une insertion, soit une string, soit un nœud , soit une collection (nodListe), soit une objet, soit un tableau (qui lui même peux prendre toute ses valeurs...)

    J'ai ajouté la fonction setStyle

    voici le code

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    (function(spaceName){
        /*------------------------priver-----------------------*/
     
        //element servant a créer les élément html, via innerHTML
        var element = document.createElement('div'),
            isIE = /msie/i.test(navigator.userAgent),
            parent;//parent référencant tout les élément créer depuis une cahine de caractere
     
     
        //céer des élements depuis une string
        function createHTML(str, toReturn){
            element.innerHTML = '';
     
            var wrap = /^<(thead|tbody|tfoot|colg|cap)/i.test(str) ? [ 1, "<table>", "</table>" ]
                : /^<tr/i.test(str) ? [ 2, "<table><tbody>", "</tbody></table>" ]
                : /^(<td|<th)/i.test(str) ? [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] 
                : /^<opt/i.test(str) ? [ 1, "<select multiple='multiple'>", "</select>" ]
                : /^<leg/i.test(str) ? [ 1, "<fieldset>", "</fieldset>" ]
                : /^<col/i.test(str) ? [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] : null;
     
            parent = element;
            if(wrap){
                parent.innerHTML = wrap[1] + str + wrap[2];
                //on définit ele, le dernier parent 
                while (wrap[0]--)
    			    parent = parent.lastChild;
            }else
                //sinon on remplit dans la reférence de element de la chaine html
                parent.innerHTML =  str;
     
            if(toReturn){
                var ret =  Array.prototype.slice.call(parent.childNodes);
                return ret.length - 1 ? ret : ret[0];
            }
        }
     
        //céer des élements via une syntaxe JSON
        function createJSON(object){
            var tag = object.tag,
                items = object.items,
                el;
     
            delete object.tag;
            delete object.items;
     
            if(isIE)if(tag.toLowerCase() == 'input'){
                el = document.createElement('<input type="'+object.type+'" '+(object.checked ? 'checked="checked"' : '')+(object.name ? 'name="'+object.name+'"' : '')+'>');
            }else if(tag.toLowerCase() == 'select'){
                el = document.createElement('<select '+(object.multiple ? 'multiple="multiple"' : '')+(object.name ? 'name="'+object.name+'"' : '')+'>');
            }else if(tag.toLowerCase() == 'textarea')
                el = document.createElement('<textarea '+(object.name ? 'name="'+object.name+'"' : '')+'></textarea>');
            el =  el || document.createElement(tag);
     
            for(var i in  object)
                spaceName.setAttribute(el, i, object[i]); 
     
            if(items)
                getFuncInsertion(items)(el, items);
     
            object.tag = tag;
            object.items = items;
            return el;
        }
     
        //céer des élements via une syntaxe JSON
        function createArray(array){
            for(var i = 0, l = array.length, ret = []; i < l; i++){
                ret[i] = getFunctionCreate(array[i])(array[i], true);}
            return ret;
        }
     
        //retourne la fonction de création en fonction du type fournit
        function getFunctionCreate(els){
            return typeof els == 'string' ? createHTML : els.constructor == Object ? createJSON : createArray;
        }
     
        //inser un élement a partir d'une sible et d'une position(before)
        function insert(el, sible, before){
            if(before){
                sible.parentNode.insertBefore(el, sible);
            }else sible.appendChild(el);
        }
     
        //insertion des élement via une string
        function insertHTML(el, str, before){
            createHTML(str); 
            var elem;    
            while (parent.childNodes[0]){
                elem = parent.removeChild(parent.childNodes[0]);
                insert(elem, el, before);
            }       
        }
     
        //insertion des élement via une JSON
        function insertJSON(el, object, before){
            var els = createJSON(object);
            insert(els, el, before);
        }
     
        //insertion des élement via  un noeud HTML
        function insertNod(el, nod, before){
            insert(nod, el, before);
        }
     
        //insertion des élements via un tableau ou une collection
        function insertArray(el, array, before){
            for(var i = 0, l = array.length; i < l; i++)
                getFuncInsertion(array[i])(el, array[i], before);
        }
     
        //retourne la fonction d'insertion en fonction du type fournit
        function getFuncInsertion(els){
            return typeof els == 'string' ? insertHTML : els.constructor == Object ? insertJSON : els.length ? insertArray : insertNod;
        }
     
        function setOpacity(element,value) {
            value = value < 0.00001 ? 0 : value;
            if(isIE){
                element.style.filter = 'alpha(opacity=' + value * 100+ ')';
            }else 
                element.style.opacity = value;
        };
        //création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud    
        var camelGroupe = ['colSpan', 'rowSpan', 'vAlign', 'dateTime', 'accessKey', 'tabIndex', 'encType', 'maxLength', 'readOnly', 'longDesc', 'cellPadding', 'cellSpacing', 'frameBorder', 'useMap', 'id'];
        for (var i = 0, c, isCamel = {'class' : 'className', 'className' : 'className', id : 'id', 'for' : 'htmlFor'}; c = camelGroupe[i]; i++)
            isCamel[c.toLowerCase()] = c;
     
        //création d'un objet d'acces rapide au propriété accéssible uniquement comme propriété du noeud, et dont dont les valeur de typoe bool doivent avoir une notation XHTML     
        var boolGroupe = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
        for (var i = 0, c, isBool = {}; c = boolGroupe[i]; i++)
            isBool[c] = c;
     
        /*------------------------publique-----------------------*/
     
        //par forcement nécessaire, mais pour etre en 'harmonie' avec toute les autres fonctions
        spaceName.getHTML = function(el){
            return el.innerHTML;
        }
     
            spaceName.getOutherHTML = function(el){
            element.innerHTML = '';
            element.appendChild(el.cloneNode(true));
            return element.innerHTML; 
        }
     
        spaceName.getAttribute = function(el, attr){
            if(attr == 'style')
                return el.style.cssText;
            var camel, bool;
            return r = isIE || (camel = isCamel[attr]) || (bool = isBool[attr]) ? el[camel || bool || attr] : el.getAttribute(attr);
        }
     
        spaceName.setAttribute = function(el, attr, value){
            if(attr == 'style')
                return spaceName.setStyle(el, value);
            var camel = isCamel[attr], 
                bool = isBool[attr];
            if(bool && !value){
                el[bool] = null;
            }else if(isIE || camel || bool){
                el[camel || bool || attr] = bool || value;
            }else el.setAttribute(attr, value);
        }
     
        spaceName.removeAttribute = function(el, attr){
            if(attr == 'style'){
                el.style.cssText = '';
                return;
            }
            var camel = isCamel[attr], 
                bool = isBool[attr];
            if(isIE || camel || bool){
                el[camel || bool || attr] = null;
            }else el.removeAttribute(attr);
        }
     
        spaceName.setStyle = function(el, style){
            if (typeof style == 'string'){
                el.style.cssText += ';' + style;
                if(style.indexOf('opacity') > -1)
                    setOpacity(el, style.match(/opacity:\s*(\d?\.?\d*)/)[1]);   
            }else  for(var i in style){
                if(i == 'opacity'){ 
                    setOpacity(el, style[i]);
                }else el.style[i == 'float' ? 'cssFloat': i] = style[i];  
            }
        }
     
        spaceName.setHTML = function(el, els){
            el.innerHTML = '';
            getFuncInsertion(els)(el, els);
        }
     
        spaceName.append = spaceName.insertIntoLast = function(el, els){
            getFuncInsertion(els)(el, els);
        }
     
        spaceName.prepend = spaceName.insertBefore = function(el, els){
            getFuncInsertion(els)(el, els, true);
        }
     
        spaceName.insertIntoFirst = function(el, els){
            var ele; 
            getFuncInsertion(els)((ele = el.childNodes[0]) ? ele : el, els, !!ele);
        }
     
        spaceName.insertAfter = function(el, els){
            var ele; 
            getFuncInsertion(els)((ele = el.nextSibling) ? ele : el.parentNode, els, !!ele);
        }
     
        spaceName.createElement = function(els){
            return getFunctionCreate(els)(els);
        }
    })(window)//->remplacer windows par votre espace de nom
    et un teste de formulaire
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
       <title>DOMBUILDER</title>
       <script type="text/javascript" src="dombuilder.js"></script>
    </head>
    <body>
          <div id='test1' style='border : 3px solid black'></div>  	
    </body>
    <script type="text/javascript">
           append(document.getElementById('test1'), {
                tag : 'form',
                method : 'get',
                action : self.location.href,
                items : {
                    tag : 'fieldset',
                    style : {
                        border: '20px solid blue',
                        width : '200px',
                        padding : '10px',
                        opacity : '0.5'
                    },
                    items : [{
                        tag : 'legend',
                        items : 'Enregistrez vous'
                    },{
                        tag : 'label',
                        'for' : 'moninput',
                        style : 'color : blue; fontFamily : verdana',
                        items : 'Login : '
                    },{
                        tag : 'input',
                        id : 'moninput',
                        type : 'text'
                    },'<br /><br />',{
                        tag : 'select',
                        multiple : 'multiple',
                        items : [{
                            tag : 'option',
                            value : '1',
                            items : 'option 1'
                        },{
                            tag : 'option',
                            value : '2',
                            items : 'option 3'
                        }]
                    },{
                        tag : 'input',
                        type : 'checkbox',
                        name : 'ok',
                        checked : 'checked'
                    },{
                        tag : 'input',
                        type : 'radio',
                        name : 'ok2',
                        checked : 'checked'
                    },{
                        tag : 'input',
                        type : 'file'
                    },{
                        tag : 'textarea',
                        name : 'ok',
                        items : 'okokoko'
                    }]
                }
            });
            alert(document.getElementById('test1').innerHTML)
            </script>
    </html>

Discussions similaires

  1. [JavaScript] [SRC]HtmlXtDom Utiliser le DOM à la place de innerHTML
    Par sekaijin dans le forum Contribuez
    Réponses: 4
    Dernier message: 02/11/2009, 19h09
  2. Modifier src d'une img via le nom de classe ? Possible ?
    Par cli16 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/08/2009, 16h49
  3. [Prototype] [AJAX] Exécuter une fonction javascript via une requête AJAX et innerHTML
    Par Invité dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 01/05/2009, 05h36
  4. redirection <img src=""> via htaccess
    Par DemoniumOrigin dans le forum Apache
    Réponses: 4
    Dernier message: 20/11/2008, 17h26
  5. appel d'une page php et passage de paramètres via un SRC
    Par yoda_style dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/01/2006, 21h54

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