我有以下 DOM 结构
<body>
<div>
<table>
<outerElement>
<innerElement />
</outerElement>
<table>
</div>
</body>
DIV 将其溢出设置为自动,因此如果表变大 - 它会在 DIV 内滚动。
在这种情况下,为什么table.offsetParent
同时返回 bodytable.parentNode
并parentElement
返回 Div?
我需要计算innerElement
窗口内的当前位置,所以我从它向上遍历所有父元素,收集它们的offsetTop
和offsetLeft
值。直到 DIVoffsetParent
工作正常,然后它直接跳到正文。如果在某些时候涉及滚动,我需要考虑scrollTop
并且scrollLeft
以及 - 就像上面示例中的 DIV 一样。问题是如果我使用offsetParent
我从来没有遇到过作为父母之一的 DIV。
更新
这是执行遍历的代码的一部分:
while (oElem && getStyle(oElem, 'position') != 'absolute' && getStyle(oElem, 'position') != 'relative') {
curleft += oElem.offsetLeft;
curtop += oElem.offsetTop;
oElem = oElem.offsetParent;
}
wheregetStyle
是一个自定义函数,在这种情况下检索位置样式。