diff options
author | Sai Wong <sai.wong@huffingtonpost.com> | 2012-10-16 16:50:30 -0400 |
---|---|---|
committer | Rick Waldron <waldron.rick@gmail.com> | 2012-10-16 16:50:40 -0400 |
commit | 0c1cea376196d24acc73c64dbdff1880a2dfd006 (patch) | |
tree | 773b1b6747460fe896d1736045a0d4b4cdbc5e0f /src | |
parent | 51feba61197b837b7d55754a56e12f66f0624ba1 (diff) | |
download | jquery-0c1cea376196d24acc73c64dbdff1880a2dfd006.tar.gz jquery-0c1cea376196d24acc73c64dbdff1880a2dfd006.zip |
Refactored before/after/replaceWith to not pushStack. Fixes #12664, closes gh-987
Diffstat (limited to 'src')
-rw-r--r-- | src/manipulation.js | 85 |
1 files changed, 38 insertions, 47 deletions
diff --git a/src/manipulation.js b/src/manipulation.js index 11b6cc430..7d18d04c9 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -160,29 +160,19 @@ jQuery.fn.extend({ }, before: function() { - if ( !isDisconnected( this[0] ) ) { - return this.domManip(arguments, false, function( elem ) { + return this.domManip( arguments, false, function( elem ) { + if ( !isDisconnected( this ) ) { this.parentNode.insertBefore( elem, this ); - }); - } - - if ( arguments.length ) { - var set = jQuery.clean( arguments ); - return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); - } + } + }); }, after: function() { - if ( !isDisconnected( this[0] ) ) { - return this.domManip(arguments, false, function( elem ) { + return this.domManip( arguments, false, function( elem ) { + if ( !isDisconnected( this ) ) { this.parentNode.insertBefore( elem, this.nextSibling ); - }); - } - - if ( arguments.length ) { - var set = jQuery.clean( arguments ); - return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); - } + } + }); }, // keepData is for internal use only--do not document @@ -277,40 +267,41 @@ jQuery.fn.extend({ }, replaceWith: function( value ) { - if ( !isDisconnected( this[0] ) ) { - // Make sure that the elements are removed from the DOM before they are inserted - // this can help fix replacing a parent with child elements - if ( jQuery.isFunction( value ) ) { - return this.each(function( index ) { - // HTML argument replaced by "this" element - // 1. There were no supporting tests - // 2. There was no internal code relying on this - // 3. There was no documentation of an html argument - jQuery( this ).replaceWith( value.call( this, index, this ) ); - }); - } + var self = this, + isFunc = jQuery.isFunction( value ); - if ( typeof value !== "string" ) { - value = jQuery( value ).detach(); - } + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).detach(); + } - return this.each(function() { - var next = this.nextSibling, - parent = this.parentNode; + this.each( function( i ) { + var next = this.nextSibling, + parent = this.parentNode, + // HTML argument replaced by "this" element + // 1. There were no supporting tests + // 2. There was no internal code relying on this + // 3. There was no documentation of an html argument + val = !isFunc ? value : value.call( this, i, this ); + + if ( isDisconnected( this ) ) { + // for disconnected elements, we replace with the new content in the set. We use + // clone here to ensure that each replaced instance is unique + self[ i ] = jQuery( val ).clone()[ 0 ]; + return; + } - jQuery( this ).remove(); + jQuery( this ).remove(); - if ( next ) { - jQuery(next).before( value ); - } else { - jQuery(parent).append( value ); - } - }); - } + if ( next ) { + jQuery( next ).before( val ); + } else { + jQuery( parent ).append( val ); + } + }); - return this.length ? - this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : - this; + return this; }, detach: function( selector ) { |