Merge branch 'master' of github.com:jquery/jquery
[jquery.git] / src / core.js
index 4311e31..eb31b2a 100644 (file)
@@ -15,16 +15,11 @@ 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\-]+)$)/,
-
-       // Is it a simple selector
-       isSimple = /^.[^:#\[\.,]*$/,
+       // A simple way to check for HTML strings
+       quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$/,
 
        // Check if a string has a non-whitespace character in it
        rnotwhite = /\S/,
-       rwhite = /\s/,
 
        // Used for trimming whitespace
        trimLeft = /^\s+/,
@@ -97,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) ) {
+                       // Are we dealing with HTML string
+                       if ( (match = quickExpr.exec( selector )) ) {
+                               context = context instanceof jQuery ? context[0] : context;
+                               doc = (context ? context.ownerDocument || context : document);
 
-                               // 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 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] ) ];
-                                               }
+                               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, $(...))
@@ -410,7 +360,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 ) {
@@ -848,7 +798,7 @@ jQuery.extend({
                                                }
 
                                                if ( _fired ) {
-                                                       deferred.fire( _fired[ 0 ] , _fired[ 1 ] );
+                                                       deferred.resolveWith( _fired[ 0 ] , _fired[ 1 ] );
                                                }
                                        }
 
@@ -856,7 +806,7 @@ jQuery.extend({
                                },
 
                                // resolve with given context and args
-                               fire: function( context , args ) {
+                               resolveWith: function( context , args ) {
                                        if ( ! cancelled && ! fired && ! firing ) {
 
                                                firing = 1;
@@ -876,7 +826,7 @@ jQuery.extend({
 
                                // 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;
                                },
 
@@ -912,7 +862,7 @@ jQuery.extend({
                                return this;
                        },
                        fail: failDeferred.done,
-                       fireReject: failDeferred.fire,
+                       rejectWith: failDeferred.resolveWith,
                        reject: failDeferred.resolve,
                        isRejected: failDeferred.isResolved,
                        // Get a promise for this deferred
@@ -965,10 +915,10 @@ jQuery.extend({
                                        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();
                        });
@@ -1039,9 +989,8 @@ if ( indexOf ) {
        };
 }
 
-// Verify that \s matches non-breaking spaces
-// (IE fails on this test)
-if ( !rwhite.test( "\xA0" ) ) {
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
        trimLeft = /^[\s\xA0]+/;
        trimRight = /[\s\xA0]+$/;
 }