A follow-up to [6578] (which stopped adding expandos to elements that didn't have...
[jquery.git] / src / manipulation.js
index b883567..547acc1 100644 (file)
@@ -111,12 +111,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 +123,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;
                }
        },
 
@@ -189,15 +187,21 @@ jQuery.fn.extend({
 
                // See if we can take a shortcut and just use innerHTML
                } else if ( typeof value === "string" && !/<script/i.test( value ) &&
-                       this[0] && !jQuery.isXMLDoc( this[0] ) &&
+                       (!jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
                        !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
 
-                       for ( var i = 0, l = this.length; i < l; i++ ) {
-                               // Remove element nodes and prevent memory leaks
-                               if ( this[i].nodeType === 1 ) {
-                                       cleanData( this[i].getElementsByTagName("*") );
-                                       this[i].innerHTML = value;
+                       try {
+                               for ( var i = 0, l = this.length; i < l; i++ ) {
+                                       // Remove element nodes and prevent memory leaks
+                                       if ( this[i].nodeType === 1 ) {
+                                               cleanData( this[i].getElementsByTagName("*") );
+                                               this[i].innerHTML = value;
+                                       }
                                }
+
+                       // If using innerHTML throws an exception, use the fallback method
+                       } catch(e) {
+                               this.empty().append( value );
                        }
 
                } else {