You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery .offset()获取SVG元素位置在Safari返回0 Chrome运行正常如何解决

问题原因

这个是jQuery 3.4.0之前版本的已知兼容性缺陷,原因是旧版jQuery的offset()方法实现逻辑只适配了普通HTML元素,未考虑SVG元素的DOM属性差异:Safari中SVG元素不存在offsetTop、offsetLeft等普通HTML元素具备的布局属性,旧版jQuery读取不到对应值就会默认返回{top:0, left:0},而Chromium内核浏览器额外做了兼容处理,所以不会出现问题。

可行修复方案

这里提供两种可直接落地的方案,根据你的项目情况选择即可:

方案1:升级jQuery版本(成本最低)

直接将jQuery升级到3.4.0及以上版本,该版本官方已经修复了SVG元素的offset()兼容性问题,业务代码不需要做任何修改即可在Safari中正常运行。

方案2:手写兼容方法(无需改jQuery版本)

如果你的项目因为历史原因不能升级jQuery,可以自己实现兼容SVG的坐标获取方法,替代jQuery原生的offset()调用:

// 兼容SVG元素的坐标获取方法
function getElementOffset(ele) {
  const rect = ele.getBoundingClientRect();
  return {
    top: rect.top + window.pageYOffset,
    left: rect.left + window.pageXOffset
  }
}

// 业务代码修改为调用自定义方法
$("#el").hover(function () {
  let position = getElementOffset(this);
  $('#popover').css(position);
});

该方法基于原生DOM的getBoundingClientRect()实现,兼容所有主流浏览器,性能和稳定性都优于旧版jQuery的offset逻辑。

内容的提问来源于stack exchange,提问作者EOD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:24:02