X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;ds=inline;f=src%2Fcore.js;h=1d5a25bd5dab645bc45c410ced0450df1c249a5e;hb=990d9ca1b05a587cce7599a1a40aa2558117db41;hp=ff31e813db0f06498a2274fa288949b05b3bd24b;hpb=ef05f44cce870a8b78637b0a88b27087f7f13b37;p=jquery.git diff --git a/src/core.js b/src/core.js index ff31e81..1d5a25b 100644 --- a/src/core.js +++ b/src/core.js @@ -32,13 +32,14 @@ var jQuery = function( selector, context ) { 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(), // Save a reference to some core methods toString = Object.prototype.toString, + hasOwnProperty = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, indexOf = Array.prototype.indexOf; @@ -55,7 +56,7 @@ jQuery.fn = jQuery.prototype = { // Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; - this.length++; + this.length = 1; return this; } @@ -95,7 +96,7 @@ jQuery.fn = jQuery.prototype = { } // Otherwise, we inject the element directly into the jQuery object - this.length++; + this.length = 1; this[0] = elem; } @@ -279,7 +280,7 @@ jQuery.extend = jQuery.fn.extend = function() { clone = src; } else if ( jQuery.isArray(copy) ) { clone = []; - } else if ( jQuery.isObject(copy) ) { + } else if ( jQuery.isObjectLiteral(copy) ) { clone = {}; } else { clone = copy; @@ -322,8 +323,25 @@ jQuery.extend({ return toString.call(obj) === "[object Array]"; }, - isObject: function( obj ) { - return this.constructor.call(obj) === Object; + isObjectLiteral: function( obj ) { + if ( toString.call(obj) !== "[object Object]" ) { + 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 === undefined || hasOwnProperty.call( obj, key ); }, isEmptyObject: function( obj ) { @@ -430,6 +448,10 @@ jQuery.extend({ }, 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;