jquery core: Closes #2827. jQuery.each iterates over functions
[jquery.git] / src / core.js
index f00d9b0..78f48d7 100644 (file)
@@ -1,8 +1,10 @@
-// Will speed up references to window, and allows munging its name.
-var window = this,
-
-       // Will speed up references to undefined, and allows munging its name.
-       undefined,
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return arguments.length === 0 ?
+                       rootjQuery :
+                       new jQuery.fn.init( selector, context );
+       },
 
        // Map over jQuery in case of overwrite
        _jQuery = window.jQuery,
@@ -10,19 +12,9 @@ var window = this,
        // Map over the $ in case of overwrite
        _$ = window.$,
 
-       // Define a local copy of jQuery
-       jQuery,
-
        // A central reference to the root jQuery(document)
        rootjQuery,
 
-       jQuery = window.jQuery = window.$ = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return selector === undefined ?
-                       rootjQuery :
-                       new jQuery.fn.init( selector, context );
-       },
-
        // A simple way to check for HTML strings or ID strings
        // (both of which we optimize for)
        quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
@@ -36,11 +28,8 @@ var window = this,
        // Save a reference to the core toString method
        toString = Object.prototype.toString;
 
-// Define the main jQuery method
-jQuery = window.jQuery = window.$ = function( selector, context ) {
-       // The jQuery object is actually just the init constructor 'enhanced'
-       return new jQuery.fn.init( selector, context );
-};
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
 
 jQuery.fn = jQuery.prototype = {
        init: function( selector, context ) {
@@ -182,10 +171,16 @@ jQuery.fn = jQuery.prototype = {
        // Determine the position of an element within
        // the matched set of elements
        index: function( elem ) {
+               if ( !elem || typeof elem === "string" ) {
+                       return jQuery.inArray( this[0],
+                               // If it receives a string, the selector is used
+                               // If it receives nothing, the siblings are used
+                               elem ? jQuery( elem ) : this.parent().children() );
+               }
                // Locate the position of the desired element
                return jQuery.inArray(
                        // If it receives a jQuery object, the first element is used
-                       elem && elem.jquery ? elem[0] : elem, this );
+                       elem.jquery ? elem[0] : elem, this );
        },
 
        is: function( selector ) {
@@ -312,10 +307,12 @@ jQuery.extend({
 
        // args is for internal usage only
        each: function( object, callback, args ) {
-               var name, i = 0, length = object.length;
+               var name, i = 0, 
+                       length = object.length,
+                       isObj = length === undefined || jQuery.isFunction(object);
 
                if ( args ) {
-                       if ( length === undefined ) {
+                       if ( isObj ) {
                                for ( name in object ) {
                                        if ( callback.apply( object[ name ], args ) === false ) {
                                                break;
@@ -331,7 +328,7 @@ jQuery.extend({
 
                // A special, fast, case for the most common use of each
                } else {
-                       if ( length === undefined ) {
+                       if ( isObj ) {
                                for ( name in object ) {
                                        if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
                                                break;
@@ -355,7 +352,7 @@ jQuery.extend({
 
                if ( array != null ) {
                        i = array.length;
-                       
+
                        // The window, strings (and functions) also have 'length'
                        if ( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) {
                                ret[0] = array;
@@ -383,7 +380,7 @@ jQuery.extend({
                // We have to loop this way because IE & Opera overwrite the length
                // expando of getElementsByTagName
                var i = 0, elem, pos = first.length;
-               
+
                // Also, we need to make sure that the correct elements are being returned
                // (IE returns comment nodes in a '*' query)
                if ( !jQuery.support.getAll ) {