jQuery1.4新特性及其变化(上)

首页 > jQuery1.4新特性及其变化(上)

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

  本文分上下两篇,上篇主要总体介绍jQuery 1.4版本的相关使用及更新,下篇通过一些代码示例来展示更新的方法及新添加的方法。

  【下载及调用】

  像以往一样,官方提供了jQuery的两份拷贝,一份是压缩版本(使用Google Closure Compiler压缩,之前使用的是YUI),另一份是未压缩版本(用来调试和阅读)。

  jQuery压缩版本(23kb,gzip压缩后)

  jQuery未压缩版本(154kb)

  之前曾提议过 通过google服务器加载jQuery,提高加载速度。现在,我们依然可以通过Google的服务器调用压缩后的jQuery 1.4版本文件,如下:

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"><!--mce:0--></script>

  【新特性及变化】

  在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属性开启它。

  提示:如果您不了解http header的相关知识,推荐阅读这篇文章。

  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开始建立了代码风格规范,大多数核心代码符合这一规范。虽然这个规范仅有几条,但我相信这是一个良好的开端。

  【相关测试】

  在jQuery 1.4中解决了207个bug(相比之下,1.3解决了97个bug)。

  此外,测试用例从1.3.2的1504个增加了1.4版本的3060个。这些测试100%通过当下主流浏览器(Safari 3.2, Safari 4, Firefox 2, Firefox 3, Firefox 3.5, IE 6, IE 7, IE 8, Opera 10.10, 和 Chrome)。

  【版本兼容性处理】

  从上面还是可以看出1.4是做了相当多的更新,为了保证当前版本的向后兼容(也就是希望你之前使用jQuery 1.3版本的程序平稳过渡到1.4版本上),官方特意提供了兼容性脚本补丁,如下使用:

  <script src="http://code.jquery.com/jquery.js"></script>

  <script src="http://code.jquery.com/jquery.compat-1.3.js"></script>

  注:以上内容以 jQuery官方文档 为依据撰写而成,更加详细内容可直接访问官方说明页面。

  原文:http://css9.net/jquery-1-4-released-new-features-1/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值