Make sure that the previous element is removed from the page before the next is inserted, in replaceWith. Using a variation of the patch by snaury. Fixes #2697.
This commit is contained in:
parent
aae0617c83
commit
2a6de9ab66
|
@ -210,7 +210,17 @@ jQuery.fn.extend({
|
||||||
|
|
||||||
replaceWith: function( value ) {
|
replaceWith: function( value ) {
|
||||||
if ( this[0] && this[0].parentNode ) {
|
if ( this[0] && this[0].parentNode ) {
|
||||||
return this.after( value ).remove();
|
return this.each(function(){
|
||||||
|
var next = this.nextSibling, parent = this.parentNode;
|
||||||
|
|
||||||
|
jQuery(this).remove();
|
||||||
|
|
||||||
|
if ( next ) {
|
||||||
|
jQuery(next).before( value );
|
||||||
|
} else {
|
||||||
|
jQuery(parent).append( value );
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
|
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
|
||||||
}
|
}
|
||||||
|
|
|
@ -466,7 +466,7 @@ test("insertAfter(String|Element|Array<Element>|jQuery)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
var testReplaceWith = function(val) {
|
var testReplaceWith = function(val) {
|
||||||
expect(12);
|
expect(14);
|
||||||
jQuery('#yahoo').replaceWith(val( '<b id="replace">buga</b>' ));
|
jQuery('#yahoo').replaceWith(val( '<b id="replace">buga</b>' ));
|
||||||
ok( jQuery("#replace")[0], 'Replace element with string' );
|
ok( jQuery("#replace")[0], 'Replace element with string' );
|
||||||
ok( !jQuery("#yahoo")[0], 'Verify that original element is gone, after string' );
|
ok( !jQuery("#yahoo")[0], 'Verify that original element is gone, after string' );
|
||||||
|
@ -491,6 +491,13 @@ var testReplaceWith = function(val) {
|
||||||
var set = jQuery("<div/>").replaceWith(val("<span>test</span>"));
|
var set = jQuery("<div/>").replaceWith(val("<span>test</span>"));
|
||||||
equals( set[0].nodeName.toLowerCase(), "span", "Replace the disconnected node." );
|
equals( set[0].nodeName.toLowerCase(), "span", "Replace the disconnected node." );
|
||||||
equals( set.length, 1, "Replace the disconnected node." );
|
equals( set.length, 1, "Replace the disconnected node." );
|
||||||
|
|
||||||
|
var $div = jQuery("<div class='replacewith'></div>").appendTo("body");
|
||||||
|
$div.replaceWith("<div class='replacewith'></div><script>" +
|
||||||
|
"equals(jQuery('.replacewith').length, 1, 'Check number of elements in page.');" +
|
||||||
|
"</script>");
|
||||||
|
equals(jQuery('.replacewith').length, 1, 'Check number of elements in page.');
|
||||||
|
jQuery('.replacewith').remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
test("replaceWith(String|Element|Array<Element>|jQuery)", function() {
|
test("replaceWith(String|Element|Array<Element>|jQuery)", function() {
|
||||||
|
|
Loading…
Reference in a new issue