Skip to content

Commit 0db207d

Browse files
committed
Optimize for the case where a fragment-bound element is being injected into one other element.
1 parent 98c7248 commit 0db207d

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/core.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ jQuery.fn = jQuery.prototype = {
100100
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
101101
}
102102

103+
return jQuery.merge( this, selector );
104+
103105
// HANDLE: $("#id")
104106
} else {
105107
elem = document.getElementById( match[2] );

src/manipulation.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -415,13 +415,20 @@ jQuery.each({
415415
}, function( name, original ) {
416416
jQuery.fn[ name ] = function( selector ) {
417417
var ret = [], insert = jQuery( selector );
418-
419-
for ( var i = 0, l = insert.length; i < l; i++ ) {
420-
var elems = (i > 0 ? this.clone(true) : this).get();
421-
jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
422-
ret = ret.concat( elems );
418+
419+
if ( this.length === 1 && this[0].parentNode && this[0].parentNode.nodeType === 11 && insert.length === 1 ) {
420+
insert[ original ]( this[0] );
421+
return this;
422+
423+
} else {
424+
for ( var i = 0, l = insert.length; i < l; i++ ) {
425+
var elems = (i > 0 ? this.clone(true) : this).get();
426+
jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
427+
ret = ret.concat( elems );
428+
}
429+
430+
return this.pushStack( ret, name, insert.selector );
423431
}
424-
return this.pushStack( ret, name, insert.selector );
425432
};
426433
});
427434

@@ -436,13 +443,13 @@ jQuery.extend({
436443

437444
var ret = [];
438445

439-
jQuery.each(elems, function( i, elem ) {
446+
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
440447
if ( typeof elem === "number" ) {
441448
elem += "";
442449
}
443450

444451
if ( !elem ) {
445-
return;
452+
continue;
446453
}
447454

448455
// Convert html string into DOM nodes
@@ -493,21 +500,21 @@ jQuery.extend({
493500
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
494501
}
495502

496-
elem = jQuery.makeArray( div.childNodes );
503+
elem = div.childNodes;
497504
}
498505

499506
if ( elem.nodeType ) {
500507
ret.push( elem );
501508
} else {
502509
ret = jQuery.merge( ret, elem );
503510
}
504-
505-
});
511+
}
506512

507513
if ( fragment ) {
508514
for ( var i = 0; ret[i]; i++ ) {
509515
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
510516
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
517+
511518
} else {
512519
if ( ret[i].nodeType === 1 ) {
513520
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );

0 commit comments

Comments
 (0)