I have a following DOM structure
<body>
<div>
<table>
<outerElement>
<innerElement />
</outerElement>
<table>
</div>
</body>
DIV has its overflow set to auto so if table grows bigger - it scrolls within the DIV.
In this scenario why table.offsetParent
returns the body while both table.parentNode
and parentElement
return the Div?
I need to calculate current position of the innerElement
within the window, so I traverse from it up thru all parent elements, collecting their offsetTop
and offsetLeft
values. Up until the DIV offsetParent
works fine and then it skips it directly to the body. The problem if there's scrolling involved at some point, I need to account for scrollTop
and scrollLeft
as well - like in the DIV in the above example. The problem is if I use offsetParent
I never encounter the DIV as one of the parents.
UPDATE
This is part of the code that does the traversing:
while (oElem && getStyle(oElem, 'position') != 'absolute' && getStyle(oElem, 'position') != 'relative') {
curleft += oElem.offsetLeft;
curtop += oElem.offsetTop;
oElem = oElem.offsetParent;
}
where getStyle
is a custom function that in this case retrieves the position style.
offsetParent
is the closest parent that has position:relative
or position:absolute
or the body of the page. parentNode
is the direct parent, regardless of position
.