Skip to content
Permalink
Browse files

Final pass at fixing #5785. Need to make sure that inner-nodes are de…

…tached before the remove() occurs (and it should still occur, the nodes are being obliterated.
  • Loading branch information
jeresig committed Jan 11, 2010
1 parent cb4880e commit 3e9ef6f5c08e63a90ef2dfd3bdc833994e7a0ac8
Showing with 20 additions and 4 deletions.
  1. +7 −1 src/manipulation.js
  2. +13 −3 test/unit/manipulation.js
@@ -213,10 +213,16 @@ jQuery.fn.extend({

replaceWith: function( value ) {
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() {
var next = this.nextSibling, parent = this.parentNode;

jQuery(this).detach();
jQuery(this).remove();

if ( next ) {
jQuery(next).before( value );
@@ -626,7 +626,7 @@ test("insertAfter(String|Element|Array<Element>|jQuery)", function() {
});

var testReplaceWith = function(val) {
expect(17);
expect(16);
jQuery('#yahoo').replaceWith(val( '<b id="replace">buga</b>' ));
ok( jQuery("#replace")[0], 'Replace element with 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 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 child2 = y.append("<u>test</u>").find("u").click(function(){ ok(true, "Child 2 bound click run." ); return false; });

y.replaceWith( tmp );

tmp.click();
y.click();
child.click();
y.click(); // Shouldn't be run
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();

0 comments on commit 3e9ef6f

Please sign in to comment.
You can’t perform that action at this time.