我试图从工作的很大数量的网站从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问题来说,这似乎是一个相当干净的解决方案,但我不禁感到最初的解决方案......远未达到可行的目标。
是否有重新引入此功能的任何“标准”的方式,如果没有,是否有这样做的任何更好的方式?
干杯。
我会做同样的事情,只要重写功能,而不是仅仅做旧代码分配到新我想创建一个特定的功能,其中:委托给新的功能,采取的任何行为改变关怀,还会抛出某种形式的弃用警告(如使用控制台),以便客户端代码可以从旧方法移开。 –