2009-10-09 6 views
3

Je suis un balisage qui ressemble à ceci:Essayer jQuery wrapAll semble envelopper le contenu deux fois

<body> 
    <... 
    a lot of tags from the web site 
    ...> 
    <script type="text/javascript" src="http://cdn.jquerytools.org/1.1.1/jquery.tools.min.js"></script> 
    <script type="text/javascript" src="my_script.js"></script> 
<body> 

Je veux que ça finisse de cette façon:

<body> 
    <div id="body-content"> 
     <... 
     a lot of tags from the web site 
     ...> 
     <script type="text/javascript" src="http://cdn.jquerytools.org/1.1.1/jquery.tools.min.js"></script> 
     <script type="text/javascript" src="my_script.js"></script> 
    </div> 
    <div id="isolated-component"> 
</div> 
<body> 

je peux remplir # isolated- composant et les supprimer facilement d'une sélection jQuery.

J'ai essayé:

jQuery("body").children().wrapAll("<div id='body-content'></div>") 
         .after("<div id='isolated-component'></div>"); 

Mais a fini avec:

<html> 
<head> 
<body> 
    <div id="body-content"> 
     <div id="body-content"> 
      <... page content ...> 
     </div> 
     <div id="isolated-component"/> 
     <div id="isolated-component"/> 
    </div> 
    <script src="my_script.js" type="text/javascript"> 
    </script> 
</body> 
<div id="_firebugConsole" style="display: none;" FirebugVersion="1.4.3" methodName="log"/> 
</html> 
+0

Dans quel contexte votre code est appelé. Le script peut être appelé à l'intérieur d'un événement qui est levé deux fois, mais je ne peux pas dire à partir de ce que vous avez inclus. –

+0

Vous savez que vous êtes actuellement sur stackoverflow maintenant? –

+0

Lol, désolé. J'ai posté ceci à Doctype aussi, je voulais essayer ce nouveau site :-) –

Répondre

2

Ok, j'ai trouvé pourquoi. Lorsque vous déplacez le contenu du corps vers le DIV, il déplace les balises de script, y compris le JS, déplaçant le contenu et amenant le script à s'exécuter une seconde fois. Maintenant, je ne sais pas pourquoi cela ne se termine pas dans une boucle infinie, mais c'est bon à savoir: ne déplacez jamais les balises de script, vous les ferez recharger.

0

Je ne sais pas si cela va résoudre votre problème, mais vous devez utiliser wrapInner:

jQuery("body").wrapInner("<div id='body-content'></div>") 
    .after("<div id='isolated-component'></div>"); 
Questions connexes