2013-04-15 52 views
5

我试图从工作的很大数量的网站从jQuery(1.2.6,1.4.3)的非常旧版本升级到最新版本版本(1.9.1)。事情进展得很顺利 - 迁移脚本完成了大部分的工作,尽管这只是1.6.4到1.9.1,我想我已经得到了大部分需要排序的其他更改。jQuery升级,.attr和.prop - 1.2.6到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问题来说,这似乎是一个相当干净的解决方案,但我不禁感到最初的解决方案......远未达到可行的目标。

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

干杯。

+0

我会做同样的事情,只要重写功能,而不是仅仅做旧代码分配到新我想创建一个特定的功能,其中:委托给新的功能,采取的任何行为改变关怀,还会抛出某种形式的弃用警告(如使用控制台),以便客户端代码可以从旧方法移开。 –

回答

5

的jQuery 1.9移除很多的已经在以前的版本中被弃用旧的功能。正如你发现的那样,从jQuery 1.2升级到1.9,你几乎肯定会碰到它们中的很多。

幸运的是,jQuery 1.9对与旧版本的向后兼容性,这使回所有在1.9中删除的旧的过时的功能称为jQuery Migrate同伴库。

如果你需要得到你的旧代码的备份,并与最新的jQuery版本上运行,使用jQuery迁移得到它的工作。

但是,请记住,迁移库的目的是帮助您做出transision的新功能,而不是让你离开你的代码停留在过去。因此,使用Migrate来使代码正常工作,但是您需要开始考虑更改代码,以便不需要迁移。

取决于你有多少代码有,这可能是相当多的工作,但其迁移也允许你一个接一个,使这些变化,而不是一下子解决所有问题。

希望有所帮助。

相关问题