【发布时间】:2011-08-25 11:12:11
【问题描述】:
所以,如果我正确理解http://api.jquery.com/offset,$('body').offset() 应该返回正文所在的位置,相对于文档。因此,在页面上的这些坐标处插入一个<p>-tag 应该将它放在 body 标记的位置。但事实并非如此!
我在 Safari 5.0.5 和 Firefox 3.6 和这两种情况下都试过这个,警报显示“8”,<p>-tag 结束于页面顶部 8 像素,而 body 标记开始 100 像素在页面的下方,如果使用例如 firebug 进行检查,可以看到。
<!doctype html>
<html>
<head></head>
<body>
<div style="margin-top:100px;background:yellow;">
<p>Hello World</p>
</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js">
</script>
<script>
alert(jQuery('body').offset().top);
var myp = jQuery('<p>Top of body?</p>')
myp.appendTo(jQuery('body'));
myp.offset(jQuery('body').offset());
</script>
</body>
所以问题是:我应该如何使用 .offset() 使 <p>-tag 出现在正文中,而不是在页面顶部?
【问题讨论】:
-
我用萤火虫检查了你的代码,但正文标签并没有从 100 像素开始向下。实际上它是 div 层。并且因为您没有添加样式属性“位置:绝对”,所以浏览器采用他的默认值。这是“相对的”。
-
嗯.. 真的吗?如果我将鼠标悬停在萤火虫面板中的“”字符串上,它只会突出显示 div,所以我认为这意味着身体从那里开始。我还尝试在正文中添加一个单击处理程序,例如
jQuery('body').click(function(){alert("click");});,它仅在在 div 内单击时触发。 -
好的,谢谢。我想这就是我困惑的原因。基本上,我假设正文从包含 div 的同一位置开始,因为正文上任何已注册的单击处理程序只会在单击 div 时触发,而不是在其上方由边距创建的空白区域上触发。
标签: javascript jquery