aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeresig <jeresig@gmail.com>2009-12-05 15:30:36 -0500
committerjeresig <jeresig@gmail.com>2009-12-05 15:30:36 -0500
commit2a6de9ab66653e5e424d9cc79d195b555158d04f (patch)
treecc6385fe4f107bc2163a65cdc366c3867b27199c
parentaae0617c834a030902cd8da2714f852d6a1431be (diff)
downloadjquery-2a6de9ab66653e5e424d9cc79d195b555158d04f.tar.gz
jquery-2a6de9ab66653e5e424d9cc79d195b555158d04f.zip
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.
-rw-r--r--src/manipulation.js12
-rw-r--r--test/unit/manipulation.js9
2 files changed, 19 insertions, 2 deletions
diff --git a/src/manipulation.js b/src/manipulation.js
index baf99d52d..7128d11cf 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -210,7 +210,17 @@ jQuery.fn.extend({
replaceWith: function( value ) {
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 {
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index ec96c10b8..c8ea240b8 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -466,7 +466,7 @@ test("insertAfter(String|Element|Array&lt;Element&gt;|jQuery)", function() {
});
var testReplaceWith = function(val) {
- expect(12);
+ expect(14);
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' );
@@ -491,6 +491,13 @@ var testReplaceWith = function(val) {
var set = jQuery("<div/>").replaceWith(val("<span>test</span>"));
equals( set[0].nodeName.toLowerCase(), "span", "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&lt;Element&gt;|jQuery)", function() {