将jQuery 1.4.2升级到1.9.1
我们一直在我们的Web应用程序中使用jQuery 1.4.2。 最近有人建议我们升级到更新的版本。 到目前为止,我们正在考虑升级到1.9.1,因为我们需要支持IE7和IE8。 我们的应用程序使用一堆插件,例如fancybox,cookies,tipsy,jcarousel和其他一些插件。 另外我们有很多脚本文件,可能大约有50个文件。 然后是一些嵌入文件的脚本。 我觉得这将是一场灾难! 有人有建议吗? 我们还没有开始升级到1.9.1。 如果我想,我可以说服经理们升级到另一个版本。 我们最安全的赌注是什么? 请指教。
谢谢!
只需查看代码中仍旧使用的函数; .delegate()
是.live()
和.delegate()
,它们已被替换为.on()
,其中.prop()
是替换,而.browser()
。 随着新版本的出现,我一直在更新我的代码,这很简单(约20K行的js),所以你不应该有任何问题。 刚开始我提到的function,我认为这将解决大部分问题。 然后,查看Migrate
插件。
您可以尝试使用jQuery Migrate插件 ,该插件用于检测和恢复已在jQuery中弃用并从1.9版开始删除的API或function。
除了frenchie的回答之外,如果你的应用程序从代码隐藏中注入自定义html属性,那么在客户端,这些属性仍然只能使用attr()而不是new prop()来读取。
根据我目前的理解,这是因为元素的名称 – 属性添加只有当它们是DOM元素类型的本机属性或者使用相同的客户端jQuery prop()方法添加时才被识别为属性。
第一次做类似的jQuery升级,我发现这个线程关于attr和新prop之间的差异是一个非常有趣的读物: prop-vs-attr
- 不要在位置属性中使用
offset
选项,例如代码$element.position({my: 'center center', at: 'center center', offset: '5 -10'})
应替换为$element.position({my: 'center center', at: 'center+5 center-10'})
。 - 不要使用
$element.bind()
,$element.live()
,$element.delegate()
来分配事件处理程序,使用$element.on()
。 - 不要使用浏览器嗅探
$.browser
,尝试使用function检测($.support
)。 - 不要使用
deferred.isRejected()
,deferred.isResolved()
,而是使用deferred.state()
。 不要使用deferred.pipe()
,而应该使用deferred.then()
方法。 - 不要使用
$elements.size()
方法,而是使用$elements.length
属性。.size()
方法在function上等同于.length
属性; 但是,.length
属性是首选属性,因为它没有函数调用的开销。 -
.trigger()
ed“click”事件中的复选框/无线电状态现在具有与用户启动的操作中相同的状态。 - 更改了
.data()
键的命名约定,例如,ui-dialog
而不是dialog
。 ( http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys )。 - 不要使用
$.ui.contains()
,而是使用$.contains()
。 - 每个窗口小部件实例都具有唯一标识符
this.uuid
和事件命名空间this.eventNamespace = "." + this.widgetName + this.uuid
this.eventNamespace = "." + this.widgetName + this.uuid
。 不要手动生成类似的东西。
原始升级指南和完整的更改列表:
- jQuery Core 1.9升级指南
- jQuery UI 1.9升级指南
- jQuery UI 1.10升级指南