111 votes

Comment déplacer un iFrame dans le DOM sans perdre son état?

Jetez un oeil à cette simple HTML:

<div id="wrap1">
  <iframe id="iframe1"></iframe>
</div>
<div id="warp2">
  <iframe id="iframe2"></iframe>
</div>

Disons que j'ai voulu déplacer l'enveloppe de sorte que l' #wrap2 serait avant l' #wrap1. Les iframes sont pollués par du JavaScript. Je suis conscient de jQuery .insertAfter() et .insertBefore(). Cependant, lorsque j'utilise ceux-ci, l'iFrame perd tous ses HTML, et JavaScript variables et événements.

Disons que ce qui suit a été l'iFrame HTML:

<html>
  <head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
      // The variable below would change on click
      // This represents changes on variables after the code is loaded
      // These changes should remain after the iFrame is moved
      variableThatChanges = false;
      $(function(){
        $("body").click(function(){ 
          variableThatChanges = true; 
        });
      });
    </script>
  </head>
  <body>
    <div id='anything'>Illustrative Example</div>
  </body>
</html>

Dans le code ci-dessus, la variable variableThatChanges serait...changer si l'utilisateur a cliqué sur le corps. Cette variable, et l'événement de clic, devrait rester après l'iFrame est déplacé (ainsi que toutes les autres variables/les événements qui ont été commencés)

Ma question est la suivante: avec JavaScript (avec ou sans jQuery), comment puis-je déplacer l'envelopper les nœuds du DOM (et leurs iframe childs), de sorte que l'iFrame de la fenêtre reste le même, et l'iFrame événements/les variables/etc restent les mêmes?

52voto

Kevin B Points 57721

Il n'est pas possible de déplacer un iframe d'un endroit à l'autre sans le recharger.

Voici un exemple utilisant le javascript natif: http://jsfiddle.net/pZ23B/

 var wrap1 = document.getElementById('wrap1');
var wrap2 = document.getElementById('wrap2');
setTimeout(function(){
    document.getElementsByTagName('body')[0].appendChild(wrap1);
},10000);
 

7voto

mattdlockyer Points 2098

Si vous avez créé l'iFrame sur la page et tout simplement besoin de le déplacer de la position de l'essayer cette approche:

Ajouter l'iFrame pour le corps et en utilisant un z-index et en haut,à gauche,largeur,hauteur pour mettre l'iFrame où vous voulez.

Même CSS zoom fonctionne sur le corps sans rechargement qui est génial!

Je maintiens deux etats pour mon "widget" et il est injecté en place dans les DOM ou à l'organisme à l'aide de cette méthode.

Ceci est utile lorsque d'autres contenus ou les bibliothèques de l'écraser ou de la courge votre iFrame.

BOOM!

6voto

Matt H Points 3273

Malheureusement, la propriété parentNode d'un élément HTML DOM est en lecture seule. Vous pouvez bien sûr ajuster les positions des iframes, mais vous ne pouvez pas modifier leur emplacement dans le DOM et préserver leurs états.

Voir ce jsfiddle que j'ai créé qui fournit un bon banc d'essai. http://jsfiddle.net/RpHTj/1/

Cliquez sur la case pour basculer la valeur. Cliquez sur le "déplacer" pour exécuter le javascript.

0voto

Abdullah Jibaly Points 14269
var w2 = $('#wrap2').detach();
$('#wrap1').parent().prepend(w2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X