diff --git a/src/manipulation.js b/src/manipulation.js index 547acc184f..ef4eb3e09a 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -90,6 +90,14 @@ jQuery.fn.extend({ }); }, + unwrap: function() { + return this.parent().each(function(){ + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + append: function() { return this.domManip(arguments, true, function(elem){ if ( this.nodeType === 1 ) { diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index 1b99b66701..b9cb35dedd 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -116,6 +116,37 @@ test("wrapInner(String|Element)", function() { // testWrapInner(functionReturningObj) // }) +var testUnwrap = function() { + expect(9); + + jQuery("body").append(' '); + + var abcd = jQuery('#unwrap1 > span, #unwrap2 > span').get(), + abcdef = jQuery('#unwrap span').get(); + + equals( jQuery('#unwrap1 span, #unwrap2 span:first').unwrap().length, 3, 'make #unwrap1 and #unwrap2 go away' ); + same( jQuery('#unwrap > span').get(), abcd, 'all four spans should still exist' ); + + same( jQuery('#unwrap3 span').unwrap().get(), jQuery('#unwrap3 > span').get(), 'make all b in #unwrap3 go away' ); + + same( jQuery('#unwrap3 span').unwrap().get(), jQuery('#unwrap > span.unwrap3').get(), 'make #unwrap3 go away' ); + + same( jQuery('#unwrap').children().get(), abcdef, '#unwrap only contains 6 child spans' ); + + same( jQuery('#unwrap > span').unwrap().get(), jQuery('body > span.unwrap').get(), 'make the 6 spans become children of body' ); + + same( jQuery('body > span.unwrap').unwrap().get(), jQuery('body > span.unwrap').get(), 'can\'t unwrap children of body' ); + same( jQuery('body > span.unwrap').unwrap().get(), abcdef, 'can\'t unwrap children of body' ); + + same( jQuery('body > span.unwrap').get(), abcdef, 'body contains 6 .unwrap child spans' ); + + jQuery('body > span.unwrap').remove(); +} + +test("unwrap()", function() { + testUnwrap(); +}); + var testAppend = function(valueObj) { expect(21); var defaultText = 'Try them out:'