从 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 应用程序。
所以我的问题是要更改和删除什么,例如 Ajax 和 events。
就像我所说的这些错误
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的主要内容,如果未能解决你的问题,请参考以下文章