jquery版本区别:javascript
1.3通常功可以css
1.4.2通常功可以并且稳定html
1.7+比较新特性前端
2不支持老IEjava
兼容的话最好选 1.x。稳定性就用1.7或者1.4,其中1.4的体积相对小jquery
另外更加状况选用1系列仍是2系列,2系列不支持ie6,7,8git
经常使用1.4和1.7:github
二者可扩展性、兼容性分析: ajax
因为 Jquery 的版本都是不向后兼容的,致使了基于 jquery 开发的插件兼容性有问题,当新版本的 jquery 推出后,若是开发想升级的话,
要看插件是否支持。一般状况下,在最新版 jquery 版本下,现有插件可能没法正常使用。开发者使用的插件越多,这种状况出现几率越高。api
同时,因为 jquery1.4.2 版本发布时间比较早,基于这版本开发的插件数量庞大,而对应版本的开发社区至关活跃,不少诡异的问题,
网上都有对应的解决方案。
从可扩展性来分析吧,不管是 1.7.1 仍是 1.4.2 留给开发扩展的方法只有两个,分别是 jquery.extend 和 jquery.fn.extend ,
一种是添加静态属性和方法、一种是对象添加属性和方法,扩展方式比较简单,经历了多个版本,扩展方式都一致,所以在扩展性上面没什么可比较的。
综合来讲, jquery1.7.1 的版本在多数浏览器上的性能表现无疑比 jquery1.4.2 更好,而稳定性和兼容性方面 jquery1.4.2 更出色点,
其它地方基本没什么差距。
从目前前端开发状况来讲吧,引用到第三方的扩展库相对来讲比较少,咱们更多的关注框架性能是否优越,可扩展性是否良好,所以, jquery1.7.1 的版本是当前最好的选择。
既然jQuery 2.x不支持老旧浏览器,那么为何要开发这个版本?
要说明的是,这个版本主要是用于目前一些比较高级的JS环境,也便是版本比较新的浏览器。这些JS和老旧IE没有多大关系,而jQuery 1.x中有大部分代码是
对老旧浏览器作的兼容,这个就增长了运行的负担,影响了运行效率。
jquery3.0 新特性:
新的最终版最主要的目标是更加快速,更加时尚,所以,那些支持早于IE9版本的相关技术与工做区都被移除了。这意味着若是你想要或者须要支持IE6-8,你必须用回1.12版本,由于甚至是2.X版本都没法完整支持早于IE9的浏览器。
大多数支持jQuery 3的浏览器都支持strict mode,而在本次更新中对此进行了规定。
虽然jQuery 3是写在strict mode中的,可是你须要了解的是你的代码并不须要运行在strict mode中,所以若是你想要把之前的代码迁移到jQuery 3,你不须要对已存在的jQuery代码进行重写。Strict和non-strict mode的JavaScript代码能够和谐共存。
这里有一些例外:某些版本的ASP.NET,由于strict mode的缘故,没法与jQuery 3兼容,若是你的代码涉及到了ASP.NET,你能够查看关于strict mode的细节。
jQuery 3支持for...of语句,这是由ECMAScript 6中新引进的一种for循环语句。这提供了对Arrays,Maps和Sets这样的可迭代对象一种更直接的遍历方法。
在jQuery中,for...of循环能够取代之前的$.each(...)语法,而且更容易经过jQuery的元素集合进行循环。
jQuery 3使用requestAnimationFrame() API来执行动画,使动画运行得更加顺畅、快速。新的API只用于支持它的浏览器,对于那些更老的浏览器(如IE9)jQuery使用先前的API来做为显示动画的后备方案。
RequestAnimationFrame已经推出一段时间了,若是你对如何使用它以及何时使用它感兴趣,CSS Tricks上有一篇很好的文章可供你阅读。
新的jQuery.escapeSelector()提供了对在CSS中存在特殊含义的字符串或字符进行转义的方法,该方法可以使这些字符串或字符可以继续用于jQuery选择器中,而无需对那些没法进行正确理解的JavaScript解释器进行转义。
这个示例可让你更好的了解这个全新的方法:
举个例子,页面中某个ID为“abc.def”的元素因为选择器将其解析为ID为“abc”且包含一个名为“def”的类的对象,而没法被$( "#abc.def" )选定。可是它能够由 $( "#" + $.escapeSelector( "abc.def" ) )来进行选定。
我没法肯定发生中状况的频率,可是假如你碰到过这种相似的状况,这无疑给了你一个解决该问题的简单方法。
不幸的是,jQuery 3如今还没法完整的支持SVG,可是对于操做CSS类名称的jQuery方法,如.addClass()和.hasClass()如今能够将SVG文档做为目标。这意味着你能够修改(添加、删除、切换)或者查找SVG(可缩放矢量图形)下的jQuery类,而后使用CSS的类样式。(相关阅读:Styling Scalable Vector Graphic (SVG) with CSS)
JavaScript Promises,用于异步计算的对象,如今在ECMAScript 6中已经被标准化;它们的运行情况和特性的详细说明参见Promises/A+标准。
在jQuery 3中,延迟对象已经与新的Promises/A+标准相兼容,延迟对象已经成为让建立回调队列成为可能的可链对象(chainable objects)。
新的特性改变了异步回调函数执行过程,Promises容许开发者编写在逻辑上与同步代码更接近的异步代码。
查看升级指南的代码示例,或者查看关于JavaScript Promises基础的Scotch.io教程可让你了解更多的信息。
$.when()提供了执行回调函数的一种方法,它成为了jQuery 1.5以后的一部分。这个方法很是灵活,它适用于零参数,也适用于一个或者多个做为参数的对象。
jQuery 3改变了当包含$.then()方法时对$.when()中参数的解读方法,你能够对$.when()进行额外的参数回调。
在jQuery 3中,若是你在$.when()中的then()方法内增长一个输入参数,该参数将会被解释成一个可与Promise兼容的"thenable"。
这意味着 $.when方法可以接收更加宽广的输入范围,好比原生的ES6 Promises和Bluebird Promises,这也使得编写更复杂的异步回调成为了可能。
为了增长响应式设计的兼容性,与元素显示和隐藏的代码在jQuery 3中进行了更新。
从如今开始,.show()、.hide()和.toggle()方法将会之内联样式为重点取代之前的计算样式,这种方式可以更尊重样式列表的改变。
新的代码尽量的尊重样式列表中所呈现的数值,这意味着CSS规则可根据事件(如设备从新定位和窗口尺寸调整)进行动态改变。
这个说明文件申明了最重要的结果就是:
“做为结果,断开链接的元素除非指定了内联display: none,不然将再也不认定为是隐藏的。所以,在jQuery 3.0中,.toggle()再也不对断开链接元素与已链接元素进行区分。”
若是你想要更好的了解关于全新的显示/隐藏逻辑,这个Github discussion会对你有帮助。jQuery开发者还发布了Google文档表来展现在不一样用例下新规则的运转。
jQuery 3增长一个额外的安全层用户用于防备跨站点脚本(XSS)攻击,它须要开发者指定$.ajax()和$.get()方法中的选项为dataType: "script"。
换言之,若是你想要执行跨站点的脚本请求,你必须在这些方法中做出这样的声明。
新的改变对于当“远程站点传递非脚本内容以后又提供有恶意脚本的服务内容”的状况是很是有效的。这个变化不会影响$.getScript()方法,由于它明确地设置了dataType: "script"选项。