5

我正在尝试将大量工作中的网站从非常旧的 jQuery 版本(1.2.6、1.4.3)升级到最新版本(1.9.1)。一切进展顺利 - 迁移脚本完成了大部分工作,尽管这仅适用于 1.6.4 到 1.9.1,但我认为我已经完成了大部分需要排序的其他更改。

不过,我遇到了几个问题,主要问题是从.attr()to的变化.prop()——因为我们所有的代码都使用.attr()了,如果我们只是将其更改为使用 .prop(),则会出现一些中断,特别是一些用于过滤商店中的产品——这些调用 AJAX 调用并在被点击时进行其他处理。

我最初的“修复”(在非常大的空中报价中)是基于简单地将呼叫从一个重定向到另一个:

$.fn.attr = $.fn.prop;

我敢肯定这会引入整个世界的错误,尽管它修复了最初被破坏的错误。从那以后,我只注意到另一个由它引起的错误(到目前为止,无论如何),那就是它导致 href 属性(可能是从 # 开始的锚点)返回完整的规范化 URL - http:// jsfiddle.net/eT6xE/1/

<a href="#something"><span>Product Details</span></a>
<div></div>

$('div').append( $('a').attr('href') );
$('div').append( '<br />' + $('a').prop('href') );
// #something  \n  http://fiddle.jshell.net/eT6xE/1/show/#something

鉴于这是我注意到的唯一错误,我已经玩了一点并想出了一个解决方法 - http://jsfiddle.net/M92CE/1/ - 这似乎可以重新引入原来的功能。尽管对于 href attr/prop 问题来说,这似乎是一个相当干净的解决方案,但我还是不禁觉得最初的修复是……与它可能的修复相去甚远。

是否有任何“标准”方法可以重新引入此功能,如果没有,是否有更好的方法?

干杯。

4

1 回答 1

5

jQuery 1.9 删除了许多在以前版本中已弃用的旧功能。从 jQuery 1.2 迁移到 1.9,您几乎肯定会遇到很多,正如您所发现的。

幸运的是,jQuery 1.9 有一个名为jQuery Migrate的配套库,用于向后兼容旧版本,它恢复了在 1.9 中删除的所有旧的弃用功能。

如果您需要使用最新的 jQuery 版本备份和运行旧代码,请使用 jQuery Migrate 使其正常工作。

但是,请记住,Migrate 库的目的是帮助您过渡到新功能,而不是让您的代码停留在过去。因此,请使用 Migrate 使代码正常工作,但随后您需要开始考虑更改代码,以便不需要 Migrate。

根据您拥有的代码量,这可能需要相当多的工作,但使用 Migrate 可以让您一个接一个地进行这些更改,而不必一次修复所有内容。

希望有帮助。

于 2013-04-15T12:11:58.573 回答