将jQuery 1.4.2升级到1.9.1

时间:2013-05-13 03:33:55

标签: jquery upgrade

我们一直在我们的Web应用程序中使用jQuery 1.4.2。最近有人建议我们升级到更新的版本。到目前为止,我们正在考虑升级到1.9.1,因为我们需要支持IE7和IE8。 我们的应用程序使用大量插件,例如fancybox,cookies,tipsy,jcarousel和其他一堆。另外我们有很多脚本文件,可能大约有50个文件。然后是一些嵌入文件的脚本。我觉得这将是一场灾难! 有人有建议吗?我们还没有开始升级到1.9.1。如果我想,我可以说服经理们升级到另一个版本。我们最安全的赌注是什么? 请指教。

谢谢!

4 个答案:

答案 0 :(得分:12)

只需查看代码中已弃用的函数;需要注意的最重要的是.live().delegate()已替换为.on().attr()替代.prop(),{{1} }}。随着新版本的出现,我一直在更新我的代码,这很简单(约20K行的js),所以你不应该有任何问题。刚开始我提到的功能,我认为这将解决大部分问题。然后,查看.browser()插件。

答案 1 :(得分:3)

您可以尝试使用jQuery Migrate plugins,该{{3}}用于检测和恢复在jQuery中已弃用且从1.9版开始删除的API或功能。

答案 2 :(得分:0)

除了frenchie的答案之外,如果你的应用程序从代码隐藏中注入自定义html属性,那么在客户端那些属性仍然只能使用attr()而不是new prop()来读取

根据我目前的理解,这是因为元素的名称 - 属性添加只有当它们是DOM元素类型的本机属性或者使用相同的客户端jQuery prop()方法添加时才被识别为属性。

第一次做类似的jQuery升级,我发现这个关于attr和新prop之间差异的帖子非常有趣:prop-vs-attr

答案 3 :(得分:0)

  1. 请勿在位置属性中使用offset选项,例如代码$element.position({my: 'center center', at: 'center center', offset: '5 -10'})应替换为$element.position({my: 'center center', at: 'center+5 center-10'})
  2. 请勿使用$element.bind()$element.live()$element.delegate()分配事件处理程序,请使用$element.on()
  3. 请勿对$.browser使用浏览器嗅探,请尝试使用功能检测($.support)。
  4. 请勿使用deferred.isRejected()deferred.isResolved(),而是使用deferred.state()。不要使用deferred.pipe(),而应使用deferred.then()方法。
  5. 请勿使用$elements.size()方法,而是使用$elements.length属性。 .size()方法在功能上等同于.length属性;但是,.length属性是首选属性,因为它没有函数调用的开销。
  6. .trigger()中的复选框/广播状态"点击" event现在具有与用户启动的操作相同的状态。
  7. 更改了.data()个键的命名惯例,例如ui-dialog而不是dialog。 (http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys)。
  8. 请勿使用$.ui.contains(),而是使用$.contains()
  9. 每个窗口小部件实例已具有唯一标识符this.uuid和事件命名空间this.eventNamespace = "." + this.widgetName + this.uuid。不要手动生成类似的东西。
  10. 原始升级指南和完整的更改列表: