From: jeresig <jeresig@gmail.com>
Date: Thu, 20 Jan 2011 16:34:35 +0000 (-0500)
Subject: Move jQuery(...) selector speed-up logic into Sizzle(...) qSA handling. Additionally... 
X-Git-Url: http://git.asbjorn.biz/?a=commitdiff_plain;h=c475222bfb729d7629cece87cf1cc96aaaacd305;p=jquery.git

Move jQuery(...) selector speed-up logic into Sizzle(...) qSA handling. Additionally add in a new catch for Sizzle('.class') (avoid using qSA and use getElementsByClassName instead, where applicable).
---

diff --git a/src/core.js b/src/core.js
index f116ef4..48261fc 100644
--- a/src/core.js
+++ b/src/core.js
@@ -15,9 +15,8 @@ var jQuery = function( selector, context ) {
 	// A central reference to the root jQuery(document)
 	rootjQuery,
 
-	// A simple way to check for HTML strings or ID strings
-	// (both of which we optimize for)
-	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
+	// A simple way to check for HTML strings
+	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$/,
 
 	// Check if a string has a non-whitespace character in it
 	rnotwhite = /\S/,
@@ -93,76 +92,31 @@ jQuery.fn = jQuery.prototype = {
 			return this;
 		}
 
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = "body";
-			this.length = 1;
-			return this;
-		}
-
 		// Handle HTML strings
 		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			match = quickExpr.exec( selector );
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = (context ? context.ownerDocument || context : document);
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
+			// Are we dealing with HTML string
+			if ( (match = quickExpr.exec( selector )) ) {
+				context = context instanceof jQuery ? context[0] : context;
+				doc = (context ? context.ownerDocument || context : document);
 
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
+				// If a single string is passed in and it's a single tag
+				// just do a createElement and skip the rest
+				ret = rsingleTag.exec( selector );
 
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
+				if ( ret ) {
+					if ( jQuery.isPlainObject( context ) ) {
+						selector = [ document.createElement( ret[1] ) ];
+						jQuery.fn.attr.call( selector, context, true );
 
 					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes;
+						selector = [ doc.createElement( ret[1] ) ];
 					}
 
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
 				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
+					ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+					selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes;
 				}
 
-			// HANDLE: $("TAG")
-			} else if ( !context && !rnonword.test( selector ) ) {
-				this.selector = selector;
-				this.context = document;
-				selector = document.getElementsByTagName( selector );
 				return jQuery.merge( this, selector );
 
 			// HANDLE: $(expr, $(...))