width, height, scrollLeft, and scrollTop now work with windows and documents other...
authorBrandon Aaron <brandon.aaron@gmail.com>
Wed, 22 Apr 2009 00:55:44 +0000 (00:55 +0000)
committerBrandon Aaron <brandon.aaron@gmail.com>
Wed, 22 Apr 2009 00:55:44 +0000 (00:55 +0000)
src/dimensions.js
src/offset.js

index 606b105..69cfc45 100644 (file)
@@ -19,24 +19,26 @@ jQuery.each([ "Height", "Width" ], function(i, name){
 
        jQuery.fn[ type ] = function( size ) {
                // Get window width or height
-               return this[0] == window ?
+               var elem = this[0];
+               if ( !elem ) return null;
+               return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
                        // 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 ] :
+                       elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+                       elem.document.body[ "client" + name ] :
 
                        // Get document width or height
-                       this[0] == document ?
+                       (elem.nodeName === "#document") ? // is it a document
                                // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
                                Math.max(
-                                       document.documentElement["client" + name],
-                                       document.body["scroll" + name], document.documentElement["scroll" + name],
-                                       document.body["offset" + name], document.documentElement["offset" + name]
+                                       elem.documentElement["client" + name],
+                                       elem.body["scroll" + name], elem.documentElement["scroll" + name],
+                                       elem.body["offset" + name], elem.documentElement["offset" + name]
                                ) :
 
                                // Get or set width or height on the element
                                size === undefined ?
                                        // Get width or height on the element
-                                       (this.length ? jQuery.css( this[0], type ) : null) :
+                                       jQuery.css( elem, type ) :
 
                                        // Set the width or height on the element (default to pixels if value is unitless)
                                        this.css( type, typeof size === "string" ? size : size + "px" );
index 6216b69..8caab53 100644 (file)
@@ -133,24 +133,32 @@ jQuery.each( ['Left', 'Top'], function(i, name) {
 
        jQuery.fn[ method ] = function(val) {
                if ( !this[0] ) return null;
+               
+               var elem = this[0], win = ("scrollTo" in elem && elem.document) ? elem :
+                       (elem.nodeName === "#document") ? elem.defaultView || elem.parentWindow :
+                               false;
 
                return val !== undefined ?
 
                        // Set the scroll offset
                        this.each(function() {
-                               this == window || this == document ?
-                                       window.scrollTo(
-                                               !i ? val : jQuery(window).scrollLeft(),
-                                                i ? val : jQuery(window).scrollTop()
+                               win = ("scrollTo" in this && this.document) ? this : 
+                                       (this.nodeName === "#document") ? this.defaultView || this.parentWindow :
+                                               false;
+                               
+                               win ?
+                                       win.scrollTo(
+                                               !i ? val : jQuery(win).scrollLeft(),
+                                                i ? val : jQuery(win).scrollTop()
                                        ) :
                                        this[ method ] = val;
                        }) :
 
                        // Return the scroll offset
-                       this[0] == window || this[0] == document ?
-                               self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
-                                       jQuery.support.boxModel && document.documentElement[ method ] ||
-                                       document.body[ method ] :
-                               this[0][ method ];
+                       win ?
+                               win[ i ? 'pageYOffset' : 'pageXOffset' ] ||
+                                       jQuery.support.boxModel && win.document.documentElement[ method ] ||
+                                       win.document.body[ method ] :
+                               elem[ method ];
        };
 });