我试图在JavaScript中进行定位.我正在使用基于经典quirksmode函数的累积位置函数,该函数对每个函数求和offsetTop,直到顶部节点.offsetLeftoffsetParent
但是,我遇到了一个问题,我感兴趣的元素offsetParent在Firefox 中没有.在IE中offsetParent存在,但是offsetTop并且offsetLeft总计为0,因此它与Firefox中的效果相同.
什么会导致在屏幕上清晰可见和可用的元素没有offsetParent?或者,更实际的是,我如何找到该元素的位置以便在其下方放置下拉?
编辑:这是如何重现这个特定的一个实例(没有通过当前接受的答案解决):
在Web浏览器的控制台中运行以下代码(例如Chromev21):
var e = document.querySelector('div');
console.log(e);
// <div id="notify-container"></div>
do{
var s = getComputedStyle(e);
console.log(e.tagName,s.display,s.visibility,s.position,e.offsetParent);
} while(e=e.parentElement)
// DIV block visible fixed null
// BODY block visible static null
// HTML block visible static null
Run Code Online (Sandbox Code Playgroud)为什么offsetParent那个元素null?
我有一些HTML具有以下近似结构和定位:
<div class="grand-parent" style="position: absolute">
<div class="parent" style="position: relative">
<div class="child"></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在我的jQuery小部件中,我正在尝试插入位于小部件所针对的元素的"偏移父级"内的元素.为此,我基本上有这样的代码:
var targetElement = $('.child');
$('<div/>').appendTo(targetElement.offsetParent());
Run Code Online (Sandbox Code Playgroud)
不幸的是,该元素似乎是作为孩子插入.grand-parent而不是parent.我对offsetParent()(以及文档似乎支持这一点)的理解是offsetParent()应该返回,.parent因为它是相对的.我对offsetParent的理解是不正确的,还是jQuery存在问题(我使用的是1.4.1).