-// 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,
// Map over the $ in case of overwrite
_$ = window.$,
- // Define a local copy of jQuery
- jQuery,
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
// 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 arguments.length === 0 ?
- 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-]+)$/,
// Save a reference to the core toString method
toString = Object.prototype.toString;
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
var match, elem, ret;
// Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- this.length = 0;
- return this;
- }
+ if ( !selector ) return this;
// Handle $(DOMElement)
if ( selector.nodeType ) {
- this[0] = selector;
- this.length = 1;
- this.context = selector;
+ this.context = this[0] = selector;
+ this.length++;
return this;
}
} else {
elem = document.getElementById( match[3] );
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem && elem.id !== match[3] ) {
- return rootjQuery.find( selector );
+ if ( elem ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[3] ) return rootjQuery.find( selector );
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length++;
+ this[0] = elem;
}
- // Otherwise, we inject the element directly into the jQuery object
- ret = jQuery( elem || null );
- ret.context = document;
- ret.selector = selector;
- return ret;
+ this.context = document;
+ this.selector = selector;
+ return this;
}
// HANDLE: $(expr, $(...))
// The current version of jQuery being used
jquery: "@VERSION",
+ // The default length of a jQuery object is 0
+ length: 0,
+
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
+ toArray: Array.prototype.slice,
+
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num == null ?
// Return a 'clean' array
- Array.prototype.slice.call( this ) :
+ this.toArray() :
// Return just the object
- this[ num ];
+ ( num < 0 ? this.toArray(num)[ 0 ] : this[ num ] );
},
// Take an array of elements and push it onto the stack
// Recurse if we're merging object values
if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
- target[ name ] = jQuery.extend( deep,
- // Never move original objects, clone them
- src || ( copy.length != null ? [ ] : { } ), copy );
+ var clone;
+
+ if( src ) clone = src;
+ else if( jQuery.isArray(copy) ) clone = [ ];
+ else if( jQuery.isObject(copy) ) clone = { };
+ else clone = copy;
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
return toString.call(obj) === "[object Array]";
},
+ isObject: function( obj ) {
+ return this.constructor.call(obj) === Object;
+ },
+
+ isEmptyObject: function( obj ) {
+ for(var name in obj)
+ return false;
+ return true;
+ },
+
// check if an element is in a (or is an) XML document
isXMLDoc: function( elem ) {
return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
// 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;
// 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;