Adding in .unwrap() support, thanks to Ben Alman! Fixes #5191.
[jquery.git] / src / manipulation.js
index 2a1e923..ef4eb3e 100644 (file)
@@ -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 ) {
@@ -111,12 +119,10 @@ jQuery.fn.extend({
                        return this.domManip(arguments, false, function(elem){
                                this.parentNode.insertBefore( elem, this );
                        });
-               } else {
-                       var set = jQuery.isFunction(arguments[0]) ?
-                               jQuery( arguments[0]() ) :
-                               jQuery.apply(jQuery, arguments);
-
-                       return this.pushStack( set.add( this ), "before", arguments );
+               } else if ( arguments.length ) {
+                       var set = jQuery(arguments[0]);
+                       set.push.apply( set, this.toArray() );
+                       return this.pushStack( set, "before", arguments );
                }
        },
 
@@ -125,10 +131,10 @@ jQuery.fn.extend({
                        return this.domManip(arguments, false, function(elem){
                                this.parentNode.insertBefore( elem, this.nextSibling );
                        });
-               } else {
-                       return jQuery.isFunction(arguments[0]) ?
-                               this.add( arguments[0]() ) :
-                               this.add.apply( this, arguments );
+               } else if ( arguments.length ) {
+                       var set = this.pushStack( this, "after", arguments );
+                       set.push.apply( set, jQuery(arguments[0]).toArray() );
+                       return set;
                }
        },