将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

  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 ,尝试使用function检测( $.support )。
  4. 不要使用deferred.isRejected()deferred.isResolved() ,而是使用deferred.state() 。 不要使用deferred.pipe() ,而应该使用deferred.then()方法。
  5. 不要使用$elements.size()方法,而是使用$elements.length属性。 .size()方法在function上等同于.length属性; 但是, .length属性是首选属性,因为它没有函数调用的开销。
  6. .trigger() ed“click”事件中的复选框/无线电状态现在具有与用户启动的操作中相同的状态。
  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 this.eventNamespace = "." + this.widgetName + this.uuid 。 不要手动生成类似的东西。

原始升级指南和完整的更改列表:

  • jQuery Core 1.9升级指南
  • jQuery UI 1.9升级指南
  • jQuery UI 1.10升级指南