jQuery将.attr和.prop-1.2.6升级到1.9.1

jQuery将.attr和.prop-1.2.6升级到1.9.1,jquery,attr,prop,Jquery,Attr,Prop,我正在尝试将大量正在工作的站点从非常旧的jQuery版本(1.2.6,1.4.3)升级到最新版本(1.9.1)。事情进展得很顺利——迁移脚本完成了大部分的准备工作,尽管这只适用于1.6.4到1.9.1,但我认为我已经完成了大部分需要排序的其他更改 不过,我遇到了几个问题,主要问题是从.attr()更改为.prop()——因为我们所有的代码都使用.attr(),如果我们只是将其更改为使用.prop(),就会出现一些中断,特别是一些用于过滤商店中产品的链接——这些链接在被单击时调用AJAX调用并执行

我正在尝试将大量正在工作的站点从非常旧的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;
我确信这会引入一个充满bug的世界,尽管它修复了最初被破坏的bug。从那以后,我只注意到了由它引起的另一个bug(无论如何,到目前为止),那就是它导致href属性(可能是从#开始的锚点)返回完整的标准化URL-


$('div').append($('a').attr('href'));
$('div').append('
'+$('a').prop('href')); //#什么东西\nhttp://fiddle.jshell.net/eT6xE/1/show/#something
考虑到这是我注意到的唯一一个bug,我对它进行了一些研究,并提出了一个解决方案——它似乎能够重新引入原始功能。尽管这似乎是解决href attr/prop问题的一个相当干净的解决方案,但我还是忍不住觉得最初的解决方案是。。。距离可能的目标还有很长的路要走

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

干杯。

jQuery 1.9删除了许多以前版本中不推荐的旧功能。从jQuery1.2到1.9,您几乎可以肯定会遇到很多问题,正如您所发现的那样

幸运的是,jQuery1.9有一个附带的库,该库要求与旧版本向后兼容,这将恢复1.9中删除的所有旧的不推荐的特性

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

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

根据您拥有的代码数量,这可能是一项相当大的工作,但是在那里进行迁移可以让您一个接一个地进行更改,而不必一次修复所有内容


希望这会有所帮助。

我会做一些类似的事情来覆盖函数,但我不会只是从旧代码到新代码进行赋值,而是创建一个特定的函数:委托新函数,处理任何行为更改,并抛出某种形式的弃用警告(例如使用控制台)因此,客户机代码可以从旧方法中转移。
<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