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
    Nouveau membre du Club 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
    Points : 35
    Points
    35
    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 681
    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 681
    Points : 5 221
    Points
    5 221
    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 642
    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 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    ???

    une tentative de cloneNode(true)

  4. #4
    Expert éminent

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    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
    Nouveau membre du Club 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
    Points : 35
    Points
    35
    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 éminent

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    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
    Nouveau membre du Club 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
    Points : 35
    Points
    35
    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