元素上的jQuery.offset()提供了不正确的“顶部”值

时间:2013-01-04 04:17:00

标签: javascript jquery html css

FIDDLE IS HERE(登录到控制台)

情况是页面以<H1>开头,其边距最大值大于<body>上的边距。

这会导致<body>在页面中被推低,但$('body').offset().top仍然设置为<body>的margin-top。这当然导致我的调试元素(突出显示元素的位置)不正确,因为正文的虚拟元素现在处于错误的位置。

奇怪的是$(elem).offset()值的其余部分对<body>的任何后代都是正确的。

是否有一个修复因为用while循环手动检查身体的递归第一个孩子的margin-top?

注意Safari 6上的问题,但我怀疑我也会在Chrome上找到它。

4 个答案:

答案 0 :(得分:2)

使用偏移加上html元素的高度减去body元素的差异可能会有效。

console.log(“body.offset()。top =”+($('html')。offset()。top + $('html')。height() - $('body')。高度()));


更新:此解决方案仅在页面上没有边距底部时才有效。

您还可以在页面底部添加一个明确的div。

$('body').append("<div style=\"clear: all;\">&nbsp;</div>");

请注意,div必须具有可用的内容。

http://jsfiddle.net/SCGdZ/7/

答案 1 :(得分:1)

我找到了John Resig的帖子,关于getBoundingClientRect offset()的快速和真棒... {我想知道为什么它不用于jQuery的-webkit-margin-before: 0.67em;

我会改用这种方法,希望它不会遇到同样的问题。

更新:看起来不错! (非整数最高值是由于某种方式具有样式{{1}})

你可以看到身体有margin = 8

enter image description here

答案 2 :(得分:1)

jQuery 1.9.0解决了这个问题。非常感谢,jQuery非常棒。

答案 3 :(得分:0)

Find Here

a[0].style.marginTop即使在css中声明它之后它仍未被初始化,这就是为什么它什么也没有返回。

因此,我们必须注意初始化a[0].style.marginTop