Scope 'document' locally (also useful for sandboxing). Patch from Andrea Giammarchi...
[jquery.git] / src / core.js
index 9d0d41f..ee4ac70 100644 (file)
@@ -12,6 +12,9 @@ var jQuery = function( selector, context ) {
        // Map over the $ in case of overwrite
        _$ = window.$,
 
+       // Use the correct document accordingly with window argument (sandbox)
+       document = window.document,
+
        // A central reference to the root jQuery(document)
        rootjQuery,
 
@@ -72,10 +75,13 @@ jQuery.fn = jQuery.prototype = {
                                        }
 
                                        // Otherwise, we inject the element directly into the jQuery object
-                                       ret = jQuery( elem || null );
-                                       ret.context = document;
-                                       ret.selector = selector;
-                                       return ret;
+                                       this.length = elem ? 1 : 0;
+                                       if ( elem ) {
+                                               this[0] = elem;
+                                       }
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
                                }
 
                        // HANDLE: $(expr, $(...))
@@ -307,10 +313,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;
@@ -326,7 +334,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;