(功能) Features
下面的内容概括了jQuery1.4里加入的变更和功能。另外所有的变更都已经在jQuery 1.4 的文档里记录了。
热门方法经过了性能上的大”检修”
不少比较热门的和常用的jQuery方法在1.4里被重写了。(译注:重写了方法的内部,外部调用没有大幅度改变) 我们分析源码的时候发现我们能够获得大幅的性能提升,通过把jQuery和自己比较: 查看内部函数被调用了多少次,然后努力降低源码的复杂度(译注:计算机算法中的Complexity)
在1.4版里我们显著的降低了大部分热门jQuery方法的的复杂度。
更易用的设置函数 (Easy Setter Functions)
算来已经有一阵了,你们已经可以给.attr()传递一个函数,然后这个函数的结果会被用来赋给相应的html属性(attribute)上。这个功能现在被移植到所有的设置函数了: .css(), .attr(), .val(), .html(), .text(), .append(), .prepend(), .before(), .after(), .replaceWith(), .wrap(), .wrapInner(), .offset(), .addClass(), .removeClass(), 以及 .toggleClass().
另外, 对于下面几个方法,当前的值会被作为第2个变量传递给这个函数。.css(), .attr(), .val(), .html(), .text(), .append(), .prepend(), .offset(), .addClass(), .removeClass(), 以及 .toggleClass().
这样代码就可以这样写: // 找出所有A标签里的'&'字符,然后用一个span标签包围 $('a').html(function(i,html){ return html.replace(/&/gi,'&'); }); // 给一些链接的title属性加些信息 $('a[target]').attr("title", function(i,title){ return title + " (新窗口打开)"; });
嵌套参数的序列化 (jQuery.param() 文档, Commit 1, Commit 2)
jQuery 1.4在jQuery.param方法里加入了嵌入参数序列化的支持,借用了PHP编程里兴起的,而后又被Ruby on Rails推广开来的方式。 举例来说, {foo: ["bar", "baz"]} 会被序列化为 “foo[]=bar&foo[]=baz”.
在jQuery 1.3版里, {foo: ["bar", "baz"]} 曾被序列化为 “foo=bar&foo=baz”. 但是,这样做没用办法将只含有一个元素的阵列编码。如果你需要旧的序列化方式,你可以设置传统Ajax设置来进行切换。(使用jQuery.ajaxSettings.traditional进行全局切换,或者根据情况单独切换。
总共有3种方式可以切换到旧的序列化方式: // 全局改变序列化方式 (使用旧的) jQuery.ajaxSettings.traditional = true; // 指定情况使用旧的序列化方式 jQuery.param( stuff, true ); // 针对一个单独的Ajax请求使用旧的序列化方式 $.ajax({ data: stuff, traditional: true });
更多信息参见: jQuery.param() 文档, jQuery.ajax() 文档, Commit, Code
JSON和脚本类型通过”content-type”自动识别。 (jQuery.ajax 文档, Commit 1, Commit 2)
如果一个Ajax请求的回复的媒体类型是JSON(application/json), dataType默认设为”json”(如果dataType没有被指明)。另外,如果回复的媒体类型是 Javascript(application/javascript), dataType默认设为”script”(同样,如果dataType没有明确指明), 这种情况下,脚本会自动运行。
加入了Etag的支持 (jQuery.ajax() 文档, Commit)
默认设置下, jQuery会忽略Ajax请求的”Last-Modified”页头。这样做是为了忽略浏览器的缓存。设置ifModified:true就可以使 jQuery使用可用的缓存。jQuery1.4还会发出”If-None-Match”的页头如果你设置了ifModified选项。
严格JSON模式,本地的JSON.parse方法 (jQuery.ajax() 文档, Commit 1, Commit 2, Commit 3)
jQuery 1.3和以前的版本曾使用Javascript的eval对引入的JSON解析。1.4版则会使用本地的JSON解析器,前提是如果有本地的解析器可用。它也会对引入的JSON进行校验。所以在jQuery.getJSON方法里,或当一个Ajax请求的dataType是”json”的时候,jQuery会拒绝不合标准的JSON(例如{foo: "bar"})。
序列化HTML5的元素 (jQuery.param() 文档, Commit)
新的HTML5输入方法 (比如’datetime’和’range’)在序列化.serialize()一个表单的时候会被包括在内。
Ajax请求的环境 (jQuery.ajax() 文档, Commit)
你可以附加一个”环境”到Ajax请求上,所有的回调函数里都会拥有同样的”环境”设置(这样可以简化你的代码,尽可能避免使用闭合,或是其他对象)。 jQuery.ajax({ url: "test.html", context: document.body, success: function(){ jQuery(this).addClass("done"); } });
请求成功回调函数的第三个参数会被设为原始的XHR对象 (jQuery.ajax() 文档, Commit)
所有的Ajax请求的成功回调函数现在都会收到原始的XMLHttpRequest对象,作为第三个参数。之前这个XHR对象只能通过$.ajax一类方法的返回值来获取。
明确设置”Content-Type” (jQuery.ajax() 文档, Commit)
在1.3版,如果没有实际数据发送,jQuery.ajax的contentType会被忽略。1.4版里,contentType将总是和请求一同发送。这修复了某些后台凭靠”Content-Type”页头判断回复类别所造成的问题。
明确设置JSONP回调函数的名字 (jQuery.ajax 文档, Commit)
你可以使用jQuery.ajax()方法的jsonpCallback选项,通过名字来指定JSONP的回调函数。
防止启动前跨域XHR (Commit)
跨域Ajax(针对提供支持的浏览器)将更易用,因为默认设置下,启动前XHR被阻止了。(TODO)
jQuery.ajax()现在使用”onreadystatechange”事件替换了计时器 (Commit)
使用”onreadystatechange”替换了轮流探询,Ajax请求现在将使用更少的资源
元素属性 (Attributes)
.CSS()和.attr() 的性能被优化了。
.attr()方法多了一个设置函数作为参数 (.attr() 文档)
你不但可以将一个函数用在.attr()里,还可以在这个函数里使用属性的当前值。 jQuery('<img src="enter.png" alt="enter your name" />') .attr("alt", function(index, value) { return "Please, " + value; });
.val( Function ) (.val() 文档) <input class="food" type='text' data-index="0" /> <input class="food" type='text' data-index="1" />
jQuery("input:text.food").hide();
jQuery("<ul class='sortable'><li>Peanut Butter</li><li>Jelly</li></ul>"
) .sortable() .bind("endsort", function() { $(":text.food").val(function() { return $("ul.sortable li:eq(" + $(this).attr("data-index") + ")").text(); }); });
text和CDATAHTML元素也支持.text()方法了 (.text() 文档, Commit)
出处:帕兰映像
责任编辑:moby
上一页 jQuery 1.4官方文档中文版 [1] 下一页 jQuery 1.4官方文档中文版 [3]
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|