Если бы jQuery была библиотекой, предназначенной для поддержки SVG, я бы назвал это ошибкой jQuery.Но это не так, поэтому они могут сказать, что это ошибка восходящего потока, которую Safari должен исправить.
Что происходит, эта часть кода jQuery:
// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
// Support: IE <=11 only
// Running getBoundingClientRect on a
// disconnected node in IE throws an error
if ( !elem.getClientRects().length ) {
return { top: 0, left: 0 };
}
Это считается запасным вариантом для IE, чтобы убедиться, что не возникает ошибка для отключенных узлов DOM.Но он использует интерфейс Element.getClientRects()
, который для Safari возвращает пустой список, если элемент находится в пространстве имен SVG.
Способ обойти это - напрямую использовать оставшуюся часть кода.Вы знаете, что выбранные узлы являются частью документа, поэтому упомянутая ошибка не может произойти:
function setOffsetPosition($this, $el) {
var rect = $this[0].getBoundingClientRect();
var win = $this[0].ownerDocument.defaultView;
var elW = $el.width();
var elH = $el.height();
var marginB = 20;
return {
top: rect.top + win.pageYOffset - (elH + marginB),
left: rect.left + win.pageXOffset - (elW/2)
};
}