Commit d8f7e837 authored by Richard Gibson's avatar Richard Gibson

Fix #13810: .replaceWith(nextSibling)

parent 67a080b2
...@@ -173,6 +173,10 @@ jQuery.fn.extend({ ...@@ -173,6 +173,10 @@ jQuery.fn.extend({
parent = args[ i++ ]; parent = args[ i++ ];
if ( parent ) { if ( parent ) {
// Don't use the snapshot next if it has moved (#13810)
if ( next && next.parentNode !== parent ) {
next = this.nextSibling;
}
jQuery( this ).remove(); jQuery( this ).remove();
parent.insertBefore( elem, next ); parent.insertBefore( elem, next );
} }
......
...@@ -879,7 +879,7 @@ test( "insertAfter(String|Element|Array<Element>|jQuery)", function() { ...@@ -879,7 +879,7 @@ test( "insertAfter(String|Element|Array<Element>|jQuery)", function() {
function testReplaceWith( val ) { function testReplaceWith( val ) {
var tmp, y, child, child2, set, non_existent, $div, var tmp, y, child, child2, set, non_existent, $div,
expected = 26; expected = 29;
expect( expected ); expect( expected );
...@@ -955,6 +955,18 @@ function testReplaceWith( val ) { ...@@ -955,6 +955,18 @@ function testReplaceWith( val ) {
equal( set[0].childNodes.length, 0, "No effect on a disconnected node." ); 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>") ); 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." ); equal( non_existent.length, 0, "Length of non existent element." );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment