mirror of
https://github.com/jquery/jquery.git
synced 2026-02-06 22:35:23 -05:00
Fix #11542. document.body should not be special in .offset() and document.documentElement is the default element.offsetParent. Close gh-899.
This commit is contained in:
committed by
Dave Methvin
parent
69e2f068fe
commit
b398a68333
@@ -1,5 +1,3 @@
|
||||
var rroot = /^(?:body|html)$/i;
|
||||
|
||||
jQuery.fn.offset = function( options ) {
|
||||
if ( arguments.length ) {
|
||||
return options === undefined ?
|
||||
@@ -9,7 +7,7 @@ jQuery.fn.offset = function( options ) {
|
||||
});
|
||||
}
|
||||
|
||||
var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
|
||||
var docElem, win,
|
||||
box = { top: 0, left: 0 },
|
||||
elem = this[ 0 ],
|
||||
doc = elem && elem.ownerDocument;
|
||||
@@ -18,10 +16,6 @@ jQuery.fn.offset = function( options ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (body = doc.body) === elem ) {
|
||||
return jQuery.offset.bodyOffset( elem );
|
||||
}
|
||||
|
||||
docElem = doc.documentElement;
|
||||
|
||||
// Make sure it's not a disconnected DOM node
|
||||
@@ -35,30 +29,14 @@ jQuery.fn.offset = function( options ) {
|
||||
box = elem.getBoundingClientRect();
|
||||
}
|
||||
win = getWindow( doc );
|
||||
clientTop = docElem.clientTop || body.clientTop || 0;
|
||||
clientLeft = docElem.clientLeft || body.clientLeft || 0;
|
||||
scrollTop = win.pageYOffset || docElem.scrollTop;
|
||||
scrollLeft = win.pageXOffset || docElem.scrollLeft;
|
||||
return {
|
||||
top: box.top + scrollTop - clientTop,
|
||||
left: box.left + scrollLeft - clientLeft
|
||||
top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
|
||||
left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
|
||||
};
|
||||
};
|
||||
|
||||
jQuery.offset = {
|
||||
|
||||
bodyOffset: function( body ) {
|
||||
var top = body.offsetTop,
|
||||
left = body.offsetLeft;
|
||||
|
||||
if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
|
||||
top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
|
||||
left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
|
||||
}
|
||||
|
||||
return { top: top, left: left };
|
||||
},
|
||||
|
||||
setOffset: function( elem, options, i ) {
|
||||
var position = jQuery.css( elem, "position" );
|
||||
|
||||
@@ -125,7 +103,7 @@ jQuery.fn.extend({
|
||||
|
||||
// Get correct offsets
|
||||
offset = this.offset();
|
||||
if ( !rroot.test( offsetParent[ 0 ].nodeName ) ) {
|
||||
if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
|
||||
parentOffset = offsetParent.offset();
|
||||
}
|
||||
|
||||
@@ -145,11 +123,11 @@ jQuery.fn.extend({
|
||||
|
||||
offsetParent: function() {
|
||||
return this.map(function() {
|
||||
var offsetParent = this.offsetParent || document.body;
|
||||
while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
|
||||
var offsetParent = this.offsetParent || document.documentElement;
|
||||
while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
|
||||
offsetParent = offsetParent.offsetParent;
|
||||
}
|
||||
return offsetParent || document.body;
|
||||
return offsetParent || document.documentElement;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user