We only support wrapping the first element around an element (all others are ignored...
[jquery.git] / src / manipulation.js
index 233cb82..55017c1 100644 (file)
@@ -18,9 +18,13 @@ jQuery.fn.extend({
        },
 
        wrapAll: function( html ) {
+               if(jQuery.isFunction(html)) {
+                       return this.each(function() { jQuery(this).wrapAll(html.call(this)); });
+               }
+               
                if ( this[0] ) {
                        // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).clone();
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone();
 
                        if ( this[0].parentNode )
                                wrap.insertBefore( this[0] );
@@ -28,7 +32,7 @@ jQuery.fn.extend({
                        wrap.map(function(){
                                var elem = this;
 
-                               while ( elem.firstChild )
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 )
                                        elem = elem.firstChild;
 
                                return elem;
@@ -138,6 +142,14 @@ jQuery.fn.extend({
 
        domManip: function( args, table, callback ) {
                var fragment, scripts, cacheable, cached, cacheresults, first;
+               var value = args[0];
+
+               if ( jQuery.isFunction(value) ) {
+                       return this.each(function() {
+                               args[0] = value.call(this);
+                               return jQuery(this).domManip( args, table, callback );
+                       });
+               };
 
                if ( this[0] ) {
                        if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 ) {