Fix width/height to work properly on window/document
authorBrandon Aaron <brandon.aaron@gmail.com>
Mon, 17 Sep 2007 19:14:05 +0000 (19:14 +0000)
committerBrandon Aaron <brandon.aaron@gmail.com>
Mon, 17 Sep 2007 19:14:05 +0000 (19:14 +0000)
src/core.js

index 1236f1c..960af44 100644 (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 ?
+                       // 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
+                       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" );
        };
 });