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 :

[DOM] Remplacer un arbre DOM par un autre


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de kingmandrax
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 87
    Par défaut [DOM] Remplacer un arbre DOM par un autre
    Bonjour,

    J'aimerais dans le cadre de mon application remplacer l'intégralité de l'arbre DOM représentant mon document (c'est-à-dire tout l'arborescence avec le tag html comme parent).

    En fait, à un moment x je crée un clone de tout mon arbre et le stocke bien au chaud dans une variable. Ensuite j'effectue quelques modifications dynamique à mon document (et donc sur mon arbre original)...tout à la fin, je souhaiterais que le document affiché soit à nouveau celui au moment x. Est-il possible de le faire?

    J'ai essayé plusieurs choses dont celle-ci qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var oldChilds = this.formDocument.documentElement.childNodes;
    var newChilds = copy.childNodes;
    for (var i=0; i<oldChilds.length; i++)
    	this.formDocument.documentElement.replaceChild(newChilds[i], oldChilds[i]);
    formDocument est une variable qui contient le document tout entier qui est présent dans une frame de mon appli.

    Etant donné que ceci ne fonctionnait pas, j'ai essayé aussi de supprimer un à un chaque noeud enfant du document original puis d'ajouter un à un au document original les noeuds enfants du document copié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var oldChilds = this.formDocument.documentElement.childNodes;
    var newChilds = copy.childNodes;
     
    for (var i=0; i<oldChilds.length; i++)
    	this.formDocument.documentElement.removeChild(oldChilds[i]);
     
    for (var i=0; i<newChilds.length; i++)
    	this.formDocument.documentElement.appendChild(newChilds[i]);
    Mais là encore ça ne fonctionne pas...rien ne se passe apparemment!!

    Ca serait vraiment génial si vous pouviez m'aider, merci d'avance!

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    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 684
    Par défaut
    pas sûr de comprendre;

    tu veux garder en mémoire l'arbre d'avant les modifications?

    essaie de passer par un bloc documentFragment();

  3. #3
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    ???

    une tentative de cloneNode(true)
    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 !

  4. #4
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Supprimer tous les noeuds enfants en DOM:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     var noeud;
    while (noeud.childNodes.length>0) {
      noeud.removeChild(noeud.firstChild);
    }

    Sinon, c'est quoi copy? (il est obtenu de quelle façon?)

  5. #5
    Membre confirmé Avatar de kingmandrax
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 87
    Par défaut
    Oui je garde en mémoire (dans une variable) l'arbre avant les modifs. Après les modifs et quelques autres opérations, je souhaite rétablir l'arbre d'avant les modifs!

    Sinon oui j'ai oublié de dire que la variable copy est un clone de l'arbre html original.

  6. #6
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par kingmandrax
    Oui je garde en mémoire (dans une variable) l'arbre avant les modifs. Après les modifs et quelques autres opérations, je souhaite rétablir l'arbre d'avant les modifs!

    Sinon oui j'ai oublié de dire que la variable copy est un clone de l'arbre html original.
    Obtenu comment copy?
    Sinon, il faut savoir que les copies d'arbres DOM, c'est pas top.

    Tu ne peux pas cerner la partie de ton document qui subit des changements? Au pire, si c'est la page au chargement, tu ne peux pas utiliser document.body.innerHTML?

  7. #7
    Membre confirmé Avatar de kingmandrax
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 87
    Par défaut
    J'obtiens le clone de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var copy = this.formDocument.documentElement.cloneNode(true);
    Pourquoi ce n'est pas top??

    Et sinon c'est franchement compliqué d'isoler les parties qui ont changées vu que ça se passe à plein de niveau différents...assez compliqué à gérer quoi!

Discussions similaires

  1. [DOM] Remplacer un objet DOM par du code HTML brut
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/04/2009, 15h14
  2. Remplacement d'un texte par un autre
    Par Iria77 dans le forum Général Python
    Réponses: 3
    Dernier message: 21/08/2006, 08h56
  3. remplacement d'une chaine par une autre
    Par zalalus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2006, 10h09
  4. Remplacement d'un segment par un autre
    Par p0Kep0K dans le forum Langage
    Réponses: 3
    Dernier message: 09/02/2006, 18h45
  5. remplacement d'une valeur par une autre
    Par hugoos dans le forum Langage
    Réponses: 9
    Dernier message: 20/09/2005, 21h43

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