从 jQuery 1.x 升级到 jQuery 2.x

Posted

技术标签:

【中文标题】从 jQuery 1.x 升级到 jQuery 2.x【英文标题】:Upgrade from jQuery 1.x to jQuery 2.x 【发布时间】:2014-06-02 02:20:18 【问题描述】:

我正在尝试。

我有 jQuery 1.8 和 jQueryUI 1.8,现在我想升级到 jQuery 2.x 并增强我的 web 应用程序。

所以我的问题是要更改和删除什么,例如 Ajaxevents

就像我所说的这些错误

Uncaught TypeError: Object [object Object] has no method 'live'

.on() 和 .ajax() 之类的函数有变化吗? (我知道 .live 已被弃用)。

附:我必须添加使用 jQuery 2 的 Zurb Foundation 5。

【问题讨论】:

除了放弃对 oldie 的支持之外,您不必更改从 1.8 到 2.x 的任何内容。 jQuery 1.x (1.9+) 和 2.x 具有相同的 API。唯一的区别是 2.x 不支持 IE 6-8。请看:jquery.com/upgrade-guide/1.9 关键是您甚至没有尝试进行升级,或者您遇到了问题并且您没有向我们提供该问题。无论哪种方式,我们都无法真正回答。答案很简单“你不应该有任何问题” 没有。你不会。自 jquery 1.5 以来,jquery 的 ajax 方法没有显着变化 然后用该信息提出另一个问题。简单地询问升级是否有任何问题太宽泛了。例如,可能会给您带来麻烦的事情可能不会影响我。 【参考方案1】:
    不要在位置属性中使用offset 选项,例如代码$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()。 不要对 $.browser 使用浏览器嗅探,而是尝试使用特征检测 ($.support)。 不要使用deferred.isRejected()deferred.isResolved(),而是使用deferred.state()。不要使用deferred.pipe(),应该使用deferred.then() 方法。 不要使用$elements.size() 方法,而是使用$elements.length 属性。 .size() 方法在功能上等同于.length 属性;但是,.length 属性是首选,因为它没有函数调用的开销。 .trigger()ed“点击”事件中的复选框/收音机状态现在与用户启动的操作中的状态相同。 更改了 .data() 键的命名约定,例如,ui-dialog 而不是 dialog。 (http://jqueryui.com/upgrade-guide/1.9/#changed-naming-convention-for-data-keys)。 不要使用$.ui.contains(),而是使用$.contains()。 每个小部件实例已经具有唯一标识符this.uuid 和事件命名空间this.eventNamespace = "." + this.widgetName + this.uuid。不要手动生成类似的东西。 不要使用$element.focus(n) - 它已被弃用。使用setTimeout(function() $element.focus(); , n);。 不要使用$element.zIndex() - 它已被弃用。 不要使用$.ui.keyCode.NUMPAD_* 常量 - 它们已被删除。 不要使用$element.data('someWidget') 来检索小部件实例。使用instance() 方法:$element.someWidget('instance')。与其他插件方法不同,instance() 方法可以安全地调用任何元素。如果元素不是给定小部件的实例,则该方法返回 undefined: $('<div></div>').dialog('instance') /* returns undefined instead of throwing Error */

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

jQuery Core 1.9 Upgrade Guide jQuery UI 1.9 Upgrade Guide jQuery UI 1.10 Upgrade Guide jQuery UI 1.11 Upgrade Guide jQuery UI 1.12 Upgrade Guide

【讨论】:

很好的答案 :) 非常精确 14.检查您下载的其他 JS 库需要哪个 jQuery 版本。【参考方案2】:

如果您正在考虑从 jQuery 1.x 升级到 jQuery 2.x,应该考虑这一点并采取以下步骤:):

1.不再支持 IE6/7/8

我仍然认为放弃 IE8 有点为时过早,但团队 不能再等了。 jQuery 2.0 删除了所有遗留的 IE 代码 用于节点选择、DOM 操作、事件处理和 Ajax。

2.自定义构建功能在 2.0 版中得到了改进

因此您可以排除 12 个未使用的模块中的任何一个,并将 jQuery 缩小到 10Kb 以下。可以省略的模块有:List of Functions

我应该升级吗?

重要的是要了解 jQuery 2.0 与 jQuery 1.9 具有相同的 API。修复了少量错误,但没有新功能。

但是,如果您是那些放弃对 IE6/7/8 支持的幸运开发人员之一,抓住 jQuery 2.0,不要回头。

【讨论】:

请注意,截至 2015 年 1 月,IE 8 仍占市场份额的 19%,据 netmarketshare.com/… 是的,但您可以添加 IE 修复(检查客户端是否使用 IE,然后加载将修复该问题的库)听起来不错? @bburns.km netmarketshare.com 是these many sites 中唯一一个报告如此高的 IE 数量的公司。 Gmail 不再支持 IE8(仅支持其基本 html 版本)。我认为放弃它是安全的。 只是在此评论中提到,微软已于 2016 年 1 月 12 日结束对 Internet Explorer 7/8/9/10 的支持。希望强制用户迁移到 IE11 (win7) 和边缘(win10)。 microsoft.com/en-ca/WindowsForBusiness/End-of-IE-support 。您还可以查看来自 W3C w3schools.com/browsers/browsers_stats.asp 的浏览器统计信息 根据上面引用的同一张图表,现在 IE8 的市场份额似乎不到 5%。在我自己的网站上,它不到 5% 的 IE 用户的 1%...几乎没有【参考方案3】:

在 jQuery 1.9 中,删除了以前版本的 jquery 中可用的几个方法。

如果您使用这些方法,那么是的,您会遇到问题。

否则,不,您不会遇到问题。

使用您提到的 jQuery 迁移插件将解决您在从 1.8 升级到 1.9+(包括 2.x)时可能遇到的所有问题,它还会通知您正在使用的任何方法当您查看控制台时已删除。迁移插件是将 jquery 从 1.6x-1.8x 升级到 1.9+/2.0+ 的最佳方式。包含 jquery 2.x,然后包含 migrate 插件,然后打开控制台并替换旧方法,直到 migrate 插件停止发出警告。此时您应该能够安全地删除迁移插件。

【讨论】:

谢谢凯文不要低估任何人,因为我什至不在这里问,因为这个人投票不赞成,无论如何谢谢:)

以上是关于从 jQuery 1.x 升级到 jQuery 2.x的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 从 1.8.3 升级到 3.5.1

jQuery升级踩坑大全

将 jQuery 从 1.11.1 升级到 3.3.1 后的弹出问题

jQuery升级踩坑大全

jQuery 升级踩坑大全

升级到 jQuery 1.8.2 后验证异常