rtrim = /^\s+|\s+$/g,
// Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>$/,
+ rsingleTag = /<(\w+)\s*\/?>(?:<\/\1>)?$/,
// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent.toLowerCase(),
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
- this.length++;
+ this.length = 1;
return this;
}
}
// Otherwise, we inject the element directly into the jQuery object
- this.length++;
+ this.length = 1;
this[0] = elem;
}
continue;
}
- // Recurse if we're merging object values
- if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
- var clone;
-
- if ( src ) {
- clone = src;
- } else if ( jQuery.isArray(copy) ) {
- clone = [];
- } else if ( jQuery.isObjectLiteral(copy) ) {
- clone = {};
- } else {
- clone = copy;
- }
+ // Recurse if we're merging object literal values
+ if ( deep && copy && jQuery.isObjectLiteral(copy) ) {
+ // Don't extend not object literals
+ var clone = src && jQuery.isObjectLiteral(src) ? src : {};
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
return false;
}
+ // not own constructor property must be Object
+ if ( obj.constructor
+ && !hasOwnProperty.call(obj, "constructor")
+ && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
//own properties are iterated firstly,
//so to speed up, we can test last one if it is own or not
-
+
var key;
for ( key in obj ) {}
- return !key || hasOwnProperty.call( obj, key );
+ return key === undefined || hasOwnProperty.call( obj, key );
},
isEmptyObject: function( obj ) {
},
inArray: function( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;