Commit b99fd476 authored by John Resig's avatar John Resig

Using some of the ideas presented by rformato, I've significantly sped up...

Using some of the ideas presented by rformato, I've significantly sped up $("#id") selection. It's now just 10% slower than doing: $(document.getElementById("test")), which seems quite acceptable. (Bug #1316)
parent 46e77035
...@@ -34,6 +34,8 @@ if ( typeof $ != "undefined" ) ...@@ -34,6 +34,8 @@ if ( typeof $ != "undefined" )
// Map the jQuery namespace to the '$' one // Map the jQuery namespace to the '$' one
window.$ = jQuery; window.$ = jQuery;
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
/** /**
* This function accepts a string containing a CSS or * This function accepts a string containing a CSS or
* basic XPath selector which is then used to match a set of elements. * basic XPath selector which is then used to match a set of elements.
...@@ -150,22 +152,39 @@ jQuery.fn = jQuery.prototype = { ...@@ -150,22 +152,39 @@ jQuery.fn = jQuery.prototype = {
// Make sure that a selection was provided // Make sure that a selection was provided
a = a || document; a = a || document;
// HANDLE: $(function)
// Shortcut for document ready
if ( jQuery.isFunction(a) )
return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
// Handle HTML strings // Handle HTML strings
if ( typeof a == "string" ) { if ( typeof a == "string" ) {
// HANDLE: $(html) -> $(array) var m = quickExpr.exec(a);
var m = /^[^<]*(<(.|\s)+>)[^>]*$/.exec(a); if ( m && (m[1] || !c) ) {
if ( m ) // HANDLE: $(html) -> $(array)
a = jQuery.clean( [ m[1] ] ); if ( m[1] )
a = jQuery.clean( [ m[1] ] );
// HANDLE: $("#id")
else {
var tmp = document.getElementById( m[3] );
if ( tmp )
// Handle the case where IE and Opera return items
// by name instead of ID
if ( tmp.id != m[3] )
return jQuery().find( a );
else {
this[0] = tmp;
this.length = 1;
return this;
}
else
a = [];
}
// HANDLE: $(expr) // HANDLE: $(expr)
else } else
return new jQuery( c ).find( a ); return new jQuery( c ).find( a );
}
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction(a) )
return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
return this.setArray( return this.setArray(
// HANDLE: $(array) // HANDLE: $(array)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment