Ticket #9134 (closed bug: duplicate)
wrapInner causes scripts in body to be run twice
| Reported by: | Nicholai Burton <nicholai.burton@…> | Owned by: | gibson042 |
|---|---|---|---|
| Priority: | high | Milestone: | 1.next |
| Component: | manipulation | Version: | 1.6 |
| Keywords: | Cc: | ||
| Blocking: | Blocked by: | #11795 |
Description
If wrapInner is called from within the body of a page, it runs itself twice, and any other scripts in the body run twice regardless of where wrapInner is run. Consider this code snippet to duplicate.
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
</head>
<body>
<div id="initialdiv">this is the main div at first</div>
<div id="anotherdiv">this is another div at first</div>
<script type="text/javascript">
$(document).ready(function() {
$('body').wrapInner('<div id="bodywrap"></div>');
});
alert("watch me duplicate");
</script>
</body>
Change History
comment:2 Changed 2 years ago by Nicholai Burton <nicholai.burton@…>
The use case is for when you don't have control of a page's source code and need to modify it (in my case to wrap it in two divs with margin:auto on each, to center the page). The docs describe the method as a way to move elements around, but it appears to be recreating them. With traditional JS I would do this: http://jsfiddle.net/adGZS/. So it may just be a documentation issue if there is an alternative jQuery method to wrap items by just moving the children into the wrapper.
comment:3 Changed 2 years ago by timmywil
- Priority changed from undecided to high
- Resolution set to duplicate
- Status changed from new to closed
- Component changed from unfiled to manipulation
comment:5 Changed 2 years ago by dmethvin
- Status changed from closed to reopened
- Resolution duplicate deleted
We're going to reopen this and try to fix it internally. Anyone who manually removes and then reinserts scripts is responsible for making sure they don't re-execute.
comment:9 Changed 8 months ago by mikesherov
- Owner set to gibson042
- Status changed from open to assigned
comment:10 Changed 8 months ago by gibson042
- Status changed from assigned to closed
- Resolution set to duplicate
Duplicate of #10470.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.

In my opinion, this feels like a weird way to be using wrapInner... this seems like it's expected that it would re-run the script block if it has to restructure the DOM.
In any case, here is the jsfiddle: http://jsfiddle.net/jboesch26/5ynpG/