aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2009-02-18 16:29:43 +0000
committerJohn Resig <jeresig@gmail.com>2009-02-18 16:29:43 +0000
commit75a973da35d4ad6583ebef8c389cebbef61bc5b4 (patch)
treeb81d263a8a89654d1c914b38c7a739a378f84cb6
parent3e46bce751f062775be95a6bef3cf53096a3ed21 (diff)
downloadjquery-75a973da35d4ad6583ebef8c389cebbef61bc5b4.tar.gz
jquery-75a973da35d4ad6583ebef8c389cebbef61bc5b4.zip
Made it so that appendTo, etc. return the inserted elements (thus using pushStack, as well). Fixes bugs #3966 and #4182.
-rw-r--r--src/core.js23
-rw-r--r--test/unit/core.js23
2 files changed, 35 insertions, 11 deletions
diff --git a/src/core.js b/src/core.js
index c7d10f3c8..ba796bca9 100644
--- a/src/core.js
+++ b/src/core.js
@@ -502,13 +502,13 @@ jQuery.fn = jQuery.prototype = {
if ( this[0] ) {
var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
- first = fragment.firstChild,
- extra = this.length > 1 ? fragment.cloneNode(true) : fragment;
+ first = fragment.firstChild;
if ( first )
for ( var i = 0, l = this.length; i < l; i++ )
- callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment );
-
+ callback.call( root(this[i], first), this.length > 1 || i > 0 ?
+ fragment.cloneNode(true) : fragment );
+
if ( scripts )
jQuery.each( scripts, evalScript );
}
@@ -1189,13 +1189,16 @@ jQuery.each({
insertAfter: "after",
replaceAll: "replaceWith"
}, function(name, original){
- jQuery.fn[ name ] = function() {
- var args = arguments;
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = [], insert = jQuery( selector );
- return this.each(function(){
- for ( var i = 0, length = args.length; i < length; i++ )
- jQuery( args[ i ] )[ original ]( this );
- });
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = (i > 0 ? this.clone(true) : this).get();
+ jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, selector );
};
});
diff --git a/test/unit/core.js b/test/unit/core.js
index e7f09f62c..9befade7d 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -909,7 +909,7 @@ test("append(String|Element|Array&lt;Element&gt;|jQuery)", function() {
});
test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
- expect(7);
+ expect(12);
var defaultText = 'Try them out:'
jQuery('<b>buga</b>').appendTo('#first');
equals( jQuery("#first").text(), defaultText + 'buga', 'Check if text appending works' );
@@ -936,6 +936,27 @@ test("appendTo(String|Element|Array&lt;Element&gt;|jQuery)", function() {
reset();
jQuery('#select1').appendTo('#foo');
t( 'Append select', '#foo select', ['select1'] );
+
+ reset();
+ var div = jQuery("<div/>").click(function(){
+ ok(true, "Running a cloned click.");
+ });
+ div.appendTo("#main, #moretests");
+
+ jQuery("#main div:last").click();
+ jQuery("#moretests div:last").click();
+
+ reset();
+ var div = jQuery("<div/>").appendTo("#main, #moretests");
+
+ equals( div.length, 2, "appendTo returns the inserted elements" );
+
+ div.addClass("test");
+
+ ok( jQuery("#main div:last").hasClass("test"), "appendTo element was modified after the insertion" );
+ ok( jQuery("#moretests div:last").hasClass("test"), "appendTo element was modified after the insertion" );
+
+ reset();
});
test("prepend(String|Element|Array&lt;Element&gt;|jQuery)", function() {