2

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

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

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

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

var parentOffset = $offsetParent.offset();

我应该像这样写那行吗?

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

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

问候詹姆

4

2 回答 2

2

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

这里的问题是该$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

于 2019-07-16T07:56:47.913 回答
0

if(jQueryObject)即使用于获取元素的选择器或方法不存在匹配项,也将始终为真

检查它的长度

var parentOffset = $offsetParent.length ? $offsetParent.offset() : 0;
于 2018-08-03T23:47:18.057 回答