我正在尝试将大量工作站点从非常旧版本的jQuery(1.2.6,1.4.3)升级到最新版本(1.9.1).事情进展顺利 – 迁移脚本完成了大部分的工作,即使只有1.6.4到1.9.1,我认为我已经完成了大部分需要排序的其他更改.
我遇到了一些问题,主要是从.attr()到.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问题来说这似乎是一个相当干净的解决方案,但我不禁觉得最初的解决方案是……远远不够.
是否有任何“标准”方式重新引入此功能,如果没有,有没有更好的方法呢?
干杯.
解决方法
jQuery 1.9删除了许多以前版本中已弃用的旧功能.正如您所发现的那样,从jQuery 1.2移动到1.9,您几乎可以肯定会遇到很多这样的问题.
幸运的是,jQuery 1.9有一个名为jQuery Migrate的配套库,用于向后兼容旧版本,这将删除1.9中删除的所有旧的弃用功能.
如果您需要备份旧代码并使用最新的jQuery版本运行,请使用jQuery Migrate使其正常工作.
但是,请记住,Migrate库的目的是帮助您转换到更新的功能,而不是让您的代码留在过去.因此,使用Migrate来使代码正常工作,但是您需要开始考虑更改代码,以便不需要迁移.
根据您拥有的代码量,可能会有相当多的工作,但迁移到那里可以让您逐个进行这些更改,而不必一次修复所有内容.
希望有所帮助.