diff options
author | John Resig <jeresig@gmail.com> | 2009-01-12 14:07:14 +0000 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2009-01-12 14:07:14 +0000 |
commit | ea7837776022fe9f2ccdf00ede30728e6f24d919 (patch) | |
tree | 8c09ad2ad027f80ce7e1367c40bcaa935ed593f8 | |
parent | 0c97178553606c01b999441836e23f9f36c645a3 (diff) | |
download | jquery-ea7837776022fe9f2ccdf00ede30728e6f24d919.tar.gz jquery-ea7837776022fe9f2ccdf00ede30728e6f24d919.zip |
Only try to wrap the element if it's not disconnected, fixed #3828.
-rw-r--r-- | src/core.js | 28 | ||||
-rw-r--r-- | test/unit/core.js | 7 |
2 files changed, 21 insertions, 14 deletions
diff --git a/src/core.js b/src/core.js index 6c439a5a6..a11ceb430 100644 --- a/src/core.js +++ b/src/core.js @@ -206,20 +206,22 @@ jQuery.fn = jQuery.prototype = { }, wrapAll: function( html ) { - if ( this[0] ) + if ( this[0] ) { // The elements to wrap the target around - jQuery( html, this[0].ownerDocument ) - .clone() - .insertBefore( this[0] ) - .map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }) - .append(this); + var wrap = jQuery( html, this[0].ownerDocument ).clone(); + + if ( this[0].parentNode ) + wrap.insertBefore( this[0] ); + + wrap.map(function(){ + var elem = this; + + while ( elem.firstChild ) + elem = elem.firstChild; + + return elem; + }).append(this); + } return this; }, diff --git a/test/unit/core.js b/test/unit/core.js index 8483361a1..80a93353c 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -751,7 +751,7 @@ test("text()", function() { }); test("wrap(String|Element)", function() { - expect(8); + expect(10); var defaultText = 'Try them out:' var result = jQuery('#first').wrap('<div class="red"><span></span></div>').text(); equals( defaultText, result, 'Check for wrapping of on-the-fly html' ); @@ -776,6 +776,11 @@ test("wrap(String|Element)", function() { j.wrap("<i></i>"); equals( jQuery("#nonnodes > i").length, 3, "Check node,textnode,comment wraps ok" ); equals( jQuery("#nonnodes > i").text(), j.text() + j[1].nodeValue, "Check node,textnode,comment wraps doesn't hurt text" ); + + // Try wrapping a disconnected node + j = jQuery("<label/>").wrap("<li/>"); + equals( j[0].nodeName, "LABEL", "Element is a label" ); + equals( j[0].parentNode.nodeName, "LI", "Element has been wrapped" ); }); test("wrapAll(String|Element)", function() { |