Side navigation
#14131 closed bug (notabug)
Opened July 14, 2013 10:27PM UTC
Closed July 16, 2013 12:08AM UTC
Last modified July 16, 2013 06:05PM UTC
JQuery warp function is not working properly
| Reported by: | dgofman@gmail.com | Owned by: | |
|---|---|---|---|
| Priority: | undecided | Milestone: | None |
| Component: | unfiled | Version: | 1.10.2 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
Please review my code I create two scripts: native JavaScript and using JQuery wrap function. I would like to report the wrap function is not working properly at least before and after API are not working:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<div id="native" style="background-color:green"></div>
<br/><br/>
<div id="jquery" style="background-color:red"></div>
</body>
<script>
var container1 = document.getElementById("native");
//create element
var div = document.createElement("div");
div.innerHTML = "HELLO WORLD";
container1.appendChild(div);
//append
var p = document.createElement("p");
p.innerHTML = "LAST";
container1.appendChild(p);
//wrap
var span = document.createElement("span");
span.style.color = "blue";
div.parentNode.insertBefore(span, div);
span.appendChild(div);
//before
var p = document.createElement("p");
p.innerHTML = "BEFORE";
span.parentNode.insertBefore(p, span);
//after
var p = document.createElement("p");
p.innerHTML = "AFTER";
span.parentNode.insertBefore(p, span.nextSibling);
</script>
<script>
var container2 = $("#jquery");
//create element
var div = $("<div></div>");
div.html("HELLO WORLD");
container2.append(div);
//append
var p = $("<p></p>");
p.html("LAST");
container2.append(p);
//wrap
var span = $("<span></span>");
span.css("color", "blue");
div.wrap(span);
//span = div;
//before
var p = $("<p></p>");
p.html("BEFORE");
span.before(p);
//after
var p = $("<p></p>");
p.html("AFTER");
span.after(p);
</script>
</html>
Attachments (0)
Change History (4)
Changed July 14, 2013 10:32PM UTC by comment:1
Changed July 16, 2013 12:08AM UTC by comment:2
| resolution: | → notabug |
|---|---|
| status: | new → closed |
We have to clone the element with which the collection is wrapped, which means a new element will be created based on the element passed to wrap. This is to provide a mechanism to conveniently wrap more than one element at a time with the same html. It also avoids unexpected behavior when wrapping with existing elements. Below is one way to get the new span element:
Changed July 16, 2013 05:12PM UTC by comment:3
HI timmywil,
Thanks for your time, but for me your workaround looks very strange
I have a div component (input/select etc)
var div = $("<div></div>");
now I am creating a spam wrapper and apply for the div: <span><div></div></span>
var span = $("<span></span>");
div.wrap(span);
Why should I ask div where is my span if I already have a span variable????
FIX
Get the correct span
span = div.parent();
//before
var p = $("<p></p>");
p.html("BEFORE");
span.before(p);
Changed July 16, 2013 06:05PM UTC by comment:4
This isn't a bug report, it's a request for jQuery programming help. Wrapping a block element in an inline element doesn't make much sense anyway. Ask for help on a forum.
http://jsfiddle.net/pDreG/