1月14日jquery发布了1.4版本,新版本有较大变化,但接口基本保持向下兼容。1.4的gzipped压缩版23K,压缩代码69K,为未压缩版 154K,体积略有增加。1.4有些不兼容1.3的地方,会引起原来的应用出错。使用1.4测试了下i.jrj.com.cn首页,好友关注人的ajax 请求都没出来。虽然1.4提供了兼容1.3版本的插件http://code.jquery.com/jquery.compat-1.3.js,但建议不要在现有的应用中使用,大家可以在新项目或项目改版升级中使用1.4。
我摘选了一些常用API的新特性,大家先睹为快,想更深入学习的可以看看jquery1.4新特性介绍和API。
jquery 1.4新特性介绍:http://jquery14.com/day-01#backwards
jquery API:http://api.jquery.com/
jquery1.4更新内容:
1. 1.4进行内部重构,改写了大多数常用方法,提升了常用方法的性能。
2. 扩展了下面的方法,增加setter函数作为参数。这些方法的接口向下兼容。
.css(), .attr(), .val(), .html(), .text(), .append(), .prepend(), .before(), .after(), .replaceWith(), .wrap(), .wrapInner(), .offset(), .addClass(), .removeClass(), and .toggleClass().
例如:
$('div').html(function(html){ return html.replace(/&/gi,'<span class="amp">&</span>'); });
3. Ajax改动比较大,使用1.4测试了下i.jrj.com.cn首页,ajax请求都没出来。
1) 增加了参数的数组序列化 {foo: ["bar", "baz"]}序列化为 “foo[]=bar&foo[]=baz”,而不是以前的foo=bar&foo=baz
三种方法使用原来的序列化:
// Enables for all serialization
jQuery.ajaxSettings.traditional = true;
// Enables for a single serialization
jQuery.param( stuff, true );
// Enables for a single Ajax requeset
$.ajax({ data: stuff, traditional: true });
2) 支持ETag, jq1.4使用ETag判断ifModified,jq1.3使用Last-Modified 判断
3) 根据content-type自动检测dataType是 JSON 或者 script
4) 加强JSON格式检测,不标准的{foo : "bar"}会被拒绝,应使用{"foo" : "bar"}
5) 可以明确指定JSONP回调函数的name
6) Success callback receives XHR object as third argument
7) jQuery.ajax() is now using onreadystatechange instead of a timer
4. 核心的jQuery()
1) 使用属性创建单个元素,这样创建元素就方便多了
2) jQuery()返回空jQuery对象,1.3返回jQuery(document)。所以1.4不推荐使用jQuery().ready(),可以使用jQuery(document).ready()或jQuery(function(){})
5. event
1) 新增事件代理 jQuery.proxy()
2) 新增多事件绑定
3) 增加focusin focusout事件方法
6. 不兼容以前版本的地方,可能会发生错误。
1) add()不再把选择器的匹配结果直接连接起来,1.4把匹配结果合并按照其在dom中的顺序排序
例如:页面上元素顺序是,<p>Added this... (notice no border)</p><div></div>
$("div").css("border", "2px solid red").add("p").css("background", "yellow")
jq1.3的结果是[<div></div>,<p>Added this... (notice no border)</p>],jq1.4的结果是[<p>Added this... (notice no border)</p>,<div></div>]
2) clone返回带data数据和event时间的元素
3) jQuery.data(elem)返回元素对象,不再返回元素id
4) jQuery()不转成jQuery(document)
5) val(“…”)通过value选中元素
6) jQuery.browser.version返回浏览器的引擎版本号
7) 加强json标准检查
8) jQuery.param()默认以PHP/Rails形式序列化
9) jQuery.extend(true, …) 不再扩展非原生对象和数组。
10) 如果Ajax request未指定datatye且返回text/javascript,脚本会自动执行。
11) Ajax的ifModified使用ETag检测,jq1.3使用Last-Modified判断