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

时间:2013-04-15 11:55:32

标签: jquery attr prop

我正在尝试将大量工作站点从非常旧版本的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 - {{3} }

<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/eT6xE/1/ - 这似乎可以重新引入原始功能。尽管对于href attr / prop问题来说这似乎是一个相当干净的解决方案,但我不禁觉得最初的解决方案是......远远不能实现它。

是否有重新引入此功能的“标准”方式,如果没有,有没有更好的方法呢?

干杯。

1 个答案:

答案 0 :(得分:5)

jQuery 1.9删除了以前版本中不推荐使用的旧功能 lot 。从jQuery 1.2迁移到1.9,你几乎可以肯定会发现它们中的很多,正如你所发现的那样。

幸运的是,jQuery 1.9有一个名为jQuery Migrate的配套库,以便与旧版本向后兼容,从而放弃了1.9中删除的所有旧的弃用功能。

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

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

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

希望有所帮助。