From b8076a914ba9d400dc9c48d866b145df6fabafcf Mon Sep 17 00:00:00 2001 From: jeresig Date: Thu, 28 Jan 2010 17:17:51 -0500 Subject: [PATCH] Landing some minor perf optimization to jQuery(). --- src/core.js | 16 ++++++++++++---- test/unit/core.js | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core.js b/src/core.js index 81b4831..2271ceb 100644 --- a/src/core.js +++ b/src/core.js @@ -69,6 +69,14 @@ jQuery.fn = jQuery.prototype = { this.length = 1; return this; } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context ) { + this.context = this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } // Handle HTML strings if ( typeof selector === "string" ) { @@ -99,7 +107,7 @@ jQuery.fn = jQuery.prototype = { ret = buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; } - + return jQuery.merge( this, selector ); // HANDLE: $("#id") @@ -128,6 +136,7 @@ jQuery.fn = jQuery.prototype = { this.selector = selector; this.context = document; selector = document.getElementsByTagName( selector ); + return jQuery.merge( this, selector ); // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { @@ -150,9 +159,7 @@ jQuery.fn = jQuery.prototype = { this.context = selector.context; } - return jQuery.isArray( selector ) ? - this.setArray( selector ) : - jQuery.makeArray( selector, this ); + return jQuery.makeArray( selector, this ); }, // Start with an empty selector @@ -604,6 +611,7 @@ jQuery.extend({ for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } + } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; diff --git a/test/unit/core.js b/test/unit/core.js index 54ad982..4576ab8 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -25,7 +25,7 @@ test("jQuery()", function() { equals( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" ); // can actually yield more than one, when iframes are included, the window is an array as well - equals( 1, jQuery(window).length, "Correct number of elements generated for jQuery(window)" ); + equals( jQuery(window).length, 1, "Correct number of elements generated for jQuery(window)" ); var main = jQuery("#main"); -- 1.7.10.4