aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Gibson <richard.gibson@gmail.com>2013-04-22 21:08:18 -0400
committerRichard Gibson <richard.gibson@gmail.com>2013-04-22 21:10:06 -0400
commitd605322c105f4edc37e9a6357af23c4cee53c2cc (patch)
tree662980587d3f80512b6ca04418d8d6f3fae17b54
parent29b0e5202a4d126aa939fc5969eed401c14ae28e (diff)
downloadjquery-d605322c105f4edc37e9a6357af23c4cee53c2cc.tar.gz
jquery-d605322c105f4edc37e9a6357af23c4cee53c2cc.zip
Fix #13810: .replaceWith(nextSibling)
(cherry picked from commit d8f7e8371230a6dd504ca02e65442745b6ff6ce2)
-rw-r--r--src/manipulation.js4
-rw-r--r--test/unit/manipulation.js14
2 files changed, 17 insertions, 1 deletions
diff --git a/src/manipulation.js b/src/manipulation.js
index 8806455eb..0b6a2d7a0 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -207,6 +207,10 @@ jQuery.fn.extend({
parent = args[ i++ ];
if ( parent ) {
+ // Don't use the snapshot next if it has moved (#13810)
+ if ( next && next.parentNode !== parent ) {
+ next = this.nextSibling;
+ }
jQuery( this ).remove();
parent.insertBefore( elem, next );
}
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 8311ee134..6a6851142 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -920,7 +920,7 @@ test( "insertAfter(String|Element|Array<Element>|jQuery)", function() {
function testReplaceWith( val ) {
var tmp, y, child, child2, set, non_existent, $div,
- expected = 26;
+ expected = 29;
expect( expected );
@@ -996,6 +996,18 @@ function testReplaceWith( val ) {
equal( set[0].childNodes.length, 0, "No effect on a disconnected node." );
+ child = jQuery("#qunit-fixture").children().first();
+ $div = jQuery("<div class='pathological'/>").insertBefore( child );
+ $div.replaceWith( $div );
+ deepEqual( jQuery( ".pathological", "#qunit-fixture" ).get(), $div.get(),
+ "Self-replacement" );
+ $div.replaceWith( child );
+ deepEqual( jQuery("#qunit-fixture").children().first().get(), child.get(),
+ "Replacement with following sibling (#13810)" );
+ deepEqual( jQuery( ".pathological", "#qunit-fixture" ).get(), [],
+ "Replacement with following sibling (context removed)" );
+
+
non_existent = jQuery("#does-not-exist").replaceWith( val("<b>should not throw an error</b>") );
equal( non_existent.length, 0, "Length of non existent element." );