diff options
author | jeresig <jeresig@gmail.com> | 2010-02-13 02:49:04 -0500 |
---|---|---|
committer | jeresig <jeresig@gmail.com> | 2010-02-13 02:49:04 -0500 |
commit | 726fda08bea7bbd72d73be4563aba855c63966fe (patch) | |
tree | ab9f2cc4578f3cd7e1739aeb19fedf99fa2021f2 /src | |
parent | a7dc66b8325906066071fe5c44ce55ecf2eb5aed (diff) | |
download | jquery-726fda08bea7bbd72d73be4563aba855c63966fe.tar.gz jquery-726fda08bea7bbd72d73be4563aba855c63966fe.zip |
Make sure the fragment isn't used if it's not the same set we're working with. Fixes #6068.
Diffstat (limited to 'src')
-rw-r--r-- | src/manipulation.js | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/manipulation.js b/src/manipulation.js index b2a9df919..1453f98c5 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -300,7 +300,7 @@ jQuery.fn.extend({ }, domManip: function( args, table, callback ) { - var results, first, value = args[0], scripts = [], fragment; + var results, first, value = args[0], scripts = [], fragment, parent; // We can't cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) { @@ -318,9 +318,12 @@ jQuery.fn.extend({ } if ( this[0] ) { + parent = value && value.parentNode; + // If we're in a fragment, just use that instead of building a new one - if ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) { - results = { fragment: args[0].parentNode }; + if ( parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) { + results = { fragment: parent }; + } else { results = buildFragment( args, this, scripts ); } @@ -429,9 +432,10 @@ jQuery.each({ replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { - var ret = [], insert = jQuery( selector ); + var ret = [], insert = jQuery( selector ), + parent = this.length === 1 && this[0].parentNode; - if ( this.length === 1 && this[0].parentNode && this[0].parentNode.nodeType === 11 && insert.length === 1 ) { + if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { insert[ original ]( this[0] ); return this; |