我正在尝试将大量工作中的网站从非常旧的 jQuery 版本(1.2.6、1.4.3)升级到最新版本(1.9.1)。一切进展顺利 - 迁移脚本完成了大部分工作,尽管这仅适用于 1.6.4 到 1.9.1,但我认为我已经完成了大部分需要排序的其他更改。
不过,我遇到了几个问题,主要问题是从.attr()
to的变化.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 问题来说,这似乎是一个相当干净的解决方案,但我还是不禁觉得最初的修复是……与它可能的修复相去甚远。
是否有任何“标准”方法可以重新引入此功能,如果没有,是否有更好的方法?
干杯。