Made isObjectLiteral to work correctly with custom objects with empty prototypes.
[jquery.git] / src / core.js
index 793f122..1d5a25b 100644 (file)
@@ -32,7 +32,7 @@ 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(),
@@ -328,13 +328,20 @@ jQuery.extend({
                        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 ) {
@@ -441,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;