一,增加的一些特性
1,for...of循环
可以用来遍历一个jquery集合所有的DOM元素。
假设你想给页面中每个input元素分配一个ID,在jQuery3之前,你可以这样写:
1 var inputs = $('input');
2 for(var i=0;i<inputs.length;i++){
3 inputs[i].id = 'input-'+i;
4 }
jQuery3:
1 var inputs = $('input');
2 var i=0;
3 for(var input of inputs){
4 input.id = 'input-'+i++;
5 }
2,采用requestAnimationFrame()来实现动画
IE10以上的版本都支持这个函数
3,unwrap()
该方法增加了一个可选的选择器参数
1 unwrap([selector])
有了这一变化,你就可以传入包含一个选择器表达式的字符串,在父元素进行匹配,如果存在匹配,匹配的子元素被解包,不进行任何操作。
二,被修改的一些特性
1,:visible和:hidden
修改了过滤器的含义,只要元素具有任何布局,包括那些宽度或高度为0的情况,元素被认为是:visible。比如说 <br/>元素和没有内容的内联元素可以通过:visible过滤器进行选择
<div></div>
<br />
console.log($('body:visible').length);
jquery 1.x 2.x中输出的结果是0, jquery 3中结果是2。
2,data()
该调整主要是为了让该方法符合DatasetAPI规范,jquery3 强所有属性的键都该驼峰式大小写形式
复制代码
<div id="container"></div>
var $elem = $('#container');
$elem.data({
'my-property':'hello'
});
console.log($elem.data());
复制代码
在控制台上获得以下结果:{my-property:"hello"}
在jquery3 {myProperty:"hello"}
3,Deferred对象
jquery 1.x 2.x 中 ,传入deferred中的回调函数中如果出现未捕获异常,会导致程序停止执行。而原生的Promise对象并非如此,它会抛出异常,并不断向上冒泡,直至到达window.onerror。
jquery3遵循原生的Promise对象的模式,因此,抛出的异常将被视为一个失败状态(rejection)从而执行失败回调,完成之后,整个进程 将继续进行,后续的成功回调将被执行。
复制代码
1 var deferred = $.Deferred();
2 deferrea.then(function(){
3 throw new error('an error');
4 }).then(
5 function(){
6 console.log('success 1');
7 },function(){
8 console.log('failure 1');
9 }).then{
10 function(){
11 console.log('success 2');
12 },function(){
13 console.log('failure 2');
14 }
15 );
16 deferred.resolve();
复制代码
在jquery 1.x 2.x中,只有第一个函数会被执行到,由于没有window.onerror定义任何事件处理函数,所以控制台会输出“Uncaught Error:an error”,而且进程的执行将终止
而jquery3中,行为完全不同,在控制台中会看到failure1 和success2两条消息。异常会被第一个失败回调处理,一旦被处理,则继续执行下面的成功函数。
三,已废弃,移除的方法和属性
1,废弃了bind(),unbind(),delegate(),undelegate()
用on()方法提供了统一的访问接口,取代了bind(),delegate(),live()
off()取代了unbind(),undelegate(),die()
2,移除了load(),unload(),error()
3,移除context,support,selector这些属性
4,bugs修复: width()和height()的返回值不再四舍五入
5,wrapAll() |
|