From: jeresig Date: Thu, 20 Jan 2011 16:58:52 +0000 (-0500) Subject: Merge branch 'master' of github.com:jquery/jquery X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=commitdiff_plain;h=ea5ce8c2a916ad44af21411d6e2b21ab9f6863f0;hp=-c Merge branch 'master' of github.com:jquery/jquery --- ea5ce8c2a916ad44af21411d6e2b21ab9f6863f0 diff --combined src/core.js index 6d333c5,eb31b2a..236f84d --- a/src/core.js +++ b/src/core.js @@@ -15,9 -15,8 +15,9 @@@ var jQuery = function( selector, contex // A central reference to the root jQuery(document) rootjQuery, - // A simple way to check for HTML strings - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$/, + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, @@@ -93,70 -92,32 +93,70 @@@ 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 - if ( (match = quickExpr.exec( selector )) ) { - context = context instanceof jQuery ? context[0] : context; - doc = (context ? context.ownerDocument || context : document); + // 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) ) { - // 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 ); + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + 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 ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } } else { - selector = [ doc.createElement( ret[1] ) ]; + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes; } + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes; - } + 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; + } - return jQuery.merge( this, selector ); + this.context = document; + this.selector = selector; + return this; + } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { @@@ -399,7 -360,7 +399,7 @@@ jQuery.extend( } // If there are functions bound, to execute - readyList.fire( document , [ jQuery ] ); + readyList.resolveWith( document , [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { @@@ -837,7 -798,7 +837,7 @@@ } if ( _fired ) { - deferred.fire( _fired[ 0 ] , _fired[ 1 ] ); + deferred.resolveWith( _fired[ 0 ] , _fired[ 1 ] ); } } @@@ -845,7 -806,7 +845,7 @@@ }, // resolve with given context and args - fire: function( context , args ) { + resolveWith: function( context , args ) { if ( ! cancelled && ! fired && ! firing ) { firing = 1; @@@ -865,7 -826,7 +865,7 @@@ // resolve with this as context and given arguments resolve: function() { - deferred.fire( jQuery.isFunction( this.promise ) ? this.promise() : this , arguments ); + deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this , arguments ); return this; }, @@@ -901,7 -862,7 +901,7 @@@ return this; }, fail: failDeferred.done, - fireReject: failDeferred.fire, + rejectWith: failDeferred.resolveWith, reject: failDeferred.resolve, isRejected: failDeferred.isResolved, // Get a promise for this deferred @@@ -954,10 -915,10 +954,10 @@@ args = arguments; resolveArray[ index ] = args.length > 1 ? slice.call( args , 0 ) : value; if( ! --length ) { - deferred.fire( promise, resolveArray ); + deferred.resolveWith( promise, resolveArray ); } }).fail( function() { - deferred.fireReject( promise, arguments ); + deferred.rejectWith( promise, arguments ); }); return !deferred.isRejected(); });