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.call(this, 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 ) {
+ var name = "";
+ for(name in obj) break;
+ return !name;
+ },
+
// 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,
+ var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);