Попытка jQuery wrapВсе, кажется, дважды оборачивает содержимое - PullRequest
3 голосов
/ 09 октября 2009

Я получил разметку, похожую на эту:

<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 ]

2 голосов
/ 09 октября 2009

Хорошо, я нашел почему. Когда вы перемещаете содержимое тела в DIV, он перемещает теги сценария, включая JS, перемещающий содержимое, и приводит к тому, что сценарий выполняется во второй раз. Теперь я не знаю, почему это не заканчивается бесконечным циклом, но это хорошо знать: никогда не перемещайте теги сценария, вы заставите их перезагрузить.

0 голосов
/ 09 октября 2009

Я не уверен, что это решит вашу проблему, но вы должны использовать wrapInner:

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