diff --git a/src/core.js b/src/core.js index 6c439a5a..a11ceb43 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; + var wrap = jQuery( html, this[0].ownerDocument ).clone(); - while ( elem.firstChild ) - elem = elem.firstChild; + if ( this[0].parentNode ) + wrap.insertBefore( this[0] ); - return elem; - }) - .append(this); + 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 8483361a..80a93353 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('
').text(); equals( defaultText, result, 'Check for wrapping of on-the-fly html' ); @@ -776,6 +776,11 @@ test("wrap(String|Element)", function() { j.wrap(""); 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("