将jQuery 1.4.2升级到1.9.1

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

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


谢谢大家!

您可以尝试使用它来检测和恢复jQuery中已弃用并从1.9版起删除的API或功能。

只需查看代码中仍存在的弃用函数;需要注意的大问题是
.live()
.delegate()
,它们已被
.on()
取代,
.attr()
取代
.prop()
.browser()
。随着新版本的出现,我一直在更新我的代码,这非常简单(大约20K行js),所以你应该不会有任何问题。从我提到的函数开始,我认为这将解决大多数问题。然后,查看
Migrate
插件。

除了您的答案之外,如果您的应用程序从代码背后注入自定义html属性,那么在客户端,仍然只能使用attr()而不是新的prop()读取这些属性

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

在第一次进行类似的jQuery升级时,我发现关于attr和新道具之间差异的这篇文章读起来非常有趣:

  • 不要在位置属性中使用
    offset
    选项,例如code
    $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()
  • 请勿将浏览器嗅探与
    $一起使用。浏览器
    ,请尝试改用功能检测(
    $。支持
  • 不要使用
    deferred.isRejected()
    deferred.isResolved()
    ,而是使用
    deferred.state()
    。不要使用
    deferred.pipe()
    ,应该使用
    deferred.then()
    方法
  • 不要使用
    $elements.size()
    方法,而是使用
    $elements.length
    属性。
    .size()
    方法在功能上等同于
    .length
    属性;但是,首选
    .length
    属性,因为它没有函数调用的开销
  • .trigger()
    ed“click”事件中的复选框/无线电状态现在与用户启动的操作中的状态相同
  • 更改了
    .data()
    键的命名约定,例如,
    ui对话框
    而不是
    对话框
    。()
  • 不要使用
    $.ui.contains()
    ,而是使用
    $.contains()
  • 每个小部件实例都已具有唯一标识符
    this.uuid
    和事件命名空间
    this.eventNamespace=“.”+this.widgetName+this.uuid
    。不要手动生成类似的内容
  • 原始升级指南和完整的更改列表:


    请阅读升级指南。。。大多数插件可能仍会继续使用迁移插件,否则,如果有任何GitHub肯定是您的朋友,请更新到更新的插件。我不熟悉各种迁移工具。我怀疑他们做得不错,但毫无疑问,你必须进行回归测试。我们最近从1.4.1进行了完全相同的升级,并且仍然在修复一些小问题。谢谢回复Daniel!我将检查迁移插件。关于我应该升级到哪个版本还有其他建议吗?如果我们升级到不同于1.9.1的版本会更安全吗?@iGanja所以你从1.4.1升级到了1.9.1?我们肯定会让我们的QA团队做回归测试,但有多糟糕?我不在乎修理小东西。我只是害怕,希望这不是疯狂的大量更改。@user812355大部分是小东西,没有大问题。在大多数情况下,jQuery在为迁移工具创建升级路径方面做得很好。我最近遇到的一件事是在一个表达式中,该表达式根据“”计算,jQuery现在返回null。我相信这是在检索数据元素值时,但我可能错了。归根结底,像这样的小事情,迁移工具将很难接受。诚然,这是一个糟糕的设计开始,但我们的代码库中不是都有这样一点吗?:)不推荐使用的函数不是问题(虽然应该转换用法,但它们“仍然有效”);删除的功能和特性才是真正导致问题的原因。是的,所以我认为启动升级项目的最佳方法是首先使用最常用的功能(委派、活动、属性、浏览器)。删除的函数将很容易被发现,因为您的代码将被破坏;只需替换为新函数。我在这里回答了一个类似(但更一般)的问题:。希望这有帮助!