X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=cdd78517f453a8d142f2dc07af814c9dc3539c34;hb=449e099b97d823ed0252d8821880bc0e471701ea;hp=ff31e813db0f06498a2274fa288949b05b3bd24b;hpb=ef05f44cce870a8b78637b0a88b27087f7f13b37;p=jquery.git diff --git a/src/core.js b/src/core.js index ff31e81..cdd7851 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,18 @@ 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; + } + + //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 ); }, isEmptyObject: function( obj ) {