Skip to content

Commit

Permalink
Move jQuery(...) selector speed-up logic into Sizzle(...) qSA handlin…
Browse files Browse the repository at this point in the history
…g. Additionally add in a new catch for Sizzle('.class') (avoid using qSA and use getElementsByClassName instead, where applicable).
  • Loading branch information
jeresig committed Jan 20, 2011
1 parent 64e1cdb commit c475222
Showing 1 changed file with 16 additions and 62 deletions.
78 changes: 16 additions & 62 deletions src/core.js
Expand Up @@ -15,9 +15,8 @@ var jQuery = function( selector, context ) {
// A central reference to the root jQuery(document) // A central reference to the root jQuery(document)
rootjQuery, rootjQuery,


// A simple way to check for HTML strings or ID strings // A simple way to check for HTML strings
// (both of which we optimize for) quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$/,

This comment has been minimized.

Copy link
@sprt

sprt Jan 20, 2011

I think a closing bracket is needed for (?:

quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,


// Check if a string has a non-whitespace character in it // Check if a string has a non-whitespace character in it
rnotwhite = /\S/, rnotwhite = /\S/,
Expand Down Expand Up @@ -93,76 +92,31 @@ jQuery.fn = jQuery.prototype = {
return this; 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 // Handle HTML strings
if ( typeof selector === "string" ) { if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID? // Are we dealing with HTML string
match = quickExpr.exec( selector ); if ( (match = quickExpr.exec( selector )) ) {

context = context instanceof jQuery ? context[0] : context;
// Verify a match, and that no context was specified for #id doc = (context ? context.ownerDocument || context : document);
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 );


if ( ret ) { // If a single string is passed in and it's a single tag
if ( jQuery.isPlainObject( context ) ) { // just do a createElement and skip the rest
selector = [ document.createElement( ret[1] ) ]; ret = rsingleTag.exec( selector );
jQuery.fn.attr.call( selector, context, true );


} else { if ( ret ) {
selector = [ doc.createElement( ret[1] ) ]; if ( jQuery.isPlainObject( context ) ) {
} selector = [ document.createElement( ret[1] ) ];
jQuery.fn.attr.call( selector, context, true );


} else { } else {
ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = [ doc.createElement( ret[1] ) ];
selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes;
} }


return jQuery.merge( this, selector );

// HANDLE: $("#id")
} else { } else {
elem = document.getElementById( match[2] ); ret = jQuery.buildFragment( [ match[1] ], [ doc ] );

selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes;
// 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;
} }


// HANDLE: $("TAG")
} else if ( !context && !rnonword.test( selector ) ) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector ); return jQuery.merge( this, selector );


// HANDLE: $(expr, $(...)) // HANDLE: $(expr, $(...))
Expand Down

0 comments on commit c475222

Please sign in to comment.