14

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

谢谢!

4

4 回答 4

12

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

于 2013-05-13T03:43:07.677 回答
3

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

于 2013-05-13T03:37:14.077 回答
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. ed“点击”事件中的复选框/单选状态.trigger()现在与用户启动的操作具有相同的状态。
  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。不要手动生成类似的东西。

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

于 2014-09-23T18:28:03.400 回答
0

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

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

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

于 2013-06-16T19:52:44.670 回答