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