Попытка jQuery wrap Все, кажется, дважды оборачивает содержимое
Я получил разметку, похожую на эту:
<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>
Я хочу, чтобы все закончилось таким образом:
<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>
Поэтому я могу заполнить #isolated-component и легко отбросить их из выборки jQuery.
Я попробовал это:
jQuery("body").children().wrapAll("<div id='body-content'></div>")
.after("<div id='isolated-component'></div>");
Но в конечном итоге:
<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>
2 ответа
Решение
Хорошо, я нашел почему. Когда вы перемещаете содержимое тела в DIV, он перемещает теги сценария, включая JS, перемещающий содержимое, и приводит к тому, что сценарий выполняется во второй раз. Теперь я не знаю, почему это не заканчивается бесконечным циклом, но это хорошо знать: никогда не перемещайте теги сценария, вы заставите их перезагрузить.
Я не уверен, что это решит вашу проблему, но вы должны использовать wrapInner
:
jQuery("body").wrapInner("<div id='body-content'></div>")
.after("<div id='isolated-component'></div>");