3

我有一些 NPM 具有使用 jQuery 对 SVG 元素进行选择的依赖项。下面是我的 NPM 使用 jQuery 进行 SVG 选择时收到的警告。


'SVGElement.offsetWidth' 已弃用,将于 2016 年 4 月左右在 M50 中删除。有关更多详细信息,请参阅https://www.chromestatus.com/features/5724912467574784。locuslabs.js:6635 'SVGElement.offsetHeight' 已弃用,将于 2016 年 4 月左右在 M50 中删除。有关更多详细信息,请参阅https://www.chromestatus.com/features/5724912467574784

Chrome 提出了以下建议:

“这些属性应该只在 HTMLElement 上受支持,但在 WebKit 和 Blink 中的所有元素上都受支持。getBoundingClientRect() 通常可以用作替代品。” -philipj@opera.com

这是创建此特定警告的 jQuery 代码部分。

function getWidthOrHeight( elem, name, extra ) {
// Start with offset property, which is equivalent to the border-box value
var valueIsBorderBox = true,
    val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
    styles = getStyles( elem ),
    isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
...

问题:

NPM 是否提供了一种方法来修改 NPM 用作依赖项的 jQuery 版本?这是解决这个问题的最佳方法,还是我应该以不同的方式解决这个问题?澄清一下,这不是一个技术问题,而是一个最佳实施问题。

4

1 回答 1

1

当涉及到开源的东西时,查看他们的问题线程以解决您的问题通常是一个好主意。如果您没有发现您的问题被描述,请创建一个新问题。然后,您可以专注于更新开源库,而不是使用已弃用的方法为库强制使用一种 polyfill 变通方法。


jQuery 的 Github 问题线程正在审查和跟踪此问题:

https://github.com/jquery/jquery/issues/2895


更新审查结果:

似乎没有人真正需要非传统 API 中的 offsetParent 等价物,所以我将关闭此问题。除了少数例外,我们不支持 SVG 节点,并且由于 offsetParent 从未在每个流行的浏览器中实现,因此任何面向 Web 的代码都不应该依赖它。

删除这些属性时不会发生崩溃甚至异常。将会发生的情况是,如果您使用 jQuery 2.2.0 之前的版本,:visible 选择器将不匹配任何 SVG 元素,而 :hidden 将匹配所有 SVG 元素,即 SVG 元素始终被视为隐藏。

使用 jQuery 2.2.0 ( 79bcb29 ) 已修复此问题,您根本不需要做任何事情。

于 2016-02-09T20:33:03.257 回答