mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Final pass at fixing #5785. Need to make sure that inner-nodes are detached before the remove() occurs (and it should still occur, the nodes are being obliterated.
This commit is contained in:
parent
cb4880ee83
commit
3e9ef6f5c0
@ -213,10 +213,16 @@ jQuery.fn.extend({
|
|||||||
|
|
||||||
replaceWith: function( value ) {
|
replaceWith: function( value ) {
|
||||||
if ( this[0] && this[0].parentNode ) {
|
if ( this[0] && this[0].parentNode ) {
|
||||||
|
// 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 ) ) {
|
||||||
|
value = jQuery( value ).detach();
|
||||||
|
}
|
||||||
|
|
||||||
return this.each(function() {
|
return this.each(function() {
|
||||||
var next = this.nextSibling, parent = this.parentNode;
|
var next = this.nextSibling, parent = this.parentNode;
|
||||||
|
|
||||||
jQuery(this).detach();
|
jQuery(this).remove();
|
||||||
|
|
||||||
if ( next ) {
|
if ( next ) {
|
||||||
jQuery(next).before( value );
|
jQuery(next).before( value );
|
||||||
|
@ -626,7 +626,7 @@ test("insertAfter(String|Element|Array<Element>|jQuery)", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var testReplaceWith = function(val) {
|
var testReplaceWith = function(val) {
|
||||||
expect(17);
|
expect(16);
|
||||||
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' );
|
||||||
@ -652,12 +652,22 @@ var testReplaceWith = function(val) {
|
|||||||
var tmp = jQuery("<div/>").appendTo("body").click(function(){ ok(true, "Newly bound click run." ); });
|
var tmp = jQuery("<div/>").appendTo("body").click(function(){ ok(true, "Newly bound click run." ); });
|
||||||
var y = jQuery('#yahoo').click(function(){ ok(true, "Previously bound click run." ); });
|
var y = jQuery('#yahoo').click(function(){ ok(true, "Previously bound click run." ); });
|
||||||
var child = y.append("<b>test</b>").find("b").click(function(){ ok(true, "Child bound click run." ); return false; });
|
var child = y.append("<b>test</b>").find("b").click(function(){ ok(true, "Child bound click run." ); return false; });
|
||||||
|
var child2 = y.append("<u>test</u>").find("u").click(function(){ ok(true, "Child 2 bound click run." ); return false; });
|
||||||
|
|
||||||
y.replaceWith( tmp );
|
y.replaceWith( tmp );
|
||||||
|
|
||||||
tmp.click();
|
tmp.click();
|
||||||
y.click();
|
y.click(); // Shouldn't be run
|
||||||
child.click();
|
child.click(); // Shouldn't be run
|
||||||
|
|
||||||
|
reset();
|
||||||
|
|
||||||
|
y = jQuery('#yahoo').click(function(){ ok(true, "Previously bound click run." ); });
|
||||||
|
var child2 = y.append("<u>test</u>").find("u").click(function(){ ok(true, "Child 2 bound click run." ); return false; });
|
||||||
|
|
||||||
|
y.replaceWith( child2 );
|
||||||
|
|
||||||
|
child2.click();
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user