为庆祝jQuery的四周年生日,jQuery官方团队正式发布了jQuery 1.4版本。在这个版本中,jQuery官方团队做了大量的编码、测试和文档工作,相对之前版本自然改进不少,让我们一起来看看有哪些新变化吧。

1、为一些方法添加设置函数(Setter Functions)

在之前版本中,我们可以给attr()方法传入一个函数,将函数的返回值赋予某个属性。1.4中,这个功能被添加到了更多的方法中:.css()、 .attr()、 .val()、 .html()、 .text()、 .append()、.prepend()、 .before()、 .after()、.replaceWith(), .wrap()、 .wrapInner()、 .offset()、 .addClass()、 .removeClass()、 .toggleClass()。

此外,在下面方法中,还可以传入当前值作为设置函数的第二个参数,供设置函数使用:.css()、.attr()、.val()、.html()、.text()、.append()、.prepend()、.offset()、.addClass()、.removeClass()、和 .toggleClass()。

例如:

jQuery(’<img src=”enter.png” alt=”enter your name” />’)
.attr(”alt”, function(index, value)

{
    return “Please, ” + value;
});

2、更新了jQuery中序列化的核心方法 jQuery.param()

之前对于{foo: ["bar", "baz"]}序列化后的结果是“foo=bar&foo=baz”,现在为“foo[]=bar&foo[]=baz”。
这样更改的目的主要是告诉接收端,传入的是一个数组对象。

3、在jQuery.ajax 中可在不指定dataType属性时,会根据response的content-type自动识别。

例如:ajax请求返回的对象是json类型(application/json),则dataType会自动指定为”json”(不指定的情况下)。

4、在jQuery.ajax请求中,添加对Etag的支持。

之前jQuery在ajax请求中是在header中不发送If-None-Match值的(也就是不支持Etag),也就默认忽略了浏览器缓存。现在可以通过指定ifModified属性开启它。

5、使用原生的JSON.parse,对json进行严格解析

在1.3及更早版本中,jQuery通过javascript的eval方法来解析json对象。在1.4中,如果你用的浏览器支持,则会使用原生的JSON.parse进行json对象解析,这样对json对象的书写验证则更为严格。如:{foo: “bar”}的写法将不会被验证为合法的json对象,必须写成{”foo”: “bar”}。如果你的程序打算升级到1.4版本,那么这一点要尤其注意了。

6、在使用serialize() 序列化时,添加对HTML5元素的支持

7、为ajax请求添加上下文支持,参考jQuery.ajax()

jQuery.ajax

({
    url: “test.html”,
    context: document.body,
    success: function(){
        jQuery(this).addClass(”done”);
    }
});

8、在jQuery.ajax()请求时,接收XMLHttpRequest对象作为success的第三个参数

9、在ajax请求时,总是设定Content-Type属性

在1.3版本中,如果ajax发送的数据为空时,则不发送Content-Type属性值,1.4中则总是显式设定Content-Type值。这是因为有些程序后端通过Content-Type值判断如何响应。

10、当用jsonp方式进行ajax请求时,可以显式指定callback的名称

之前jsonp的callback名称是由jQuery生成的随机名称,现在可以通过jsonpCallback参数显式指定

11、部分CSS相关方法被重写。其中,.css()方法效率有两倍的提升, .addClass()、.removeClass()和.hasClass()效率有三倍的提升。.toggleClass() 方法可以一次切换多个class

$(”div”).toggleClass(”current active”);

12、在jQuery 1.4中,许多dom操作相关方法在性能上大幅提升

其中.append()、 .prepend()、.before()、和 .after() 的性能被改善,
.html() 的性能提升了近3倍。
.remove() 和 .empty()的性能提升了近4倍。

13、jQuery(”tag”)效率有所提升

当传入一个tag名称进行寻找时,搜索算法有所改进 。

14、使用id开始的选择器获取元素的速度进一步提升

类似于jQuery(’#id p’)这样以id开始的选择器获取元素的速度有所优化,速度是最快的。

15、jQuery()(或$())将返回jQuery空对象

在之前当调用jQuery()时,默认返回的是document的jQuery对象,也就是等价于jQuery(’document’)。在1.4版本中将不再做这样的转换,直接返回jQuery空对象。

在1.4中,之前jQuery().ready()的写法不建议使用(虽然仍然可以用),应当写作jQuery(document).ready()或jQuery(function(){})

16、添加了新事件.focusin()和.focusout()

.focusin()和.focusout()方法等价于focus()和blur()方法,不同的是支持事件冒泡。需要注意的是focus()和blur()事件依然不可以通过live()方法绑定。

17、几乎所有事件都支持live()绑定

除了ready、focus(用focusin替代)、blur(用focusout替代)事件外的所有事件都支持live绑定

18、jQuery 1.4对内部结构重新组织,并开始建立代码风格规范

之前的core.js被划分为attribute.js, css.js, data.js, manipulation.js, traversing.js和queue.js。ready事件被移至core.js中。

jQuery 1.4开始建立了代码风格规范,大多数核心代码符合这一规范。虽然这个规范仅有几条,但我相信这是一个良好的开端。

One Response to “jQuery 1.4新特性及其变化”

  1. Buy Links Mexico Mexico Mozilla Firefox Mozilla Firefox 3.5.3 Windows Windows XP
    九月 27th, 2010 06:33

    Love all the opinions expressed here! How is everyone? Love how everyone expresses whatr they feel :)

    回复

Leave a Reply