Javascript 替换html内容后的offset()值

Javascript 替换html内容后的offset()值,javascript,jquery,html,offset,Javascript,Jquery,Html,Offset,我有一个div充当包装器,它几乎包含网站的整个DOM(从body到/body)。如果我在文档准备就绪时获得其中一个元素的offset(),则一切正常,但在替换$('#wrapper').html(newContent)后,偏移量为0 有什么提示吗?如果#wrapper是您的内容包装器,那么您实际上是在用一个新的DOM子树交换整个内容。这意味着#wrapper中的任何元素现在都不再是DOM的一部分。以下代码说明了您的问题: $.ready(function() { var elem = $('

我有一个div充当包装器,它几乎包含网站的整个DOM(从body到/body)。如果我在文档准备就绪时获得其中一个元素的
offset()
,则一切正常,但在替换
$('#wrapper').html(newContent)
后,偏移量为0

有什么提示吗?

如果
#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
});
$.ready(函数(){
var elem=$(“#somediv”),
包装器=$(“#包装器”),
新内容='…';
警报(elem.offset().top);//显示正确的偏移量
html(newContent);//交换#wrapper的内容,销毁#somediv
alert(elem.offset().top);//显示0,因为'elem'不再位于包装器内
});

这里可以看到一个工作示例:

感谢Krof的帮助。是否仍有恢复DOM控制的方法?抱歉,我正在再次阅读您的答案,我发现有一些误解。替换之后,我要求一个元素的offset(),该元素以前存在,现在又存在。这个替换实际上只是在不同的地方添加了更多的内容,但它也保留了旧的元素。我理解你的意思–但是当你在一个元素上使用
.html(…)
时,该元素的所有内容都会被重新创建。旧元素不再存在,即使类和ID相同。如果要查看新元素的偏移量,请使用
$(…)
重新选择要再次检查的元素,它将报告正确的偏移量。您好,克罗夫,我正在重新选择元素,但它不再返回其偏移量。。。例如:替换前:$('#菜单_1').offset().top=40;替换后:很抱歉冗余,但我花了5分钟以上:再次您好Krof,我正在重新选择元素,但它不再返回偏移量。。。例如:替换前:$('#菜单_1').offset().top=40;替换后:$('#菜单_1').offset().top=0;即使元素仍然存在并且处于相同的位置,但如果我写入$('#menu_1').offset(),就会发生这种情况。在firebug控制台的顶部,我会获得正确的数据。。。