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 :

réinventer le cloneNode


Sujet :

JavaScript

  1. #1
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut réinventer le cloneNode
    Je cherchais à faire une focntion pour attribuer un name sous IE ...

    La seul façon d'y arriver étant de detruire et de remplacer je tentais de scanner les propriétés de l'ancien pour les attibuer au nouveau ..

    Deux problèmes :

    Le propiétés en lecture seule, comment les detecter pour les skipper ?

    Le style n'a pas l'air de couloir se cloner ???

    voici un essai:

    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
    <script type="text/javascript">
     
    function setName(obj,nom){
     
    var NewObj=document.createElement('<'+obj.tagName+' name="'+nom+'" />')
    var NewId=obj.id;
    obj.id="";
    NewObj.id=NewId;
    var Liste=""
    document.body.insertBefore(NewObj,obj);
    for (prop in obj){if (prop.toLowerCase()!="name" && prop.toLowerCase()!="id"){
    							document.getElementById(NewId).prop=obj[prop];
    							Liste+=prop+ " > " +obj[prop] + "<br />"
    							}
     
    					}
     
    document.body.removeChild(obj);
    document.getElementById('list').innerHTML=Liste
    }
    </script>					
     
    </head>
     
    <body>
    <input type="text" value="test"  id="foo" style='color:red'/>
    <input type='button' onclick="setName(document.getElementById('foo'),'dddd')" value='go'/>
    <input type='button' onclick="alert(document.getElementsByName('dddd').length)" value='go'/>
    <div id='list'></div>
    </body>
     
    </html>

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Pour les propriétés en lecture seule, un try/catch devrait faire l'affaire.

    Pour le style, peut être faudrait-il copier les propriétés de style une par une?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (prop.toLowerCase == "style")
    {
        for(var v in prop)
        {
            document.getElementById(NewId).style[v] = obj[v]
        }
    }
    Par ailleurs, cette histoire de name m'intrigue parce que justement hier j'ai eu besoin de créer et modifier dynamiquement des valeurs de name sur un select et je récupère bien mes valeurs correctement coté serveur.

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    un exemple simple coté client et du script coté serveur doubleU ??

    autre question pour spaffy :
    le style est bien définit sur la balise et non sur une class css ?

  4. #4
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Edit: En fait nan c'est bon c'est moi qui ait craqué

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ok j'ai compris pourquoi cela fonctionne dans ton cas :

    -> tu récupères les données coté client pour les traiter coté php , et non un envois direct ( comme un post sur un formulaire ).

    en faisant la même chose mais non ajax , cela ne fonctionnera pas

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    et si tu assignes le name like thatet que tu définies un équivalent à getElementsByName() pour IE qui sera cette fois capable de te remonter les champs dont le name à changé ?
    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
    function getElementsByName(name, tag, elm){
    	var tag = tag || "*";
    	var elm = elm || document;
    	var elements = elm.getElementsByTagName(tag);
    	if (elements.length==0){
    		return [];
    	}
    	var returnElements = [];
    	var i = 0;
    	var current = elements[0];
    	while(current){
    		if(current.name == name){
    			returnElements.push(current);
    		}
    		i++;
    		current = elements[i];
    	}
    	return returnElements;
    }

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

Discussions similaires

  1. [DOM] IE, cloneNode, window.open et appendChild
    Par goutnet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/04/2008, 13h40
  2. Problème avec méthode "cloneNode()"
    Par kingmandrax dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2006, 14h14
  3. cloneNode et attributs
    Par tkwebch dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2006, 08h37
  4. [DOM] Problème de cloneNode (DOM)
    Par linar009 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/07/2006, 08h37
  5. Pb de script avec cloneNode
    Par MmoulinexX dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2006, 17h06

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