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)
This commit is contained in:
parent
46e770352a
commit
b99fd476d0
41
src/jquery/jquery.js
vendored
41
src/jquery/jquery.js
vendored
|
@ -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 = {
|
||||||
// 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)
|
||||||
|
|
Loading…
Reference in a new issue