2013-05-13 97 views
13

我们一直在我们的web应用程序中使用jQuery 1.4.2。最近有人建议我们升级到更新的版本。到目前为止,我们正考虑升级到1.9.1,因为我们需要支持IE7和IE8。 我们的应用程序使用一堆插件,例如fancybox,饼干,醉意,jcarousel和其他一堆。另外我们有很多脚本文件,可能大约有50个文件。然后用文件嵌入一些脚本。我觉得这将是一场灾难! 有没有人有任何建议?我们尚未确定升级到1.9.1。如果我想让我可以说服管理者升级到不同的版本。我们最安全的赌注是什么? 请指教。将jQuery 1.4.2升级到1.9.1

谢谢!

+0

我在这里回答了一个类似(但更通用的)问题:HTTP:/ /stackoverflow.com/a/15507363/357774。希望这可以帮助! – Noyo 2014-02-17 10:48:30

回答

12

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

+2

已弃用的函数不是问题(虽然应该转换使用情况,但它们仍“有效”); *删除*功能和功能是真正导致问题的功能和功能。 – user2246674 2013-05-13 03:56:08

+0

对,所以我认为开始升级项目的最好方法是先使用最常用的函数(委托,实时,attr,浏览器)。被删除的函数将很容易被发现,因为你的代码会被破坏;只需更换新功能。 – frenchie 2013-05-13 03:59:01

3

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

+0

也请务必阅读升级指南... http://jquery.com/upgrade-guide/1.9/大多数插件可能仍然会继续使用migrate插件,否则更新到更新的插件任何 – 2013-05-13 03:39:13

+0

GitHub绝对是你的朋友。我不熟悉各种迁移工具。我怀疑他们做了一份体面的工作,但无疑你必须进行回归测试。我们最近做了与1.4.1完全相同的升级,并且仍然在这里和那里修复一些小问题。 – iGanja 2013-05-13 03:42:13

+0

感谢Daniel的回复!我将检查Migrate插件。有关我应该升级哪个版本的其他建议?如果我们升级到不同于1.9.1的版本,会更安全吗? – sayayin 2013-05-13 03:44:48

0

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

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

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

0
  1. 不要使用position属性,例如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()中的复选框/无线电状态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。不要手动生成类似的东西。

原始升级指南和变化的完整列表:

相关问题