jQuery升级的速度越来越快,很容易如果你沉浸在项目中一段时间你就发现原来又跳了几个小版本了。
1.4以后有哪些值得关注的呢,简单整理了一下,至于是1.5, 1.6还是1.7的,我也就不特别标注了
1,attrhook和valhooks
开始错误理解了这两个钩子的作用,后来发现它不是针对特定元素绑定的,那么这应该是内核级别的,我们用的可能性小。
当然你可以在事件里判断是否特定元素,达到绑定特定元素的作用,但这样明显没多大意义了,同时,1.7中例中的程序居然不生效了,pass吧
2,deferred系列
这是一个相当大的改动,deferred是jquery提供的一个延迟执行的类队列对象,因为引入了这一对象,很多执行有时长的函数纷纷把返回值变成了deferred对象,比如ajax和animation.
我们先看这一系列用法:$.when().done().fail().then()
html代码:
js代码
PHP代码:
结果如下,注意done方法中的参数a1,a2
另一个例子,由于号称animation也具有了deferred的属性,所以我测试过直接将动画函数用deferred对象的一些函数拼接起来,但是失败了,结果还是要像普通函数一样把它包在deferred对象里面
测试内容:一个红色方块,点击其就开始移动,然后复位。
html代码:
js代码:
上例中可以看到,引入了Deferred对象后,做链式动画稍稍方便了那么一些,不再要一层一层地套到每个动画的callback里面去。
例中的用法是new一个新的Deferred对象,参数就是需要执行的方法,该方法的第一个参数就是new出来的对象本身。
当然deferred的深入用法建议放狗搜索专门讨论的文章。
3,$.map()开始支持“对象”而不仅仅是数组,如json对象
4,prop和attr的插曲
1.5中有个改动,将selected, checked等属性的attr方法取得的值不再返成布尔类型,而是原生的字符串(为了与原生html保持一致),同时为了编程方便,提供了prop方法来取得布尔值,这本无可厚非,但关键在于无数基于1.5版以前的项目,涉及到此处变动的地方相当相当之多,因为引起了强烈的反弹,结果在1.6中,就采用了折衷的方案:
取值,1.5版的做法会失效,但是设置的时候,则两种兼容,示例
5,delegate进一步进化
1.4中推出的delegate据说比live更有效率,实测(比如绑上几万个元素)可以得到证明,因此会将下例中的写法A改为写法B: