jQuery Upgrade,.attr和.prop – 1.2.6到1.9.1

我正在尝试将大量工作站点从非常旧版本的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来使代码正常工作,但是您需要开始考虑更改代码,以便不需要迁移.

根据您拥有的代码量,可能会有相当多的工作,但迁移到那里可以让您逐个进行这些更改,而不必一次修复所有内容.

希望有所帮助.

相关文章

1.第一步 设置响应头 header(&#39;Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...