Fix width/height to work properly on window/document

This commit is contained in:
Brandon Aaron 2007-09-17 19:14:05 +00:00
parent 415a0916b5
commit 537d7ca869

View File

@ -1114,16 +1114,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 ?
jQuery.browser.safari && self["inner" + name] ||
jQuery.boxModel && Math.max(document.documentElement["client" + name], document.body["client" + name]) ||
document.body["client" + name] :
// 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] ||
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
jQuery.boxModel && 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" );
};
});