Skip to content

Commit

Permalink
Made it so that appendTo, etc. return the inserted elements (thus usi…
Browse files Browse the repository at this point in the history
…ng pushStack, as well). Fixes bugs #3966 and #4182.
  • Loading branch information
jeresig committed Feb 18, 2009
1 parent 3e46bce commit 75a973d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
23 changes: 13 additions & 10 deletions src/core.js
Expand Up @@ -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 );
}
Expand Down Expand Up @@ -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 );
};
});

Expand Down
23 changes: 22 additions & 1 deletion test/unit/core.js
Expand Up @@ -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' );
Expand All @@ -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() {
Expand Down

0 comments on commit 75a973d

Please sign in to comment.