首页 > 解决方案 > JQMIGRATE:jQuery.fn.offset() 需要一个连接到文档的元素

问题描述

我有一个使用 jquery 1.x 的站点......现在,我已经开始在这个站点中使用 jquery 3.x ......为了解决任何迁移问题,我安装了 JQMigrate。

它在控制台窗口中显示的消息之一是“JQMIGRATE:jQuery.fn.offset() 需要连接到文档的元素”。

我不确定如何解决它。唯一被称为“解决方案”的是:“不要尝试获取或设置无效输入的偏移信息。”

这很明显,但在实践中这意味着什么?例如,如果我有,

var parentOffset = $offsetParent.offset();

我应该像这样写那行吗?

var parentOffset = $offsetParent ? $offsetParent.offset() : 0;

真的有必要吗,因为我知道 $offsetParent 始终是有效的输入。

问候詹姆

标签: jqueryjqmigrate

解决方案


我刚刚遇到了同一行代码。

这里的问题是该$offsetParent元素不是document.

我们不想检查$offsetParent.length,而是要确保这个元素实际上是document

// As of jQuery 3.0, .offset() only works for elements that are currently
// in the document. In earlier versions, this would return the value below
// but in jQuery 3.0 this throws an error.
var parentOffset = {top: 0, left: 0};

// If the element is in the document we are safe to use .offset()
if(document.body.contains($offsetParent[0])) {
    parentOffset = $offsetParent.offset();
}

有关此更改的更多信息,请参阅https://github.com/jquery/jquery-migrate/blob/master/warnings.md#jqmigrate-jqueryfnoffset-requires-an-element-connected-to-a-document


推荐阅读