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 всегда является допустимым входным значением.
С уважением Хайме
1 ответ
Я только что наткнулся на ту же строчку кода.
Проблема здесь в том, что $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 для получения дополнительной информации об этом изменении.
if(jQueryObject)
всегда будет правдой, даже если для селектора или метода, использованного для получения элемента, совпадения не существует
Вместо этого проверьте его длину
var parentOffset = $offsetParent.length ? $offsetParent.offset() : 0;