aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSai Wong <sai.wong@huffingtonpost.com>2012-10-16 16:50:30 -0400
committerRick Waldron <waldron.rick@gmail.com>2012-10-16 16:50:40 -0400
commit0c1cea376196d24acc73c64dbdff1880a2dfd006 (patch)
tree773b1b6747460fe896d1736045a0d4b4cdbc5e0f /src
parent51feba61197b837b7d55754a56e12f66f0624ba1 (diff)
downloadjquery-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.js85
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 ) {