X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=92945a4ca5d8cf76ac3d7a08c01891e7447d8e06;hb=c9899a74ac7b7ddb8663f4aa074c1c05f6514e5a;hp=d9749ba49b2aea9972045e90859f2be9e471beac;hpb=606b863edaff29035960e4d813b45d63b8d92876;p=jquery.git diff --git a/src/core.js b/src/core.js index d9749ba..92945a4 100644 --- a/src/core.js +++ b/src/core.js @@ -13,12 +13,11 @@ if ( typeof jQuery != "undefined" ) var _jQuery = jQuery; -var jQuery = window.jQuery = function(a,c) { - // If the context is global, return a new object - if ( window == this || !this.init ) - return new jQuery(a,c); - - return this.init(a,c); +var jQuery = window.jQuery = function(selector, context) { + // If the context is a namespace object, return a new object + return this instanceof jQuery ? + this.init(selector, context) : + new jQuery(selector, context); }; // Map over the $ in case of overwrite @@ -31,17 +30,17 @@ window.$ = jQuery; var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/; jQuery.fn = jQuery.prototype = { - init: function(a,c) { + init: function(selector, context) { // Make sure that a selection was provided - a = a || document; + selector = selector || document; // Handle HTML strings - if ( typeof a == "string" ) { - var m = quickExpr.exec(a); - if ( m && (m[1] || !c) ) { + if ( typeof selector == "string" ) { + var m = quickExpr.exec(selector); + if ( m && (m[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( m[1] ) - a = jQuery.clean( [ m[1] ], c ); + selector = jQuery.clean( [ m[1] ], context ); // HANDLE: $("#id") else { @@ -50,35 +49,35 @@ jQuery.fn = jQuery.prototype = { // Handle the case where IE and Opera return items // by name instead of ID if ( tmp.id != m[3] ) - return jQuery().find( a ); + return jQuery().find( selector ); else { this[0] = tmp; this.length = 1; return this; } else - a = []; + selector = []; } // HANDLE: $(expr) } else - return new jQuery( c ).find( a ); + return new jQuery( context ).find( selector ); // HANDLE: $(function) // Shortcut for document ready - } else if ( jQuery.isFunction(a) ) - return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a ); + } else if ( jQuery.isFunction(selector) ) + return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( selector ); return this.setArray( // HANDLE: $(array) - a.constructor == Array && a || + selector.constructor == Array && selector || // HANDLE: $(arraylike) // Watch for when an array-like object is passed as the selector - (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) || + (selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) || // HANDLE: $(*) - [ a ] ); + [ selector ] ); }, jquery: "@VERSION", @@ -283,7 +282,7 @@ jQuery.fn = jQuery.prototype = { this.get(), t.constructor == String ? jQuery(t).get() : - t.length != undefined && (!t.nodeName || t.nodeName == "FORM") ? + t.length != undefined && (!t.nodeName || jQuery.nodeName(t, "form")) ? t : [t] ) ); }, @@ -364,6 +363,10 @@ jQuery.fn = jQuery.prototype = { return this.after( val ).remove(); }, + eq: function(i){ + return this.slice(i, i+1); + }, + slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); }, @@ -1035,7 +1038,8 @@ jQuery.extend({ checked: "checked", readonly: "readOnly", selected: "selected", - maxlength: "maxLength" + maxlength: "maxLength", + selectedIndex: "selectedIndex" } }); @@ -1111,16 +1115,27 @@ jQuery.each( [ "Height", "Width" ], function(i,name){ var n = name.toLowerCase(); jQuery.fn[ n ] = function(h) { + // Get window width or height return this[0] == window ? + // Opera reports document.body.client[Width/Height] properly in both quirks and standards + jQuery.browser.opera && document.body["client" + name] || + + // Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths) jQuery.browser.safari && self["inner" + name] || - jQuery.boxModel && Math.max(document.documentElement["client" + name], document.body["client" + name]) || - document.body["client" + name] : + + // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode + document.compatMode == "CSS1Compat" && document.documentElement["client" + name] || document.body["client" + name] : + // Get document width or height this[0] == document ? + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater (Mozilla reports scrollWidth the same as offsetWidth) Math.max( document.body["scroll" + name], document.body["offset" + name] ) : + // Get or set width or height on the element h == undefined ? + // Get width or height on the element ( this.length ? jQuery.css( this[0], n ) : null ) : + // Set the width or height on the element (default to pixels if value is unitless) this.css( n, h.constructor == String ? h : h + "px" ); }; });