【问题标题】:jquery migration from 1.2.6 to 1.7.x [duplicate]jquery 从 1.2.6 迁移到 1.7.x [重复]
【发布时间】:2012-07-02 13:17:44
【问题描述】:

可能重复:
How good is Jquery's Backward Compatibility?

我正在开发和管理一段时间的购物网站。

当我们开始使用 jQuery 时,它是当时的 1.2.6 版本,直到最近才发现需要升级。

我现在遇到了一些错误,由于 NDA 的原因我无法在此处披露一些更改,并且想用更新的版本(即 1.7.x)试试运气

它是否完全向后兼容,是否有从某个地方的旧版本迁移的指南?

或者更好,有人能指出可能的问题点吗?

编辑: 只是为了说明这一点,我已经在暂存区尝试了 1.7。 不太明显的部分:错误消失了,我想进一步测试,但测试时间很宝贵(而且是无偿的,不用说),所以我问你们。

【问题讨论】:

  • @AnthonyGrist 这不是重复的,因为这个问题很老而且答案已经过时了。
  • 没有简单的解决方案或简单的答案。 您必须完成这项工作,检查每个插件的兼容性,查看 jQuery 发行说明并逐行检查您的自定义 jQuery 代码。否则,只需升级并彻底测试所有内容。无论您做出什么决定,您仍然需要排查和修复任何 JavaScript 错误。
  • @Alnitak 我标记为可能重复的问题比他升级的 jQuery 版本更新。唯一有效的一点是信息可能已经过时,尽管我认为该问题的公认答案解决了这个问题的要点 - jQuery 的向后兼容性有多好?
  • @AnthonyGrist 相关日期将是他正在升级的版本的发布,当前的答案是“不如以前那么好”!

标签: jquery migration


【解决方案1】:

最显着的向后不兼容是在 1.6.x 中引入了 .prop,它破坏了 .attr 的一些用法1

自 1.4 以来,我一直在广泛使用 jQuery(尽管不如您的 1.2),并且不记得有任何其他实际破坏代码的更改。

还有一些功能已弃用,但不一定会被删除(请参阅http://api.jquery.com/category/deprecated/)。

jQuery 团队还已经宣布了他们计划在 1.8 中弃用的内容的计划,并可能在 1.9 中完全删除(例如$.browser


1 有些人使用.attr 来访问一些严格来说是DOM 对象属性的数据,而.attr 应该反映从服务器下载的实际元素 。例如,.attr('checked') 告诉您复选框是否最初被选中,而.prop('checked') 告诉您它是否当前被选中。

【讨论】:

  • 值得一提的是,从 1.6.1 开始,.attr() 再次包含了属性回退,所以只有 1.6.0 破坏了一些东西。
【解决方案2】:

嗯,jQuery 并不完全向后兼容:也许你会发现the similar discussion 很有帮助。如果您的 JS 代码库已经显示错误,我会说这一举措绝对值得。

【讨论】:

    【解决方案3】:

    通常升级 jquery 比使用旧版本的新代码更容易,因为大多数旧功能或行为只是被弃用但没有被删除。建议保持最新状态,因为旧版本中也存在更多安全问题。但无论如何,您不得不预计会出现错误...

    【讨论】:

      【解决方案4】:

      Drupal 6 提供开箱即用的 jQuery 1.2,而 jQuery 更新模块只能升级到 jQuery 1.3,因为有些东西在其他方面被破坏了。

      你真的应该在你的环境中测试,没有人能回答你。

      【讨论】:

        【解决方案5】:

        你应该更新 jQuery,因为版本号越高,bug 越少,速度也越快。

        但我认为它可能造成问题。例如,某些插件不适用于某些版本。

        【讨论】:

        • 更高的版本号并不一定意味着更少的错误;如果新版本有新特性或新功能,它很可能会引入比修复更多的错误。
        • 我猜这就是测试版的用途,但你是对的。无论如何,我仍然鼓励使用最新的安全版本让网站保持最新状态。
        • 嗯,这我现在正在尝试。问题是,当它上线时,我无法承受任何问题。
        • 你应该使用类似的东西:只有在 GET var 'v'=="on" 或其他东西时才使用 jQuery 1.7。像这样只有您将使用带有新版本的页面进行测试。或者如果你想绝对确定,你可以搜索每个命令可能的兼容性问题,但这确实是很多工作要做。 O.o
        • 所以你真的建议在生产系统上测试这样的东西吗?在开发系统上,您可以简单地更新 jQuery 并进行测试 - 不需要奇怪的 GET 变量来选择 jQuery 版本。