【问题标题】:Getting 0 when trying to get the offset top value of element onload尝试获取元素 onload 的偏移最大值时获取 0
【发布时间】:2018-06-18 05:20:47
【问题描述】:

我正在处理具有多个 iframe 的项目。主 iframe 有页面,页面包含子 iframe,也有页面内容。

在子 iframe 中,我有标签,每个标签都有从服务器动态加载的页面内容。

我正在尝试在页面加载时使用 offset().top 从屏幕顶部获取 div 元素的偏移顶部值。它在使用“重新加载 iframe”重新加载子 iframe 时返回一些值,但在重新加载页面时返回“0”。

我在此附上我正在尝试做的图片,请检查,如果我没有清楚地解释我上面的问题。

我尝试了这段代码并将这段代码放在 $(document).ready(){} 中,它在重新加载特定 iframe 时工作正常。但在加载时返回 0。

var $stored_selector = $('#displayMedsdetail');
var offset = $stored_selector.offset(), remaining_height;
console.log(offset.top);

谁能帮我看看为什么重新加载页面时 offset().top 返回 0?

【问题讨论】:

  • 您使用哪个事件来获取offset 值....?正确的事件很重要,否则您将获得未定义或 0 值。
  • @KickyTrick 你什么时候调用上面的 JS 代码?可能是 iframe 未加载。
  • @TusharAcharekar,似乎在没有页面代码的情况下编写答案很难,但请确保您在子 iframe 中的 document.ready 中编写代码,如果它不适用于测试,请执行以下操作:写您在function 中获取偏移代码并使用document.ready 中的计时器运行它,如下所示:setTimeout(function(){ getOffset(); }, 3000); 并让我知道它的结果。
  • 我已经尝试通过将代码放入准备好的文档中来获取偏移值,但它仍然返回值 0。

标签: javascript jquery html iframe


【解决方案1】:

使用 .contents() 访问 iFrame 的 DOM。

这是我之前使用的一些代码的示例:

var content=$("iframe").contents().find('body').html();

你可能可以重写它以获得 div 元素和它的偏移量。

【讨论】:

  • 我正在尝试从子 iframe 的页面中获取值。
  • 是的,你应该可以通过DOM获取侧边栏的数据。您只需要找到它的正确路径,以便您可以检索并在以后修改其数据。
  • 请检查编辑,我编辑的代码给出了偏移值,如果从顶部开始 50px,但同样的东西在页面加载时返回 0px。这就是相同代码赋予不同价值的问题。我需要在页面加载时获取元素的 offset().top 值。
  • 好的,据我所知,当您重新加载 iframe 本身时,它可以正常工作,但是当您重新加载整个页面时,它会将其设置为 0。这可能意味着您获取的代码Iframe 数据是正确的,但是您的页面中有一些东西在重新加载时会覆盖您尝试获取的数据或使其不再执行数据。因此,我认为您最好调试所有内容的加载顺序,以查看是否所有内容都已执行以及是否没有任何内容被覆盖。最简单的方法是在所有代码行之间放置大量警报,看看会发生什么。
  • 我想尽办法找出来,但我找不到哪里做错了。
【解决方案2】:

我希望您不要试图从 iFrame 中获取信息。因为 iFrame 通常不是为查看它而设计的。这意味着无需对其进行编辑,也无需获取任何信息。因此,据我所知,没有办法使用 JS 从 iFrame 中获取任何信息。

至于为什么您无法读取您可能拥有的 iFrame 的顶部偏移量。那么这很可能与时间有关。当您选择$(document).ready()setTimeout() 结合使用时,可能会解决一些问题,在许多情况下,即使是 0 毫秒也足够了。由于没有代码可以看,真的很难说可能是什么问题。

【讨论】:

  • “因为 iFrame 通常不是为查看它而设计的。这意味着不能编辑它,也不能抓取任何信息。所以据我所知,没有办法使用 JS 从 iFrame 中获取任何信息。” 这是完全不正确的。如果iframe 来自与您的主机页面相同的域,则您可以完全访问其 DOM 以及其中的所有内容。如果它来自不同的域,则您无权访问。决定这一点的不是iframe,而是它来自的域。
  • 我正在尝试获取子元素页面的元素的偏移值。我不是要获取 iframe 值。我需要动态设置侧边栏 div 的高度,因为我想获取左侧栏 DIV 元素偏移顶部值以使用 screen.height 或 documentElementOffsetHeight 计算。这样我就可以获得一些高度值来提供给侧边栏并启用滚动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2010-12-07
相关资源
最近更新 更多