【发布时间】:2010-12-23 10:03:14
【问题描述】:
我有一个 div 作为包装器,它包含网站的几乎整个 DOM(从 body 到 /body)。如果我在文档准备好时得到其中一个元素的offset(),一切都很好,但在替换 $('#wrapper').html(newContent) 之后,偏移量为 0。
有什么提示吗?
【问题讨论】:
标签: javascript jquery html offset
我有一个 div 作为包装器,它包含网站的几乎整个 DOM(从 body 到 /body)。如果我在文档准备好时得到其中一个元素的offset(),一切都很好,但在替换 $('#wrapper').html(newContent) 之后,偏移量为 0。
有什么提示吗?
【问题讨论】:
标签: javascript jquery html offset
如果#wrapper 是您的内容包装器,那么您实际上是在用新的 DOM 子树替换整个内容。这意味着 #wrapper 中的任何元素现在不再是 DOM 的一部分。以下代码说明了您的问题:
$.ready(function() {
var elem = $('#somediv'),
wrapper = $('#wrapper'),
newContent = '<div>...</div>';
alert(elem.offset().top); // displays the correct offset
wrapper.html(newContent); // swaps out the contents of #wrapper, destroys #somediv
alert(elem.offset().top); // displays 0, because `elem` is not inside #wrapper anymore
});
可以在这里看到一个工作示例:snippet@jsfiddle
【讨论】:
.html(...) 时,该元素的所有内容都会被重新创建。即使类和 ID 相同,旧元素也不再存在。如果您想查看新元素的偏移量是多少,请使用$(...) 重新选择要再次检查的元素,它将报告正确的偏移量。