知博网zhiblog.comjQuery教程专题jQuery1.4中文文档按照惯例,我们提供了两份jQuery的拷贝,一份是最小化的(我们现在采用GoogleClosure作为默认的压缩工具了),一份是未压缩的(供纠错或阅读)。•jQuery压缩(23kbGzipped)•jQuery常规(154kb)另外,Google也在他们的服务器上放置了一份jQuery的拷贝。这份拷贝会自动的最小化然后压缩–并且放在Google最快的缓存服务器上。•你可以在你的站点上直接引用上面的URL,这样就可以享受迅速加载jQuery的性能优势了。就jQuery1.4来说,我们努力的减少大规模升级中的麻烦–通过保持所有public函数的签名。即使如此,还请通读可能会造成问题的变更列表,这样能够了解哪些变更可能会给你的应用造成问题。((((功能))))FeaturesFeaturesFeaturesFeatures下面的内容概括了jQuery1.4里加入的变更和功能。另外所有的变更都已经在jQuery1.4的文档里记录了。热门方法经过了性能上的大””””检修””””不少比较热门的和常用的jQuery方法在1.4里被重写了。(译注:重写了方法的内部,外部调用没有大幅度改变)我们分析源码的时候发现我们能够获得大幅的性能提升,通过把jQuery和自己比较:查看内部函数被调用了多少次,然后努力降低源码的复杂度(译注:计算机算法中的Complexity)知博网zhiblog.comjQuery教程专题Viewthecroppedchart.在1.4版里我们显著的降低了大部分热门jQuery方法的的复杂度。更易用的设置函数(Easy(Easy(Easy(EasySetterSetterSetterSetterFunctions)Functions)Functions)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(functionfunctionfunctionfunction(i,html){returnreturnreturnreturnhtml.replace(/&/gi,'&');知博网zhiblog.comjQuery教程专题});//给一些链接的title属性加些信息$('a[target]').attr(title,functionfunctionfunctionfunction(i,title){returnreturnreturnreturntitle+(新窗口打开);});AjaxAjaxAjaxAjax嵌套参数的序列化(jQuery.param()文档,Commit1,Commit2)jQuery1.4在jQuery.param方法里加入了嵌入参数序列化的支持,借用了PHP编程里兴起的,而后又被RubyonRails推广开来的方式。举例来说,{foo:[bar,baz]}会被序列化为“foo[]=bar&foo[]=baz”.在jQuery1.3版里,{foo:[bar,baz]}曾被序列化为“foo=bar&foo=baz”.但是,这样做没用办法将只含有一个元素的阵列编码。如果你需要旧的序列化方式,你可以设置传统Ajax设置来进行切换。(使用jQuery.ajaxSettings.traditional进行全局切换,或者根据情况单独切换。总共有3种方式可以切换到旧的序列化方式://全局改变序列化方式(使用旧的)jQuery.ajaxSettings.traditional=truetruetruetrue;//指定情况使用旧的序列化方式jQuery.param(stuff,truetruetruetrue);//针对一个单独的Ajax请求使用旧的序列化方式$.ajax({data:stuff,traditional:truetruetruetrue});更多信息参见:jQuery.param()文档,jQuery.ajax()文档,Commit,Code知博网zhiblog.comjQuery教程专题JSONJSONJSONJSON和脚本类型通过””””content-typecontent-typecontent-typecontent-type””””自动识别。(jQuery.ajax文档,Commit1,Commit2)如果一个Ajax请求的回复的媒体类型是JSON(application/json),dataType默认设为”json”(如果dataType没有被指明)。另外,如果回复的媒体类型是Javascript(application/javascript),dataType默认设为”script”(同样,如果dataType没有明确指明),这种情况下,脚本会自动运行。加入了EtagEtagEtagEtag的支持(jQuery.ajax()文档,Commit)默认设置下,jQuery会忽略Ajax请求的”Last-Modified”页头。这样做是为了忽略浏览器的缓存。设置ifModified:true就可以使jQuery使用可用的缓存。jQuery1.4还会发出”If-None-Match”的页头如果你设置了ifModified选项。严格JSONJSONJSONJSON模式,本地的JSON.parseJSON.parseJSON.parseJSON.parse方法(jQuery.ajax()文档,Commit1,Commit2,Commit3)jQuery1.3和以前的版本曾使用Javascript的eval对引入的JSON解析。1.4版则会使用本地的JSON解析器,前提是如果有本地的解析器可用。它也会对引入的JSON进行校验。所以在jQuery.getJSON方法里,或当一个Ajax请求的dataType是”json”的时候,jQuery会拒绝不合标准的JSON(例如{foo:bar})。序列化HTML5HTML5HTML5HTML5的元素(jQuery.param()文档,Commit)新的HTML5输入方法(比如’datetime’和’range’)在序列化.serialize()一个表单的时候会被包括在内。AjaxAjaxAjaxAjax请求的环境(jQuery.ajax()文档,Commit)你可以附加一个”环境”到Ajax请求上,所有的回调函数里都会拥有同样的”环境”设置(这样可以简化你的代码,尽可能避免使用闭合,或是其他对象)。jQuery.ajax({url:test.html,context:document.body,success:functionfunctionfunctionfunction(){jQuery(thisthisthisthis).addClass(done);}});知博网zhiblog.comjQuery教程专题请求成功回调函数的第三个参数会被设为原始的XHRXHRXHRXHR对象(jQuery.ajax()文档,Commit)所有的Ajax请求的成功回调函数现在都会收到原始的XMLHttpRequest对象,作为第三个参数。之前这个XHR对象只能通过$.ajax一类方法的返回值来获取。明确设置””””Content-TypeContent-TypeContent-TypeContent-Type””””(jQuery.ajax()文档,Commit)在1.3版,如果没有实际数据发送,jQuery.ajax的contentType会被忽略。1.4版里,contentType将总是和请求一同发送。这修复了某些后台凭靠”Content-Type”页头判断回复类别所造成的问题。明确设置JSONPJSONPJSONPJSONP回调函数的名字(jQuery.ajax文档,Commit)你可以使用jQuery.ajax()方法的jsonpCallback选项,通过名字来指定JSONP的回调函数。防止启动前跨域XHRXHRXHRXHR(Commit)跨域Ajax(针对提供支持的浏览器)将更易用,因为默认设置下,启动前XHR被阻止了。(TODO)jQuery.ajax()jQuery.ajax()jQuery.ajax()jQuery.ajax()现在使用””””onreadystatechangeonreadystatechangeonreadystatechangeonreadystatechange””””事件替换了计时器(Commit)使用”onreadystatechange”替换了轮流探询,Ajax请求现在将使用更少的资源元素属性(Attributes)(Attributes)(Attributes)(Attributes).css()和.attr()的性能被优化了。知博网zhiblog.comjQuery教程专题.attr()方法多了一个设置函数作为参数(.attr()文档)你不但可以将一个函数用在.attr()里,还可以在这个函数里使用属性的当前值。jQuery('imgsrc=enter.pngalt=enteryourname/').attr(alt,functionfunctionfunctionfunction(index,value){returnreturnreturnreturnPlease,+value;});.val(.val(.val(.val(FunctionFunctionFunctionFunction))))(.val()文档)inputinputinputinputclass=foodtype='text'data-index=0/inputinputinputinputclass=foodtype='text'data-index=1/jQuery(input:text.food).hide();jQuery(ulclass='sortable'liPeanutButter/liliJelly/li/ul).sortable().bind(endsort,functionfunctionfunctionfunction(){知博网zhiblog.comjQuery教程专题$(:text.food).val(functionfunctionfunctionfunction(){returnreturnreturnreturn$(ul.sortableli:eq(+$(thisthisthisthis).attr(data-index)+)).text();});});texttexttexttext和CDATAHTMLCDATAHTMLCDATAHTMLCDATAHTML元素也支持.text().text().text().text()方法了(.text()文档,Commit)核心(Core)(Core)(Core)