Skip to content
Permalink
Browse files

width, height, scrollLeft, and scrollTop now work with windows and do…

…cuments other than just the one it was loaded in (like iframes and popups)
  • Loading branch information
brandonaaron committed Apr 22, 2009
1 parent a0d079f commit 2adb9b2a0fab55301f66d1a293823ffa6649bdc9
Showing with 27 additions and 17 deletions.
  1. +10 −8 src/dimensions.js
  2. +17 −9 src/offset.js
@@ -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" );
@@ -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 ];
};
});

0 comments on commit 2adb9b2

Please sign in to comment.
You can’t perform that action at this time.