<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>幼学笔记 &#187; jquery</title>
	<atom:link href="http://www.oncoding.cn/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oncoding.cn</link>
	<description>追寻简单生活</description>
	<lastBuildDate>Sun, 29 May 2011 14:03:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>jQuery1.4下载、性能及新特性详解</title>
		<link>http://www.oncoding.cn/2010/jquery-14-released/</link>
		<comments>http://www.oncoding.cn/2010/jquery-14-released/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 02:02:44 +0000</pubDate>
		<dc:creator>j5726</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.oncoding.cn/?p=608</guid>
		<description><![CDATA[jQuery1.4正式版发布了，官方同步推出了The 14 Days of jQuery 网站，来介绍jQuery1.4的新特性和教程，其中有一篇文章详细介绍了jQuery1.4的新增功能，现转载其中文翻译如下： 原文：jQuery 1.4 Released 翻译：coolnalu jQuery 1.4 发布啦 为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的编程，测试，和记录文档的工作，我们为此感到很骄傲。 我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-Rémi Babe, Ariel Flesler, Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl Swedberg, and Aaron Quint。谢谢他们在修复BUG和完成这次发布上所做的工作。 下载(Downloading) 按照惯例，我们提供了两份jQuery的拷贝，一份是最小化的(我们现在采用Google Closure作为默认的压缩工具了)，一份是未压缩的(供纠错或阅读)。 jQuery压缩 (23kb Gzipped) jQuery常规 (154kb) 另外，Google也在他们的服务器上放置了一份jQuery的拷贝。这份拷贝会自动的最小化然后压缩 – 并且放在Google最快的缓存服务器上。 http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js 你可以在你的站点上直接引用上面的URL，这样就可以享受迅速加载jQuery的性能优势了。 就jQuery1.4来说，我们努力的减少大规模升级中的麻烦 [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery1.4正式版发布了，官方同步推出了<a target="_blank" href="http://jquery14.com/">The 14 Days of jQuery</a> 网站，来介绍jQuery1.4的新特性和教程，其中有一篇文章详细介绍了jQuery1.4的新增功能，现转载其中文翻译如下：</p>
<blockquote>
<p>原文：<a href="http://jquery14.com/day-01/jquery-14" target="_blank">jQuery 1.4 Released</a></p>
<p>翻译：<a href="http://www.uxd2.com/2010/01/%E7%BF%BB%E8%AF%91-jquery1-4%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3/" target="_blank">coolnalu</a></p>
</blockquote>
<h3>jQuery 1.4 发布啦</h3>
<p>为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的编程，测试，和记录文档的工作，我们为此感到很骄傲。</p>
<p>我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-Rémi Babe, Ariel Flesler, Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl Swedberg, and Aaron Quint。谢谢他们在修复BUG和完成这次发布上所做的工作。</p>
<h4>下载(Downloading)</h4>
<p>按照惯例，我们提供了两份jQuery的拷贝，一份是最小化的(我们现在采用<a target="_blank"  href="http://code.google.com/closure/compiler/">Google Closure</a>作为默认的压缩工具了)，一份是未压缩的(供纠错或阅读)。<br />
<span id="more-608"></span></p>
<blockquote>
<p><a target="_blank"  href="http://code.jquery.com/jquery-1.4.min.js">jQuery压缩</a> (23kb <a target="_blank"  href="http://www.julienlecomte.net/blog/2007/08/13/">Gzipped</a>)</p>
<p><a target="_blank"  href="http://code.jquery.com/jquery-1.4.js">jQuery常规</a> (154kb)</p>
</blockquote>
<p>另外，Google也在他们的服务器上<a target="_blank"  href="http://code.google.com/apis/ajaxlibs/documentation/index.html">放置了一份jQuery的拷贝</a>。这份拷贝会自动的最小化然后压缩 – 并且放在Google最快的缓存服务器上。</p>
<blockquote>
<p><a target="_blank"  href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js</a></p>
</blockquote>
<p>你可以在你的站点上直接引用上面的URL，这样就可以享受迅速加载jQuery的性能优势了。</p>
<p>就jQuery1.4来说，我们努力的减少大规模升级中的麻烦 – 通过保持所有public函数的签名。即使如此，还请通读<a target="_blank"  href="http://www.uxd2.com/2010/01/%E7%BF%BB%E8%AF%91-jquery1-4%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3/#backwards">可能会造成问题的变更列表</a>，这样能够了解哪些变更可能会给你的应用造成问题。</p>
<h3>功能(新特性)Features</h3>
<p>下面的内容概括了jQuery1.4里加入的变更和功能。另外所有的变更都已经在<a target="_blank"  href="http://api.jquery.com/category/version/1.4/">jQuery 1.4 的文档</a>里记录了。</p>
<h4>热门方法经过了性能上的大”检修”</h4>
<p>不少比较热门的和常用的jQuery方法在1.4里被重写了。(译注:重写了方法的内部，外部调用没有大幅度改变) 我们分析源码的时候发现我们能够获得大幅的性能提升，通过把jQuery和自己比较: 查看内部函数被调用了多少次，然后努力<a target="_blank"  href="http://ejohn.org/blog/function-call-profiling/">降低源码的复杂度</a>(译注:计算机算法中的Complexity)</p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/01-funccall.jpg"><img title="常用jQuery方法调用频率" src="http://www.uxd2.com/wp-content/uploads/2010/01/01-funccall.jpg" alt="常用jQuery方法调用频率" width="500" height="375" /></a><br />
<small><a target="_blank"  title="# of Function Calls for Popular jQuery Methods by John Resig, on Flickr" href="http://www.flickr.com/photos/jeresig/4271691293/">View the cropped chart.</a></small></p>
<p>在1.4版里我们显著的降低了大部分热门jQuery方法的的复杂度。</p>
<h4>更易用的设置函数 (Easy Setter Functions)</h4>
<p>算来已经有一阵了，你们已经可以给<code><a target="_blank"  href="http://api.jquery.com/attr">.attr()</a></code>传递一个函数，然后这个函数的结果会被用来赋给相应的HTML属性(attribute)上。这个功能现在被移植到所有的设置函数了: <code><a target="_blank"  href="http://api.jquery.com/css">.css()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/attr">.attr()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/val">.val()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/html">.html()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/text">.text()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/append">.append()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/prepend">.prepend()</a></code>,  <code><a target="_blank"  href="http://api.jquery.com/before">.before()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/after">.after()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/replaceWith">.replaceWith()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/wrap">.wrap()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/wrapInner">.wrapInner()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/offset">.offset()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/addClass">.addClass()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/removeClass">.removeClass()</a></code>, 以及 <code><a target="_blank"  href="http://api.jquery.com/toggleClass">.toggleClass()</a></code>.</p>
<p>另外, 对于下面几个方法，当前的值会被作为第2个变量传递给这个函数。<code><a target="_blank"  href="http://api.jquery.com/css">.css()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/attr">.attr()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/val">.val()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/html">.html()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/text">.text()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/append">.append()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/prepend">.prepend()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/offset">.offset()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/addClass">.addClass()</a></code>, <code><a target="_blank"  href="http://api.jquery.com/removeClass">.removeClass()</a></code>, 以及 <code><a target="_blank"  href="http://api.jquery.com/toggleClass">.toggleClass()</a></code>.</p>
<p>这样代码就可以这样写:</p>
<pre class="brush: jscript; title: ; notranslate">
// 找出所有A标签里的'&amp;amp;'字符，然后用一个span标签包围
$('a').html(function(i,html){
  return html.replace(/&amp;amp;/gi,'&amp;amp;');
});

// 给一些链接的title属性加些信息
$('a[target]').attr(&quot;title&quot;, function(i,title){
  return title + &quot; (新窗口打开)&quot;;
});
</pre>
<h4>Ajax</h4>
<p><strong>嵌套参数的序列化</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.param/">jQuery.param() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/50d78e7658382d2a2f5149cae7a6572f78ce403f">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/67089eedf6f84acd9c16ea2a6dadadf7b13a7c84">Commit 2</a>)</p>
<p>jQuery 1.4在jQuery.param方法里加入了嵌入参数序列化的支持，借用了PHP编程里兴起的，而后又被Ruby on Rails推广开来的方式。<br />
举例来说，<br />
<code>{foo: ["bar", "baz"]}</code> 会被序列化为 “foo[]=bar&amp;foo[]=baz”.</p>
<p>在jQuery 1.3版里, <code>{foo: ["bar", "baz"]}</code> 曾被序列化为 “foo=bar&amp;foo=baz”. 但是，这样做没用办法将只含有一个元素的阵列编码。如果你需要旧的序列化方式，你可以设置传统Ajax设置来进行切换。(使用<code>jQuery.ajaxSettings.traditional</code>进行全局切换，或者根据情况单独切换。</p>
<p>总共有3种方式可以切换到旧的序列化方式:</p>
<pre class="brush: jscript; title: ; notranslate">// 全局改变序列化方式 (使用旧的)
jQuery.ajaxSettings.traditional = true;

// 指定情况使用旧的序列化方式
jQuery.param( stuff, true );

// 针对一个单独的Ajax请求使用旧的序列化方式
$.ajax({ data: stuff, traditional: true });</pre>
<p>更多信息参见: <a target="_blank"  href="http://api.jquery.com/jQuery.param/">jQuery.param() 文档</a>, <a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/39518945047413f1185682078043e70e0c5c9091">Commit</a>, <a target="_blank"  href="http://github.com/jquery/jquery/blob/master/src/ajax.js#L175">Code</a></p>
<p><strong>JSON和脚本类型通过”content-type”自动识别。</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/787f271052220c20787104f0eba6441aedac22ff">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/6861b5d4eb16222ed5ea623af6ce75362b55d1d4">Commit 2</a>)</p>
<p>如果一个Ajax请求的回复的媒体类型是JSON(application/json), dataType默认设为”json”(如果dataType没有被指明)。另外，如果回复的媒体类型是 Javascript(application/javascript), dataType默认设为”script”(同样，如果dataType没有明确指明), 这种情况下，脚本会自动运行。</p>
<p><strong>加入了Etag的支持</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/28ab4d32247943e1ae3409b23fe69303df0bc9eb">Commit</a>)</p>
<p>默认设置下, jQuery会忽略Ajax请求的”Last-Modified”页头。这样做是为了忽略浏览器的缓存。设置ifModified:true就可以使 jQuery使用可用的缓存。jQuery1.4还会发出”If-None-Match”的页头如果你设置了ifModified选项。</p>
<p><strong>严格JSON模式，本地的JSON.parse方法</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/90a87c03b4943d75c24bc5e6246630231d12d933">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/308d6cdad023da190ace2a698ee4815ed8dad9c5">Commit 2</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/44e6beb10304789044de2c5a58f5bb82e8321636">Commit 3</a>)</p>
<p>jQuery 1.3和以前的版本曾使用Javascript的<code>eval</code>对引入的JSON解析。1.4版则会使用本地的JSON解析器，前提是如果有本地的解析器可用。它也会对引入的JSON进行校验。所以在<a target="_blank"  href="http://api.jquery.com/jQuery.getJSON">jQuery.getJSON</a>方法里，或当一个Ajax请求的dataType是”json”的时候，jQuery会拒绝不合标准的JSON(例如<code>{foo: "bar"}</code>)。</p>
<p><strong>序列化HTML5的元素</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.param/">jQuery.param() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/b31b9bd756a1489c3b1b856ed8b624c55da9e02f">Commit</a>)</p>
<p>新的<a target="_blank"  href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#attr-input-type-keywords">HTML5输入方法</a> (比如’datetime’和’range’)在序列化<code><a target="_blank"  href="http://api.jquery.com/serialize">.serialize()</a></code>一个表单的时候会被包括在内。</p>
<p><strong>Ajax请求的环境</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/183f37e4b4128af7ba096ac40046768b84b6d66e">Commit</a>)</p>
<p>你可以附加一个”环境”到Ajax请求上，所有的回调函数里都会拥有同样的”环境”设置(这样可以简化你的代码，尽可能避免使用闭合,或是其他对象)。</p>
<pre class="brush: jscript; title: ; notranslate">jQuery.ajax({
    url: &quot;test.html&quot;,
    context: document.body,
    success: function(){
        jQuery(this).addClass(&quot;done&quot;);
    }
});</pre>
<p><strong>请求成功回调函数的第三个参数会被设为原始的XHR对象</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/c2101245c07afdb831b0c79869c7263420407b67">Commit</a>)</p>
<p>所有的Ajax请求的成功回调函数现在都会收到原始的XMLHttpRequest对象，作为第三个参数。之前这个XHR对象只能通过<code>$.ajax</code>一类方法的返回值来获取。</p>
<p><strong>明确设置”Content-Type”</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/25b0ba9f9612583033b902a0e40345463a3a71d0">Commit</a>)</p>
<p>在1.3版，如果没有实际数据发送，<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax</a>的contentType会被忽略。1.4版里，contentType将总是和请求一同发送。这修复了某些后台凭靠”Content-Type”页头判断回复类别所造成的问题。</p>
<p><strong>明确设置JSONP回调函数的名字</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax 文档</a>,  <a target="_blank"  href="http://github.com/jquery/jquery/commit/fbc73d45b487dd863886c7fd3f0af1fd4dec261b">Commit</a>)</p>
<p>你可以使用<a target="_blank"  href="http://api.jquery.com/jQuery.ajax/">jQuery.ajax()</a>方法的jsonpCallback选项，通过名字来指定JSONP的回调函数。</p>
<p><strong>防止启动前跨域XHR</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/a7678267d848fcef8775c8b9f4fa3e507b8cc5f4">Commit</a>)</p>
<p>跨域Ajax(针对提供支持的浏览器)将更易用，因为默认设置下，启动前XHR被阻止了。(TODO)</p>
<p><strong>jQuery.ajax()现在使用”onreadystatechange”事件替换了计时器</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/fe6c86d53046b0f4d648f61c0b8e75387af65152">Commit</a>)</p>
<p>使用”onreadystatechange”替换了轮流探询，Ajax请求现在将使用更少的资源</p>
<h4>元素属性 (Attributes)</h4>
<p><strong><code>.css()</code>和<code>.attr()</code> 的性能被优化了。</strong></p>
<p>&lt;<a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/02-perform-cssatrr.jpg"><img title=".css().attr()的性能提高" src="http://www.uxd2.com/wp-content/uploads/2010/01/02-perform-cssatrr.jpg" alt=".css().attr()的性能提高" width="500" height="375" /></a></p>
<p><strong><code>.attr()</code>方法多了一个设置函数作为参数</strong> (<a target="_blank"  href="http://api.jquery.com/attr/">.attr() 文档</a>)</p>
<p>你不但可以将一个函数用在<code>.attr()</code>里，还可以在这个函数里使用属性的当前值。</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery('&lt;img src=&quot;enter.png&quot; alt=&quot;enter your name&quot; /&gt;')
.attr(&quot;alt&quot;, function(index, value) {
    return &quot;Please, &quot; + value;
});
</pre>
<p><strong>.val( Function )</strong> (<a target="_blank"  href="http://api.jquery.com/val/">.val() 文档</a>)</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;input class=&quot;food&quot; type='text' data-index=&quot;0&quot; /&gt;
&lt;input class=&quot;food&quot; type='text' data-index=&quot;1&quot; /&gt;

jQuery(&quot;input:text.food&quot;).hide();

jQuery(&quot;&lt;ul class='sortable'&gt;&lt;li&gt;Peanut Butter&lt;/li&gt;&lt;li&gt;Jelly&lt;/li&gt;&lt;/ul&gt;&quot;

)
  .sortable()
  .bind(&quot;endsort&quot;, function() {
    $(&quot;:text.food&quot;).val(function() {
      return $(&quot;ul.sortable li:eq(&quot; + $(this).attr(&quot;data-index&quot;)  + &quot;)&quot;).text();
    });
  });
</pre>
<p><strong>text和CDATAHTML元素也支持.text()方法了</strong> (<a target="_blank"  href="http://api.jquery.com/text/">.text() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/b30af34f28074b491929445f5aad3d62c63e772f">Commit</a>)</p>
<h4>核心 (Core)</h4>
<p><strong>快捷元素创建</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery/#jQuery2">jQuery() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/d40083c866738727aa7ffd7f13d2955bc9575d5e">Commit</a>)</p>
<p>现在当你需要使用jQuery函数创建一个元素的时候，你可以同时附递一个对象来指定属性值和事件:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;&quot;, {
    id: &quot;foo&quot;,
    css: { height: &quot;50px&quot;, width: &quot;50px&quot;, color: &quot;blue&quot;, backgroundColor: &quot;#ccc&quot; },
    click: function() {
            $(this).css(&quot;backgroundColor&quot;, &quot;red&quot;);
    }
}).appendTo(&quot;body&quot;);
</pre>
<p>对象里的键值的名字与相关的jQuery的方法的名字是对应的，对象的值会被作为参数传递给jQuery的方法。</p>
<p>(译注:譬如<code>$("&lt;a&gt;link&lt;/a&gt;", {css:{background:"#ccc"}});</code>相当于<code>$("&lt;a&gt;link&lt;/a&gt;")).css("background", "#ccc");</code></p>
<p><strong>.eq(-N), .get(-N) (负指数)</strong> (<a target="_blank"  href="http://api.jquery.com/eq/">.eq() 文档</a>, <a target="_blank"  href="http://api.jquery.com/get/">.get() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/e532dfe5228217f55a33122a4438fd70522dbb4b">Commit</a>)</p>
<p>你现在可以在<code>.get()</code>和<code>.eq()</code>方法里使用负数。譬如，你要选择倒数第2个div元素，或者是倒数第2个DOM对象:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;div&quot;).eq(-2);
$(&quot;div&quot;).get(-2);
</pre>
<p><strong>新的.first()和.last()方法</strong> (<a target="_blank"  href="http://api.jquery.com/first/">.first() 文档</a>, <a target="_blank"  href="http://api.jquery.com/last/">.last() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/9de120e6d7cfffa3d990a6ccf23db3cd74e2bdc0">Commit</a>)</p>
<p>方便起见, 新增的<code>.first()</code>和<code>.last()</code>方法等同于<a target="_blank"  href="http://api.jquery.com/eq/">.eq(0)</a>和<a target="_blank"  href="http://api.jquery.com/eq/">.eq(-1)</a>.</p>
<p><strong>新的.toArray()方法</strong> (<a target="_blank"  href="http://api.jquery.com/toArray/">.toArray() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/e124fec5e9cfee77cb23b27c0d43dc2631c83aab">Commit</a>)</p>
<p><a target="_blank"  href="http://api.jquery.com/get">.get()</a>方法自始就是从jQuery集合里返回一个阵列。为了能够更明确, 你可以用<a target="_blank"  href="http://api.jquery.com/toArray/">.toArray()</a>来达到一样的效果。(译注:这里应该是为了以后的版本留出空间，譬如以后可能会加入.toList()方法，到时候就会易于区分。) 不过，和<code>.get()</code>不一样的是，<code>.toArray()</code>不接受参数。</p>
<p><strong>jQuery()返回一个空集</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery/">jQuery() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/04524287d3e0112deae570ff9247c734833431bb">Commit</a>)</p>
<p>在jQuery 1.3中,<a target="_blank"  href="http://api.jquery.com/jQuery/">jQuery()</a>方法返回仅包括<code>document</code>的jQuery集合。这个可以用来创建一个空集，然后动态加入一些元素。注: <code>jQuery().ready()</code>方式在1.4中依然有效，但是被指示陈旧了。请使用<code>jQuery(document).ready()</code>或者<code>jQuery(function(){})</code>。</p>
<p><strong>jQuery(“TAG”)</strong> (<a target="_blank"  href="http://api.jquery.com/element-selector/">Element Selector 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/4ea4fad0902839c06c281b5de7b0aca29922b63d">Commit</a>)</p>
<p>当使用单个标签名字的时候jQuery会使用更快捷的路径。</p>
<p><strong>jQuery(“&lt;div&gt;”), jQuery(“&lt;div/&gt;”) 和 jQuery(“&lt;div&gt;&lt;/div&gt;”)</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery/#jQuery2">jQuery() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/c4c820efff4fa7bcce0d5bf0a448625278ea6379">Commit</a>)</p>
<p>现在这三个方法都使用同一个代码路径了(document.createElement), 来优化<code>jQuery("&lt;div&gt;&lt;/div&gt;")</code>的性能。注意，如果你指定了属性，将会使用浏览器本身的语法分析(通过设置innerHTML)。</p>
<h4>样式 (CSS)</h4>
<p><strong>.css()方法在性能是以前的2倍。</strong></p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/03-perform-css.jpg"><img title=".css()的性能提高 " src="http://www.uxd2.com/wp-content/uploads/2010/01/03-perform-css.jpg" alt=".css()的性能提高 " width="500" height="375" /></a></p>
<p><strong><code>.addClass()</code>, <code>.removeClass()</code>, 和 <code>.hasClass()</code>这几个方法在性能上是以前的3倍</strong></p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/04-perform-addClass.jpg"><img title="addClass, removeClass, 和 hasClass的性能提高" src="http://www.uxd2.com/wp-content/uploads/2010/01/04-perform-addClass.jpg" alt="addClass, removeClass, 和 hasClass的性能提高" width="500" height="375" /></a></p>
<p><strong>.toggleClass()可以切换多个css类了</strong> (<a target="_blank"  href="http://api.jquery.com/toggleClass/">.toggleClass() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/5e6e53835e552920db4f88ac0c9eca71aaacbef0">Commit</a>)</p>
<p>你可以通过<a target="_blank"  href="http://api.jquery.com/toggleClass/">.toggleClass()</a>调用多个css类的名字来切换他们。</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;div&quot;).toggleClass(&quot;current active&quot;);
</pre>
<h4>数据</h4>
<p><strong>.data()返回对象, .data(Object)设置对象</strong> (<a target="_blank"  href="http://api.jquery.com/data/">.data() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/d36d224cc52e70d837306d33a03f517ef72abc60">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8">Commit 2</a>)</p>
<p>有时候你可能需要在一个元素上附加一个复杂的对象。一个常见的例子是你需要从一个元素身上复制所有的数据到令一个元素上。在jQuery 1.4里, 不使用任何参数调用<a target="_blank"  href="http://api.jquery.com/data/">.data()</a>时，.data会返回一个复杂对象。(译注: 包含所有键-值对的对象。) 调用<a target="_blank"  href="http://api.jquery.com/data/">.data(Object)</a> 则会设置这个对象。注意这个对象还包括了元素上绑定的事件，所以用的时候要小心。</p>
<p><strong>除非需要, 不然不会创建数据缓存。</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/c4f144eeffd94c745839b0ced2de9c62cfa9f075">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/97e134fe80a734b97170bf43c9459511f4e165c7">Commit 2</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/67d445a703491c90a7d3c46be34bcdceb4d1c896">Commit 3</a>)</p>
<p>jQuery使用一个独特的自定义属性来获取特定元素上附加的数据。当查找数据，但是没有新加的数据的时候，jQuery会尽量避免创建这个自定义属性。这样可能会提高性能，同时还会在这种情况下避免污染DOM。</p>
<h4>效果 (Effects)</h4>
<p><strong>单个属性缓进缓出</strong> (<a target="_blank"  href="http://api.jquery.com/animate/#per-property-easing">Per-property Easing 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/93fdbeb963a9c350f807818c7cc99982942a92f3">Commit</a>)</p>
<p>除了能够给一个动态效果指定缓进出函数外，你现在可以指定每个属性的缓进出函数了。James Padolsey的<a target="_blank"  href="http://james.padolsey.com/javascript/easing-in-jquery-1-4a2/">blog上</a>有更进一步的信息和演示。</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#clickme&quot;).click(function() {
  $(&quot;div&quot;).animate({
    width: [&quot;+=200px&quot;, &quot;swing&quot;],
    height: [&quot;+=50px&quot;, &quot;linear&quot;],
  }, 2000, function() {
      $(this).after(&quot;&amp;lt;div&amp;gt;Animation complete.&amp;lt;/div&amp;gt;&quot;);
  });
});
</pre>
<h4>事件 (Events)</h4>
<p><strong>新方法: jQuery.proxy()</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.proxy/">jQuery.proxy() Documenation</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/66975de2d249643779e2b3daad0457f7f5f92508">Commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/1d2b1a57dae0b73b3d99197f73f4edb623b5574a">Commit 2</a>)</p>
<p>如果你需要保证一个函数内的”this”恒定地保持某个值, 你可以用<code>jQuery.proxy</code>获得一个相同作用域的函数。</p>
<pre class="brush: jscript; title: ; notranslate">
var obj = {
  name: &quot;John&quot;,
  test: function() {
    alert( this.name );
    $(&quot;#test&quot;).unbind(&quot;click&quot;, obj.test);
  }
};

$(&quot;#test&quot;).click( jQuery.proxy( obj, &quot;test&quot; ) );
</pre>
<p><strong>多个事件绑定</strong> (<a target="_blank"  href="http://api.jquery.com/bind">.bind() 文档</a>)</p>
<p>你可以通过递入一个对象来一次性绑定元素的多个事件。</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;div.test&quot;).bind({
  click: function(){
    $(this).addClass(&quot;active&quot;);
  },
  mouseenter: function(){
    $(this).addClass(&quot;inside&quot;);
  },
  mouseleave: function(){
    $(this).removeClass(&quot;inside&quot;);
  }
});
</pre>
<p><strong>‘change’和’submit’事件规范化</strong> (<a target="_blank"  href="http://api.jquery.com/change">Change 文档</a>, <a target="_blank"  href="http://api.jquery.com/submit">Submit 文档</a>)</p>
<p>普通的或是即时的<code>change</code>和<code>submit</code>事件可以在各种浏览器上稳定工作了。我们覆盖了IE里的<code>change</code>和<code>submit</code>, 替换为与其他浏览器相同的事件。</p>
<p><strong>新的事件: ‘focusin’ and ‘focusout’</strong> (<a target="_blank"  href="http://api.jquery.com/focusin/">.focusin() 文档</a>, <a target="_blank"  href="http://api.jquery.com/focusout/">.focusout() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/03481a52c72e417b01cfeb499f26738cf5ed5839">Commit</a>)</p>
<p><code>focusin</code>和<code>focusout</code>在一般情况下等同于<code>focus</code>和<code>blur</code>, 但是多了向父元素传递的作用。如果你自己编写你的事件代理模式(TODO), 这个功能将对你有很大帮助。请注意对<code>focus</code>和<code>blur</code>使用<code>live()</code>方法将不会起作用; 在设计的时候我们根据 <a target="_blank"  href="http://www.w3.org/TR/DOM-Level-2-Events/events.html">DOM事件规范</a>决定不使其向父元素传递事件。</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;form&quot;).focusout(function(event) {
    var tgt = event.target;
    if (tgt.nodeName == &quot;INPUT&quot; &amp;amp;&amp;amp; !tgt.value) {
        $(tgt).after(&quot;nothing here&quot;);
    }
});
</pre>
<p><strong>所有的事件都可以成为即时事件</strong> (<a target="_blank"  href="http://api.jquery.com/live">.live() 文档</a>)</p>
<p>除了<a target="_blank"  href="http://api.jquery.com/ready">ready</a>, <a target="_blank"  href="http://api.jquery.com/focus">focus</a> (用focusin), 和 <a target="_blank"  href="http://api.jquery.com/blur">blur</a> (用focusout)以外, 所有能用<code>.bind()</code>绑定的事件都可以成为即时事件。</p>
<p>在<code>live()</code>所支持的事件里，我们对能够支持下面这几个额外的事件感到尤其骄傲。通过<code>.live()</code>里的事件代理, 1.4版实现了对<code>change</code>, <code>submit</code>, <code>focusin</code>, <code>focusout</code>, <code>mouseenter</code>, 以及<code>mouseleave</code>事件的跨浏览器支持。</p>
<p>注: 如果你需要即时的<code>focus</code>事件，你应该用<code>focusin</code>和<code>focusout</code>, 而不要用<code>focus</code>和<code>blur</code>, 因为就像前面提到的, <code>focus</code>和<code>blur</code>不向上传递。</p>
<p>还有, <code>live()</code>也接受数据对象作为参数了, 同<code>bind()</code>方法一样 (<a target="_blank"  href="http://github.com/jquery/jquery/commit/71efbdd3b26f3a283f8d4bfdcc7b6343142027b9">Commit</a>)</p>
<p><strong>live/die也支持环境变量了</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/30e760b63fd6d82f30833cd2864f245dd9594cd9">Commit</a>)</p>
<p>现在可以在绑定事件的时候给选择符指定一个环境。如果环境被指定了, 只有属于这个环境下的元素才会被绑定事件。在创建即时事件的时候, 元素本身不需要已经被定义, 但是环境必须被创建。</p>
<p><strong>确定ready事件至少含有<code>body</code>元素</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/262fcf7b7b919da1564509f621cf7480a5d5572b">Commit</a>)</p>
<p>jQuery现在会检查<code>body</code>是不是存在，如果不存在，会对<code>body</code>进行轮流探询。</p>
<p><strong>在不需要手动处理内存溢出的非IE浏览器中, 卸载的速度提高了。</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/f3474c00cd6d9e5fd61b6ef1562003e9986ad67d">Commit</a>)</p>
<h4>DOM操作 (Manipulation)</h4>
<p>在jQuery 1.4里一系列的DOM操作方法的性能都有巨大的提升。</p>
<p><strong><a target="_blank"  href="http://api.jquery.com/append">.append()</a>, <a target="_blank"  href="http://api.jquery.com/prepend">.prepend()</a>, <a target="_blank"  href="http://api.jquery.com/before">.before()</a>, and <a target="_blank"  href="http://api.jquery.com/after">.after()</a>的性能提高了。</strong></p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/05-perform-dom.jpg"><img title="DOM嵌入的性能提高" src="http://www.uxd2.com/wp-content/uploads/2010/01/05-perform-dom.jpg" alt="DOM嵌入的性能提高" width="500" height="375" /></a></p>
<p><strong><a target="_blank"  href="http://api.jquery.com/html">.html()</a>的性能提高到以前的3倍。</strong></p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/06-perform-html.jpg"><img title=".html()的性能提高" src="http://www.uxd2.com/wp-content/uploads/2010/01/06-perform-html.jpg" alt=".html()的性能提高" width="500" height="375" /></a></p>
<p><strong>.remove()和.empty()的速度则达到以前的4倍.</strong></p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/07-perform-remove.jpg"><img title=".remove() 和 .empty()的性能提高" src="http://www.uxd2.com/wp-content/uploads/2010/01/07-perform-remove.jpg" alt=".remove() 和 .empty()的性能提高" width="500" height="375" /></a></p>
<p><strong>新方法: .detach()</strong> (<a target="_blank"  href="http://api.jquery.com/detach/">.detach() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/7a67f8897d3c2ed97254f0fdb969be14e77962d1">Commit</a>)</p>
<p><code>detach()</code>将一个元素从DOM里移除, 但是并不卸载关联的事件处理函数。这个方法可用于暂时性的将一个元素移除，执行相关操作，然后返回。</p>
<pre class="brush: jscript; title: ; notranslate">
var foo = $(&quot;#foo&quot;).click(function() {
    // 相关操作
});
foo.detach();
// foo保留了相关处理函数
foo.appendTo(&quot;body&quot;);
</pre>
<p><strong>新的unwrap()方法</strong> (<a target="_blank"  href="http://api.jquery.com/unwrap/">documentation</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/69e6e53555f21f07b534f1169298f7b33011bb4b">commit</a>)</p>
<p><code>unwrap()</code>方法拿到一个已知的父元素的子元素，然后将父元素用子元素替换。(译注: 将子元素从”包裹”里拿出来, 因名unwrap)。如此这般:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
    &lt;div&gt;
        &lt;p&gt;annie&lt;/p&gt; &lt;p&gt;davey&lt;/p&gt; &lt;p&gt;stevie&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;

$('div').unwrap();

&lt;body&gt;
   &lt;p&gt;annie&lt;/p&gt; &lt;p&gt;davey&lt;/p&gt; &lt;p&gt;stevie&lt;/p&gt;
&lt;/body&gt;
</pre>
<p><strong>domManip方法里的缓存</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/8db967e9d52407c8e76d81b9d472800667f6fa29">commit</a>)</p>
<p>jQuery会将<code>jQuery("&lt;div&gt;")</code>和<code>.after("&lt;div&gt;")</code>一类方法创建的节点记入缓存。这样, 对于利用这些方法, 使用字符串进行DOM操作的页面，性能将有极大的提高。</p>
<p><strong>无连接的节点间的before, after, replaceWith操作</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/173c1477ae6efc4c2eeb7131ba0646c4e1323975">commit</a>)</p>
<p>现在你可以对还没有放置到DOM Tree上的节点进行<code>before</code>, <code>after</code>, 和<code>replaceWith</code>的操作了。意味着你可以先对节点进行复杂的操作, 待完成后再放到合适的DOM位置上。这样也能尽量避免操作过程中造成重新排版。</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;&lt;div&gt;&quot;).before(&quot;&lt;p&gt;Hello&lt;/p&gt;&quot;).appendTo(&quot;body&quot;)
</pre>
<p><strong><code>.clone(true)</code> 也会复制关联数据</strong> (<a target="_blank"  href="http://api.jquery.com/clone/">clone 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/4b70f006f579fba24a882d80ca67f1971dbb4922">commit</a>)</p>
<p>1.3版中, <code>.clone(true)</code>虽然也是深度复制, 但是没有复制关联的数据。1.4版里，它则会复制数据, 同时还包括所有的事件。这点上和<code>jQuery.extend</code>在语义想同的, 所以普通对象和阵列会被复制, 但是自定义的对象则不会。</p>
<h4>位移 (Offset)</h4>
<p><strong>.offset( coords | Function )</strong> (<a target="_blank"  href="http://api.jquery.com/offset/">.offset() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/daffb954e397bd5d9f8e9aaedab6c0baa9609e1e">commit</a>)</p>
<p>现在可以设置元素的位移了! 和所有的设置函数一样, <code>offset</code>也可以接受一个函数作为第二个参数。</p>
<h4>队列 (Queueing)</h4>
<p>队列经历了一次大修, 使用队列会比使用默认的<code>fx</code>更易掌握。</p>
<p><strong>新的 .delay() 方法</strong> (<a target="_blank"  href="http://api.jquery.com/delay/">.delay() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/bbd933cbfe6d31a749cb336d7a84155ccfab247f">commit</a>)</p>
<p><code>.delay()</code>方法会根据参数滞后若干毫秒执行队列里剩下的对象。默认的它会使用”fx”队列。但你可以选择性的通过<code>delay</code>方法的第二个参数选择其他队列。(译注:每个队列都以一个名字识别。)</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;div&quot;).fadeIn().delay(4000).fadeOut();
</pre>
<p><strong>队列里的<code>next</code></strong> (<a target="_blank"  href="http://api.jquery.com/queue/">.queue() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/89b4bc53ca0ca3d4e5c80b94ce92b09cc34af8ef">commit</a>)</p>
<p>jQuery 1.4版里, 当队列里的一个函数被调用的时候，第一个参数会被设为另一个函数。当后者被调用的时候, 会自动排除队列里的下一个对象, 以此来推动队列到下一步。</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;div&quot;).queue(&quot;ajax&quot;, function(next) {
  var self = this;
  jQuery.getJSON(&quot;/update&quot;, function(json) {
    $(self).html(json.text);
    next();
  };
}).queue(&quot;ajax&quot;, function() {
  $(this).fadeIn();
});</pre>
<p><strong>.clearQueue()</strong> (<a target="_blank"  href="http://api.jquery.com/clearQueue/">clearQueue 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/d857315967a1cc07b73924bbdf2eb12f4f910c45">commit</a>)</p>
<p>队列可以被清空了。这个方法会移除队列里所有未执行的函数, 但不会移除正在运行的函数。无参数的情况下调用<code>.clearQueue()</code>方法将会清空默认的”fx”队列。</p>
<h4>选择符 (Selectors)</h4>
<p><strong>“#id p”效率更高</strong> (<a target="_blank"  href="http://github.com/jeresig/sizzle/commit/c5c18ae5f17f11b39b7f261633e4bfc5ef3e99d7">commit</a>)</p>
<p>所有以ID开头的选择符都得到了优化, 能够在瞬间得到返回值。所有以ID为开头的选择符速度将一直快于其他选择符。</p>
<h4>页面遍访 (Traversing)</h4>
<p><strong>.index(), .index(String)</strong> (<a target="_blank"  href="http://api.jquery.com/index/">index 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/ffd457d4561eb1a6653aaef90f92a3b3010b9139">commit</a>)</p>
<p><code>.index()</code> 方法经过重写, 变得更加直观和灵活。</p>
<p>你可以获得一个元素相对于同父元素的指数:</p>
<pre class="brush: jscript; title: ; notranslate">
// 计算第一个 &amp;lt;li&amp;gt; 元素在它所有的同父元素中的指数:
$(&quot;li.current&quot;).index()
</pre>
<p>你也可以获得一个元素在一个jQuery元素集合中的指数, 这个集合可以用一个选择符或者是一个DOM元素来指定:</p>
<pre class="brush: jscript; title: ; notranslate">// 计算这个 &amp;lt;h3 id=&quot;more-info&quot;&amp;gt; 元素在页面上所有 &amp;lt;h3&amp;gt; 元素里的指数:
$(&quot;#more-info&quot;).index(&quot;h3&quot;)
</pre>
<p><strong>新的.has()方法</strong> (<a target="_blank"  href="http://api.jquery.com/has/">has 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/4e27f17007c2329e31b449e61bb31197b90a37f1">commit</a>)</p>
<p>这个方法相当于选择符里的<code>:has()</code>过滤法。它拿到一个jQuery集合,返回含有指定选择符的元素。</p>
<p><strong>新的 .nextUntil(), .prevUntil(), .parentsUntil() 方法</strong> (<a target="_blank"  href="http://api.jquery.com/nextUntil/">.nextUntil() 文档</a>, <a target="_blank"  href="http://api.jquery.com/prevUntil/">.prevUntil() 文档</a>, <a target="_blank"  href="http://api.jquery.com/parentsUntil/">.parentsUntil() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/2b481b93cfca62f95aa7005e7db651456fa08e65">commit</a>)</p>
<p>新的”until”方法类似于<code>.nextAll()</code>, <code>.prevAll()</code>, 和<code>.parents()</code>。区别是可以用一个选择符来停止元素探索。</p>
<p><strong>.add(String, Element)</strong> (<a target="_blank"  href="http://jquery14.com/day-01/%3C/p%3E%3Cp%3Ehttp://api.jquery.com/add/%3C/p%3E%3Cp%3E">.add() 文档</a>, <a target="_blank"  href="http://jquery14.com/day-01/%3C/p%3E%3Cp%3Ehttp://github.com/jquery/jquery/commit/b0fe380cf89564305646bbd55d1fd7bd210fd591%3C/p%3E%3Cp%3E">commit</a>)</p>
<p>可以给<code>.add()</code>方法指定环境了。这个功能可以用于在一个调用链中加入和操作额外元素(比如Ajax请求里返回的新元素)。</p>
<p><strong>.closest(filter, DOMElement)</strong> (<a target="_blank"  href="http://api.jquery.com/closest/">.closest() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/d6991fa273515a8503692324499edcc71b5c3f64">commit</a>)</p>
<p>可以通过<code>closest</code>方法的第2个参数设置一个<code>DOMElement</code>环境。给<code>closest</code>设置一个环境一般能够提高这个方法的运行速度。这个优化也适用<code>live()</code>, 因为这个方法内部调用了<code>closest()</code>。</p>
<h4>常用工具 (Utilities)</h4>
<p><strong>jQuery.isEmptyObject()</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.isEmptyObject/">jQuery.isEmptyObject() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/a38a5cd531a328319f8b7f3f33a84044b54591ce">commit</a>)</p>
<p>如果对象,em&gt;没有任何属性, 该方法将返回<code>true</code>。<code>jQuery.isEmptyObject()</code>方法不对参数进行任何检查, 所以请保证参数是一个对象。</p>
<p><strong>jQuery.isPlainObject()</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.isPlainObject/">jQuery.isPlainObject()</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/4b55e94d0849568a2fd121952f13a9d6571c731f">commit</a> )</p>
<p>如果一个对象是通过字符创建的(译注:{}),<code>jQuery.isPlainObject()</code>返回<code>true</code>; 如果对象是其他类别的对象(译注:如new Object())或者是基本类型, 则返回<code>false</code>。</p>
<p><strong>jQuery.contains()</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.contains/">jQuery.contains() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/4e27f17007c2329e31b449e61bb31197b90a37f1">commit</a>)</p>
<p>如果两个参数都是DOM节点，并且第二个节点是嵌套在第一个节点内部的话, <code>jQuery.contains()</code>返回<code>true</code>。反之返回<code>false</code>。</p>
<p><strong>jQuery.noop</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.noop/">jQuery.noop() 文档</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/6cb2945837ccca55204191a8e7a70b2b2486c28e">commit</a>)</p>
<p>是个空的函数, 可以用在必须要有一个函数的情况下。(译注: noop是No Operation的意思。)</p>
<p><strong>jQuery.unique()</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.unique/">jQuery.unique() 文档</a>)</p>
<p>jQuery 1.4版中, <code>jQuery.unique()</code>方法返回结果里的元素是按照他们在页面里的顺序排序的。由于在创建jQuery集合的时候jQuery使用<code>jQuery.unique()</code>方法, 所以jQuery方法返回的集合也是按照他们在页面里的顺序排列的。</p>
<h4>其他 (Miscellaneous)</h4>
<p><strong>jQuery.browser以浏览器引擎为中心</strong> (<a target="_blank"  href="http://api.jquery.com/jQuery.browser/">jQuery.browser 文档</a>, <a target="_blank"  href="http://jquery14.com/day-01/%3Cbr%20/%3Ehttp://github.com/jquery/jquery/commit/ffb1867a4364ea65e60dad3469e8c8eb420ebcac">commit</a>)</p>
<p>例如, 你可以通过<code>jQuery.browser.webkit</code>探测引擎是否是Webkit。</p>
<p><strong>改进了对<code>applets</code>的处理</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/59802928566b6be3a66d65e77c2418fff37e6f5f">commit 1</a>, <a target="_blank"  href="http://github.com/jquery/jquery/commit/3ec2f1aef6b137d0f639e2fc53f95352d24b9d90">commit 2</a>)</p>
<p>jQuery不再试图在Java applets上绑定事件或是数据了(绑定事件或是数据会出现错误)。</p>
<p><strong>不再使用arguments.callee</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/985856b823b1648bffc3fd63c1faf836d0ddaf7c">commit</a>)</p>
<p>为了顺应<a target="_blank"  href="http://code.google.com/p/google-caja/">Caja</a>的要求, 同时也因为即将开始应用的ECMAScript 5规范里将其标记为陈旧, 我们将jQuery核心中所有用到<code>arguments.callee</code>的代码都移除了。</p>
<p><strong>用Closure Compiler替换了YUI Min</strong> (<a target="_blank"  href="http://github.com/jquery/jquery/commit/3fd62eae9df3159fc238a515bb748140a942313d">commit</a>)</p>
<h4>内部重组 (Internal Reorganization)</h4>
<p>在1.4版的开发过程中的一个重点是要建立一个更易读, 更易懂的代码库。为了达到这个目标我们树立了一系列编写代码规范的向导。</p>
<p>下面是一些主要的变化:</p>
<blockquote>
<p>旧的’core.js’文件被分成了’attribute.js’, ‘css.js’, ‘data.js’, ‘manipulation.js’, ‘traversing.js’, and ‘queue.js’.</p>
<p>ready事件被移入了’core.js’ (因为它是jQuery的一个基本组成之一)。</p>
<p>大部分核心代码都符合新的<a target="_blank"  href="http://docs.jquery.com/JQuery_Core_Style_Guidelines">代码规范</a>.</p>
<p>css和属性的逻辑被划分开来, 不再如以往相互缠绕。</p>
</blockquote>
<h4>测试 (Testing)</h4>
<p>jQuery 1.4版发布过程中我们<a target="_blank"  href="http://dev.jquery.com/report/34">修复了207个问题</a> (比较之下1.3版里有97个修复)。</p>
<p>jQuery 1.4.此外, 测试的数量从jQuery 1.3.2中的1504例升到了1.4中的3060例。</p>
<p>所有测试都在主要浏览器里完全通过了。(Safari 3.2, Safari 4, Firefox 2, Firefox 3, Firefox 3.5, IE 6, IE 7,<br />
IE 8, Opera 10.10, and Chrome)</p>
<p><a target="_blank"  rel="lightbox[69]" href="http://www.uxd2.com/wp-content/uploads/2010/01/08-test.jpg"><img title="jQuery 1.4 测试结果" src="http://www.uxd2.com/wp-content/uploads/2010/01/08-test.jpg" alt="jQuery 1.4 测试结果" width="500" height="277" /></a></p>
<h1><a target="_blank"  name="backwards"></a></h1>
<p>我们尽量试图减小jQuery 1.4对大规模升级可能造成的麻烦 – 保持所有公开函数的签名不变。即使如此, 请通读下面的列表以保证你对可能对你的应用造成问题的变更。</p>
<blockquote>
<p><a target="_blank"  href="http://api.jquery.com/add">.add()</a>不再简单的将结果串联到一起, 结果将会被混合到一起, 然后根据他们在页面里的顺序排列。</p>
<p><a target="_blank"  href="http://api.jquery.com/clone">.clone(true)</a>将复制事件和数据, 而不仅是事件。</p>
<p><a target="_blank"  href="http://api.jquery.com/jQuery.data">jQuery.data(elem)</a> 不再返回<code>id</code>, 取而代之的是元素的对象缓存。</p>
<p><a target="_blank"  href="http://api.jquery.com/jQuery">jQuery()</a> (无参数) 不再自动转换成<a target="_blank"  href="http://api.jquery.com/jQuery">jQuery(document)</a>了。</p>
<p>通过<a target="_blank"  href="http://api.jquery.com/val">.val(“…”)</a>获得一个<code>option</code>或一个<code>checkbox</code>的值不再有歧义(将总是根据<code>value</code>属性选择, 而不是根据<code>text</code>的值)。(<a target="_blank"  href="http://github.com/jquery/jquery/commit/f298cce100c6fe23840ac95e66aaea9cb2bfb447">Commit</a>)</p>
<p><a target="_blank"  href="http://api.jquery.com/jQuery.browser">jQuery.browser.version</a>现在将返回引擎的版本.</p>
<p>现在起将对引入的JSON更严格, 如果JSON的格式不符将会报错。如果你需要对不符合JSON严格格式的Javascript进行估值, 你必须设置请求的文件类型为纯文本, 然后用<code>eval()</code>来对内容估值。</p>
<p>参数序列化默认会按照PHP/Rails的风格进行。你可以通过<code>jQuery.ajaxSettings.traditional = true;</code>来切换到旧的序列化方式。你也可以针对个别请求进行切换, 在调用<a target="_blank"  href="http://api.jquery.com/jQuery.ajax">jQuery.ajax</a>的时候递入<code>{traditional: true}</code></p>
<p>内部的jQuery.className被移除了。</p>
<p><a target="_blank"  href="http://api.jquery.com/jQuery.extend">jQuery.extend(true, …)</a>不再扩展复杂对象或是阵列。(TODO)</p>
<p>如果一个<a target="_blank"  href="http://api.jquery.com/jQuery.ajax">Ajax请求</a>没有指定dataType, 而返回的数据类型是”text/javascript”, 那么回复将会被执行。之前, 必须明确的指定dataType。</p>
<p>设置<a target="_blank"  href="http://api.jquery.com/jQuery.ajax">Ajax 请求</a>的”ifModified”属性会将ETags纳入考虑。</p>
</blockquote>
<p>我们还针对1.4版中可能造成问题的变更编写了一个向后兼容的<a target="_blank"  href="http://github.com/jquery/jquery-compat-1.3">插件</a>。如果你升级到1.4以后出现问题, 可以在引入1.4版的文件之后引入这个插件。</p>
<p>如何使用这个插件:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;http://code.jquery.com/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://code.jquery.com/jquery.compat-1.3.js&quot;&gt;&lt;/script&gt;
</pre>
<h3>原始数据和测试页面</h3>
<p>性能测试中我们使用了下列测试套包:</p>
<blockquote>
<p><a target="_blank"  href="http://ejohn.org/files/jquery1.4/slick/?type=attr">Attributes</a></p>
<p><a target="_blank"  href="http://ejohn.org/files/jquery1.4/slick/?type=class">Class</a></p>
<p><a target="_blank"  href="http://ejohn.org/files/jquery1.4/slick/?type=dom">DOM Manipulation</a></p>
<p><a target="_blank"  href="http://ejohn.org/files/jquery1.4/slick/?type=empty">Empty/Remove</a></p>
<p>Function Call Profiling: <a target="_blank"  href="http://ejohn.org/files/jquery-profile.html">1.3.2</a> <a target="_blank"  href="http://ejohn.org/files/jquery-profile-14.html">1.4</a>.</p>
</blockquote>
<p>结果的原始数据 (所有的数据都是 1.3.2 vs. 1.4):</p>
<blockquote>
<p>函数调用的次数<br />
547    3<br />
760    3<br />
500    200<br />
896    399<br />
23909    299<br />
307    118<br />
28955    100<br />
28648    201<br />
1662    593</p>
<p>DOM嵌入<br />
558    317<br />
1079    624<br />
1079    516<br />
1155    829<br />
436    332<br />
196    194<br />
243    169</p>
<p>HTML<br />
116    46<br />
281    78<br />
313    78<br />
234    63<br />
134    43<br />
43    42<br />
91    27</p>
<p>CSS/属性<br />
703    370<br />
1780    1250<br />
1765    1250<br />
1157    749<br />
629    498<br />
346    184<br />
333    161</p>
<p>CSS<br />
114    52<br />
203    93<br />
118    93<br />
109    47<br />
116    54<br />
58    24<br />
54    22</p>
<p>CSS类<br />
553    138<br />
1578    546<br />
1515    501<br />
1033    327<br />
769    298<br />
229    80<br />
173    41</p>
<p>移除/清空<br />
3298    286<br />
9030    2344<br />
7921    1703<br />
5282    1266<br />
2898    303<br />
1166    140<br />
1034    122</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.oncoding.cn/2010/jquery-14-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery对表单元素的取值和赋值操作</title>
		<link>http://www.oncoding.cn/2009/jquery-input-value/</link>
		<comments>http://www.oncoding.cn/2009/jquery-input-value/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 06:26:38 +0000</pubDate>
		<dc:creator>j5726</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.oncoding.cn/?p=119</guid>
		<description><![CDATA[今天在使用jQuery的过程中，遇到两个不大不小的问题，写出来分享一下。 jQuery读取input元素的值： 使用常规的思路：$(“#keyword”).value 取值是取不到的，因为此时$(&#8216;#keydord&#8217;)已经不是个element，而是个jquery对象，所以应该使用： 因为Qjuery对象中第一个元素即为DOM对象，所以也可以这样取值： jQuery中 val()函数的作用： val() 获得第一个匹配元素的当前值。 在 jQuery 1.2 中,可以返回任意元素的值。包括select。如果多选，将返回一个数组，其包含所选的值。 返回值 String,Array 同理，对input元素赋值，需要： 或： 附：jquery 1.3.2对基本表单元素的取值方法]]></description>
			<content:encoded><![CDATA[<p>今天在使用jQuery的过程中，遇到两个不大不小的问题，写出来分享一下。</p>
<p><strong>jQuery读取input元素的值：</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;text&quot; id=&quot;keyword&quot; /&gt;
</pre>
<p>使用常规的思路：$(“#keyword”).value 取值是取不到的，因为此时$(&#8216;#keydord&#8217;)已经不是个element，而是个jquery对象，所以应该使用：</p>
<pre class="brush: jscript; title: ; notranslate">
var inputValue = $(&quot;#keyword&quot;).val();
</pre>
<p>因为Qjuery对象中第一个元素即为DOM对象，所以也可以这样取值：</p>
<pre class="brush: jscript; title: ; notranslate">
var inputValue = $(&quot;#keyword&quot;)[0].value;
</pre>
<p>jQuery中 val()函数的作用：</p>
<blockquote><p><span style="color: #339966;">val()<br />
获得第一个匹配元素的当前值。<br />
在 jQuery 1.2 中,可以返回任意元素的值。包括select。如果多选，将返回一个数组，其包含所选的值。</span></p>
<p><span style="color: #339966;">返回值<br />
String,Array </span></p></blockquote>
<p>同理，<strong>对input元素赋值</strong>，需要：</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#keyword&quot;).val(&quot;&quot;);
</pre>
<p>或：</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#keyword&quot;)[0].value = &quot;&quot;;
</pre>
<p><strong>附：jquery 1.3.2对基本表单元素的取值方法</strong></p>
<pre class="brush: jscript; title: ; notranslate">

 /*获得TEXT.AREATEXT的值*/
var textval = $(&quot;#text_id&quot;).attr(&quot;value&quot;);
//或者
var textval = $(&quot;#text_id&quot;).val();

/*获取单选按钮的值*/
var valradio = $(&quot;input[type=radio]:checked&quot;).val();

/*获取一组名为(items)的radio被选中项的值*/
var item = $('input[name=items]:checked').val();

/*获取复选框的值*/
var checkboxval = $(&quot;#checkbox_id&quot;).attr(&quot;value&quot;)；

/*获取下拉列表的值*/
var selectval = $('#select_id').val();

/*文本框，文本区域*/
$(&quot;#text_id&quot;).attr(&quot;value&quot;,&quot;);//清空内容
$(&quot;#text_id&quot;).attr(&quot;value&quot;,'test');//填充内容

/*多选框checkbox*/
$(&quot;#chk_id&quot;).attr(&quot;checked&quot;,&quot;);//使其未勾选
$(&quot;#chk_id&quot;).attr(&quot;checked&quot;,true);//勾选
if($(&quot;#chk_id&quot;).attr('checked')==true) //判断是否已经选中

/*单选组radio*/
$(&quot;input[type=radio]&quot;).attr(&quot;checked&quot;,'2');//设置value=2的项目为当前选中项

/*下拉框select*/
$(&quot;#select_id&quot;).attr(&quot;value&quot;,'test');//设置value=test的项目为当前选中项
$(&quot;testtest2&quot;).appendTo(&quot;#select_id&quot;)//添加下拉框的option
$(&quot;#select_id&quot;).empty()；//清空下拉框

/*获取一组名为(items)的radio被选中项的值*/
var item = $('input[name=items]:checked').val(); //若未被选中 则val() = undefined

/*获取select被选中项的文本*/
var item = $(&quot;select[name=items] option:selected&quot;).text();

/*select下拉框的第二个元素为当前选中值*/
$('#select_id')[0].selectedIndex = 1;

/*radio单选组的第二个元素为当前选中值*/
$('input[name=items]').get(1).checked = true;

/*重置表单*/
$(&quot;form&quot;).each(function(){
.reset();
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oncoding.cn/2009/jquery-input-value/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

