替换html内容后的offset()值

发布于 2024-10-09 01:51:08 字数 192 浏览 4 评论 0原文

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

有什么提示吗?

I have a div acting as a wrapper that contains almost the whole DOM (From body to /body) of a website. If I get the offset() of one of the elements when document is ready everything is ok but after a replacement $('#wrapper').html(newContent) the offset is 0.

Any hints?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱*していゐ 2024-10-16 01:51:08

如果 #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

If #wrapper is your content wrapper, then you're essentially swapping out your whole content with a new DOM subtree. That means that any element that was inside your #wrapper is now not part of the DOM anymore. The following code illustrates your problem:

$.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
});

A working example can be seen here: snippet@jsfiddle

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文