<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[零度空间]]></title> 
<link>http://www.206c.net/blog/index.php</link> 
<description><![CDATA[笑看人生]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[零度空间]]></copyright>
<item>
<link>http://www.206c.net/blog/post/90/</link>
<title><![CDATA[jQuery.ajax [options] -- 1.4]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Fri, 27 Aug 2010 02:51:21 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/90/</guid> 
<description>
<![CDATA[ 
	<span style="color: #FF4500;">通过 HTTP 请求加载远程数据。</span><br/><br/><span style="color: #666666;">jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数，除非你需要操作不常用的选项，以获得更多的灵活性。 <br/><br/>最简单的情况下，$.ajax()可以不带任何参数直接使用。 </span><br/><br/><span style="color: #FF4500;">注意，所有的选项都可以通过$.ajaxSetup()函数来全局设置。 </span><br/><br/><strong>回调函数 </strong><br/><br/><span style="color: #666666;">如果要处理$.ajax()得到的数据，则需要使用回调函数。beforeSend、error、dataFilter、success、complete。 </span><br/><br/><br/><span style="color: #8B0000;">1. beforeSend 在发送请求之前调用，并且传入一个XMLHttpRequest作为参数。<br/>2. error 在请求出错时调用。传入XMLHttpRequest对象，描述错误类型的字符串以及一个异常对象（如果有的话）<br/>3. dataFilter 在请求成功之后调用。传入返回的数据以及&quot;dataType&quot;参数的值。并且必须返回新的数据（可能是处理过的）传递给success回调函数。<br/>4. success 当请求之后调用。传入返回后的数据，以及包含成功代码的字符串。<br/>5. complete 当请求完成之后调用这个函数，无论成功或失败。传入XMLHttpRequest对象，以及一个包含成功或错误代码的字符串。</span><br/><br/><strong>数据类型</strong> <br/><br/><span style="color: #666666;">$.ajax()函数依赖服务器提供的信息来处理返回的数据。如果服务器报告说返回的数据是XML，那么返回的结果就可以用普通的XML方法或者jQuery的选择器来遍历。如果见得到其他类型，比如HTML，则数据就以文本形式来对待。 <br/><br/>通过dataType选项还可以指定其他不同数据处理方式。除了单纯的XML，还可以指定 html、json、jsonp、script或者text。 <br/><br/>其中，text和xml类型返回的数据不会经过处理。数据仅仅简单的将XMLHttpRequest的responseText或responseHTML属性传递给success回调函数， <br/><br/>注意，我们必须确保网页服务器报告的MIME类型与我们选择的dataType所匹配。比如说，XML的话，服务器端就必须声明 text/xml 或者 application/xml 来获得一致的结果。 <br/><br/>如果指定为html类型，任何内嵌的JavaScript都会在HTML作为一个字符串返回之前执行。类似的，指定script类型的话，也会先执行服务器端生成JavaScript，然后再把脚本作为一个文本数据返回。 <br/><br/>如果指定为json类型，则会把获取到的数据作为一个JavaScript对象来解析，并且把构建好的对象作为结果返回。为了实现这个目的，他首先尝试使用JSON.parse()。如果浏览器不支持，则使用一个函数来构建。JSON数据是一种能很方便通过JavaScript解析的结构化数据。如果获取的数据文件存放在远程服务器上（域名不同，也就是跨域获取数据），则需要使用jsonp类型。使用这种类型的话，会创建一个查询字符串参数 callback=? ，这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名，以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback，可以通过设置$.ajax()的jsonp参数。 <br/><br/>注意，JSONP是JSON格式的扩展。他要求一些服务器端的代码来检测并处理查询字符串参数。更多信息可以参阅 最初的文章。 <br/><br/>如果指定了script或者jsonp类型，那么当从服务器接收到数据时，实际上是用了&lt;script&gt;标签而不是XMLHttpRequest对象。这种情况下，$.ajax()不再返回一个XMLHttpRequest对象，并且也不会传递事件处理函数，比如beforeSend。 </span><br/><strong>发送数据到服务器 </strong><br/><br/><span style="color: #666666;">默认情况下，Ajax请求使用GET方法。如果要使用POST方法，可以设定type参数值。这个选项也会影响data选项中的内容如何发送到服务器。 </span><br/><br/><span style="color: #666666;">data选项既可以包含一个查询字符串，比如 key1=value1&amp;key2=value2 ，也可以是一个映射，比如 &#123;key1: &#039;value1&#039;, key2: &#039;value2&#039;&#125; 。如果使用了后者的形式，则数据再发送器会被转换成查询字符串。这个处理过程也可以通过设置processData选项为false来回避。如果我们希望发送一个XML对象给服务器时，这种处理可能并不合适。并且在这种情况下，我们也应当改变contentType选项的值，用其他合适的MIME类型来取代默认的 application/x-www-form-urlencoded 。 </span><br/><strong>高级选项 </strong><br/><br/><span style="color: #008080;">global选项用于阻止响应注册的回调函数，比如.ajaxSend，或者ajaxError，以及类似的方法。这在有些时候很有用，比如发送的请求非常频繁且简短的时候，就可以在ajaxSend里禁用这个。更多关于这些方法的详细信息，请参阅下面的内容。 <br/><br/>如果服务器需要HTTP认证，可以使用用户名和密码可以通过username和password选项来设置。 <br/><br/>Ajax请求是限时的，所以错误警告被捕获并处理后，可以用来提升用户体验。请求超时这个参数通常就保留其默认值，要不就通过jQuery.ajaxSetup来全局设定，很少为特定的请求重新设置timeout选项。 <br/><br/>默认情况下，请求总会被发出去，但浏览器有可能从他的缓存中调取数据。要禁止使用缓存的结果，可以设置cache参数为false。如果希望判断数据自从上次请求后没有更改过就报告出错的话，可以设置ifModified为true。 <br/><br/>scriptCharset允许给&lt;script&gt;标签的请求设定一个特定的字符集，用于script或者jsonp类似的数据。当脚本和页面字符集不同时，这特别好用。 <br/><br/>Ajax的第一个字母是asynchronous的开头字母，这意味着所有的操作都是并行的，完成的顺序没有前后关系。$.ajax()的async参数总是设置成true，这标志着在请求开始后，其他代码依然能够执行。强烈不建议把这个选项设置成false，这意味着所有的请求都不再是异步的了，这也会导致浏览器被锁死。 <br/><br/>$.ajax函数返回他创建的XMLHttpRequest对象。通常jQuery只在内部处理并创建这个对象，但用户也可以通过xhr选项来传递一个自己创建的xhr对象。返回的对象通常已经被丢弃了，但依然提供一个底层接口来观察和操控请求。比如说，调用对象上的.abort()可以在请求完成前挂起请求。</span><br/><strong>参数：</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">options (可选)&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">Object </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//AJAX 请求设置。所有选项都是可选的。</span><br/><br/><strong>选项：</strong>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">async&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Boolean </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//(默认: true) 默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">beforeSend(XHR) </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//发送请求前可修改 XMLHttpRequest 对象的函数，如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。这是一个 Ajax 事件。如果返回false可以取消本次ajax请求。</span><br/><textarea name="code" class="JS" rows="15" cols="100">function (XMLHttpRequest) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;this; // 调用本次AJAX请求时传递的options参数
&#125;</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">cache </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Boolean</span><br/><span style="color: #008000;">//(默认: true,dataType为script和jsonp时默认为false) jQuery 1.2 新功能，设置为 false 将不缓存此页面。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">complete(XHR, TS) </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//请求完成后回调函数 (请求成功或失败之后均调用)。参数： XMLHttpRequest 对象和一个描述成功请求类型的字符串。 Ajax 事件。</span> <br/><textarea name="code" class="JS" rows="15" cols="100">function (XMLHttpRequest, textStatus) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;this; // 调用本次AJAX请求时传递的options参数
&#125;</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">contentType</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">String </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//(默认: &quot;application/x-www-form-urlencoded&quot;) 发送信息至服务器时内容编码类型。默认值适合大多数情况。如果你明确地传递了一个content-type给 $.ajax() 那么他必定会发送给服务器（即使没有数据要发送）</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">context&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">Object </span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//这个对象用于设置Ajax相关回调函数的上下文。也就是说，让回调函数内this指向这个对象（如果不设定这个参数，那么this就指向调用本次AJAX请求时传递的options参数）。比如指定一个DOM元素作为context参数，这样就设置了success回调函数的上下文为这个DOM元素。就像这样：</span><br/><textarea name="code" class="JS" rows="15" cols="100">$.ajax(&#123; url: &quot;test.html&quot;, context: document.body, success: function()&#123;
&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass(&quot;done&quot;);
&#125;&#125;);</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">data&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Object,String</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组，jQuery 将自动为不同值对应同一个名称。如 &#123;foo:[&quot;bar1&quot;, &quot;bar2&quot;]&#125; 转换为 &#039;&amp;foo=bar1&amp;foo=bar2&#039;。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">dataFilter </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//给Ajax返回的原始数据的进行预处理的函数。提供data和type两个参数：data是Ajax返回的原始数据，type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。</span><br/><textarea name="code" class="JS" rows="15" cols="100">function (data, type) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;// 对Ajax返回的原始数据进行预处理
&nbsp;&nbsp;&nbsp;&nbsp;return data&nbsp;&nbsp;// 返回处理后的数据
&#125;</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">dataType</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//预期服务器返回的数据类型。如果不指定，jQuery 将自动根据 HTTP 包 MIME 信息来智能判断，比如XML MIME类型就被识别为XML。在1.4中，JSON就会生成一个JavaScript对象，而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后，传递给回调函数。可用值: <br/><br/>&quot;xml&quot;: 返回 XML 文档，可用 jQuery 处理。<br/><br/>&quot;html&quot;: 返回纯文本 HTML 信息；包含的script标签会在插入dom时执行。<br/><br/>&quot;script&quot;: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了&quot;cache&quot;参数。&#039;&#039;&#039;注意：&#039;&#039;&#039;在远程请求时(不在同一个域下)，所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)<br/><br/>&quot;json&quot;: 返回 JSON 数据 。<br/><br/>&quot;jsonp&quot;: JSONP 格式。使用 JSONP 形式调用函数时，如 &quot;myurl?callback=?&quot; jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。<br/><br/>&quot;text&quot;: 返回纯文本字符串</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #DC143C;">error</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//(默认: 自动判断 (xml 或 html)) 请求失败时调用此函数。有以下三个参数：XMLHttpRequest 对象、错误信息、（可选）捕获的异常对象。如果发生了错误，错误信息（第二个参数）除了得到null之外，还可能是&quot;timeout&quot;, &quot;error&quot;, &quot;notmodified&quot; 和 &quot;parsererror&quot;。Ajax 事件。</span><br/><textarea name="code" class="JS" rows="15" cols="100">function (XMLHttpRequest, textStatus, errorThrown) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;// 通常 textStatus 和 errorThrown 之中
&nbsp;&nbsp;&nbsp;&nbsp;// 只有一个会包含信息
&nbsp;&nbsp;&nbsp;&nbsp;this; // 调用本次AJAX请求时传递的options参数
&#125;</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">global</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Boolean</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件，如 ajaxStart 或 ajaxStop 可用于控制不同的 Ajax 事件。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">ifModified </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Boolean</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。在jQuery 1.4中，他也会检查服务器指定的&#039;etag&#039;来确定数据没有被修改过。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">jsonp</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//在一个jsonp请求中重写回调函数的名字。这个值用来替代在&quot;callback=?&quot;这种GET或POST请求中URL参数里的&quot;callback&quot;部分，比如&#123;jsonp:&#039;onJsonPLoad&#039;&#125;会导致将&quot;onJsonPLoad=?&quot;传给服务器。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">jsonpCallback</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名，这样管理请求更容易，也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候，指定这个回调函数名。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">password&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">// 用于响应HTTP访问认证请求的密码</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">processData</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Boolean</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//(默认: true) 默认情况下，通过data选项传递进来的数据，如果是一个对象(技术上讲只要不是字符串)，都会处理转化成一个查询字符串，以配合默认内容类型 &quot;application/x-www-form-urlencoded&quot;。如果要发送 DOM 树信息或其它不希望转换的信息，请设置为 false。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">scriptCharset </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//只有当请求时dataType为&quot;jsonp&quot;或&quot;script&quot;，并且type是&quot;GET&quot;才会用于强制修改charset。通常只在本地和远程的内容编码不同时使用。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">success</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//请求成功后的回调函数。参数：由服务器返回，并根据dataType参数进行处理后的数据；描述状态的字符串。 Ajax 事件。 </span><br/><textarea name="code" class="JS" rows="15" cols="100">function (data, textStatus) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;// data 可能是 xmlDoc, jsonObj, html, text, 等等...
&nbsp;&nbsp;&nbsp;&nbsp;this; // 调用本次AJAX请求时传递的options参数
&#125;</textarea><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">traditional </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">Boolean</span>&nbsp;&nbsp; <span style="color: #008000;">//如果你想要用传统的方式来序列化数据，那么就设置为true。请参考工具分类下面的jQuery.param 方法。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">timeout </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Number</span>&nbsp;&nbsp; <span style="color: #008000;">//设置请求超时时间（毫秒）。此设置将覆盖全局设置。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">type </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">String</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//(默认: &quot;GET&quot;) 请求方式 (&quot;POST&quot; 或 &quot;GET&quot;)， 默认为 &quot;GET&quot;。注意：其它 HTTP 请求方法，如 PUT 和 DELETE 也可以使用，但仅部分浏览器支持。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">url </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">String</span>&nbsp;&nbsp; <span style="color: #008000;">//(默认: 当前页地址) 发送请求的地址。</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">username</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #4169E1;">String</span>&nbsp;&nbsp; <span style="color: #008000;">//用于响应HTTP访问认证请求的用户名</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #DC143C;">xhr</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #4169E1;">Function</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;">//需要返回一个XMLHttpRequest 对象。默认在IE下是ActiveXObject 而其他情况下是XMLHttpRequest 。用于重写或者提供一个增强的XMLHttpRequest 对象。这个参数在jQuery 1.3以前不可用。</span><br/><br/><strong>示例</strong><br/><br/>描述:加载并执行一个 JS 文件。<br/>jQuery 代码:<br/><textarea name="code" class="JS" rows="15" cols="100">$.ajax(&#123;
&nbsp;&nbsp;type: &quot;GET&quot;,
&nbsp;&nbsp;url: &quot;test.js&quot;,
&nbsp;&nbsp;dataType: &quot;script&quot;
&#125;);</textarea><br/><br/>描述:保存数据到服务器，成功时显示信息。<br/>jQuery 代码:<br/><textarea name="code" class="JS" rows="15" cols="100">$.ajax(&#123;
&nbsp;&nbsp; type: &quot;POST&quot;,
&nbsp;&nbsp; url: &quot;some.php&quot;,
&nbsp;&nbsp; data: &quot;name=John&amp;location=Boston&quot;,
&nbsp;&nbsp; success: function(msg)&#123;
&nbsp;&nbsp;&nbsp;&nbsp; alert( &quot;Data Saved: &quot; + msg );
&nbsp;&nbsp; &#125;
&#125;);</textarea><br/><br/>描述:装入一个 HTML 网页最新版本。<br/>jQuery 代码:<br/><textarea name="code" class="JS" rows="15" cols="100">$.ajax(&#123;
&nbsp;&nbsp;url: &quot;test.html&quot;,
&nbsp;&nbsp;cache: false,
&nbsp;&nbsp;success: function(html)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;$(&quot;#results&quot;).append(html);
&nbsp;&nbsp;&#125;
&#125;);</textarea><br/><br/>描述:同步加载数据。发送请求时锁住浏览器。需要锁定用户交互操作时使用同步方式。<br/>jQuery 代码:<br/><textarea name="code" class="JS" rows="15" cols="100">var html = $.ajax(&#123;
&nbsp;&nbsp;url: &quot;some.php&quot;,
&nbsp;&nbsp;async: false
 &#125;).responseText;</textarea><br/><br/>描述:发送 XML 数据至服务器。设置 processData 选项为 false，防止自动转换数据格式。<br/>jQuery 代码:<br/><textarea name="code" class="JS" rows="15" cols="100">var xmlDocument = [create xml document];
 $.ajax(&#123;
&nbsp;&nbsp; url: &quot;page.php&quot;,
&nbsp;&nbsp; processData: false,
&nbsp;&nbsp; data: xmlDocument,
&nbsp;&nbsp; success: handleResponse
 &#125;);</textarea><br/><br/>
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/85/</link>
<title><![CDATA[全球唯一标识符 -- GUID]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Thu, 08 Jul 2010 04:13:46 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/85/</guid> 
<description>
<![CDATA[ 
	<p>　　世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中，分配必须具有唯一性的标识符。在 Windows 平台上，GUID 应用非常广泛：注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。</p><ul><li>Globally Unique Identifier（全球唯一标识符） 也称作 UUID(Universally Unique IDentifier)</li><li>GUID/UUID是通过特定算法产生的一个二进制长度为128位的数字</li><li>在空间上和时间上具有唯一性，保证同一时间不同地方产生的数字不同</li><li>在公元3400年以前产生的UUID/GUID与任何其他产生过的UUIDs/GUIDs都不相同</li><li>在需要GUID的时候，可以完全由算法自动生成，不需要一个权威机构来管理</li><li>GUID的长度固定，并且相对而言较短小，非常适合于排序、标识和存储</li></ul><p>如Word文档，创建一个唯一的标识，GUID值就是这个唯一的标识码。GUID广泛应用于微软的产品中，用于识别接口、复制品、记录以及其他对象。不同类型的对象对应不同的GUID值。例如，一个微软Access数据库使用的是16字节域为复制品创建一个唯一标识。<br /><br />微软的某种GUID值本质、形成GUID值方法以及由于GUID值产生的潜在弊端已经引起了保密性提倡者的关注。1999年3月，美国联邦商务委员会接到要求，对微软的GUID值使用进行调查。<br /><br />下面奉上一个可以生成GUID的脚本.<br /><br /></p><textarea name="code" class="html" rows="15" cols="100"> &lt;script type=&quot;text/javascript&quot;&gt; function NewGuid_ () &#123; var Guid = &quot;&quot;; for (var i=1; i&lt;=32; i++) &#123; var N = Math.floor(Math.random()*16.0).toString(16); Guid += N; if((i==8) &#124;&#124; (i==12) &#124;&#124; (i==16) &#124;&#124; (i==20)) &#123; Guid +=&quot;-&quot;; &#125; &#125; return Guid.toUpperCase(); &#125; document.write(NewGuid_()); &lt;/script&gt; </textarea>
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/82/</link>
<title><![CDATA[简易的全屏透明遮罩--lightBox]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Fri, 11 Jun 2010 02:23:02 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/82/</guid> 
<description>
<![CDATA[ 
	前不久有个正要毕业的网友给我发邮件，他毕业设计需要实现锁屏的效果，但是他没有能看懂我之前发布的对话框源码，他问能不能把锁屏相关代码说明下，我当时说过两天就发。由于最近比较忙，我现在才想起来，但愿现在此文还来得及。<br/><br/>步入正题：<br/><br/>现在全屏的半透明遮罩层在web2.0网站应用非常广泛了，绝大多数遮罩是通过计算页面大小，然后覆盖一个与页面同等大小的层实现，如腾讯 qzone, wordpress后台。这种方式本来无可非议，但是在页面很长的时候在IE8下会失效（国外资料的解释是与机器显卡相关），有些完美情节的同学遇到这个问题后就抓破了头，无奈之下甚至想让IE8强制使用IE7的方式解析他的作品。其实我们有一个更好的方法，咱们用CSS去解决它！<br/><br/>还记得“position:fixed”吗？它是css2的一个新增的属性，他可以让一个元素静止在页面上，拖动滚动条也不会动，如Qzone顶部固定的导航栏就是这样实现的。同样我们也可以用一个100%高宽的层覆盖浏览器视口，这样就可以实现全屏遮罩了，不用再计算页面的大小，调整浏览器大小的时候也不要去动态修改尺寸了。<br/><br/><textarea name="code" class="html" rows="15" cols="100"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>lock page</title>
<meta name="author" content="www.planeart.cn" />
<style>
#pageOverlay &#123; position:fixed; top:0; left:0; z-index:1987; width:100%; height:100%; background:#000; filter:alpha(opacity=70); opacity:0.7; &#125;
</style>
</head>
<body&nbsp;&nbsp; >
<ol id="test" onclick="document.getElementById('pageOverlay').style.visibility = 'visible'">
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
</ol>
<div id="pageOverlay" onclick="this.style.visibility = 'hidden'"></div>
</body>
</html></textarea><br/><br/>可是有一个头疼的问题，IE6不支持“position:fixed”，咱们只能通过js动态的修改它的TOP值以模拟静止定位，拖动滚动条的时候遮罩成肯定会抖动，因为每改变一次IE会重新渲染一次。但是微软却给我们提供了一个非常有趣的特性，如果给html或者body标签设置一个静止定位的背景图片，层在拖动滚动条的时候就不会抖动了，几乎完美的模拟了“position:fixed”。我在实际项目中发现这个特性他还能触发其他的特异功能，以后再说明。<br/><br/>为了省事，咱们针对IE6用万恶expression在CSS中写点脚本，拖动滚动条的时候重新定位我们的遮罩层。传说中 expression是非常耗性能的，可是咱们的expression几乎没有损耗，有兴趣的同学可以深入研究下expression。<br/><br/><textarea name="code" class="html" rows="15" cols="100"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>lock page</title>
<meta name="author" content="www.planeart.cn" />
<style>
#pageOverlay &#123; position:fixed; top:0; left:0; z-index:1987; width:100%; height:100%; background:#000; filter:alpha(opacity=70); opacity:0.7; &#125;
/*IE6 fixed*/
* html &#123; background:url(*) fixed; &#125;
* html body &#123; margin:0; height:100%; &#125;
* html #pageOverlay &#123; position: absolute; left: expression(documentElement.scrollLeft + documentElement.clientWidth - this.offsetWidth); top: expression(documentElement.scrollTop + documentElement.clientHeight - this.offsetHeight); &#125;
</style>
</head>
<body&nbsp;&nbsp; >
<ol id="test" onclick="document.getElementById('pageOverlay').style.visibility = 'visible'">
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
</ol>
<div id="pageOverlay" onclick="this.style.visibility = 'hidden'"></div>
</body>
</html></textarea><br/><br/>好了，兼容IE6这个大头娃娃后，咱们的锁屏遮罩已经通杀主流浏览器了，但是呢用js写效果的同学们总是非常的蛋疼，总想折腾点什么来，咱们就再添加一点脚本，让锁屏的时候后可以中断用户操作，把滚动条、滚轮、tab键、全选、刷新、右键统统禁止掉，模拟真正的‘锁屏’：<br/><br/><textarea name="code" class="html" rows="15" cols="100"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>lock page</title>
<meta name="author" content="www.planeart.cn" />
<style>
#pageOverlay &#123; visibility:hidden; position:fixed; top:0; left:0; z-index:1987; width:100%; height:100%; background:#000; filter:alpha(opacity=70); opacity:0.7; &#125;
/*IE6 fixed*/
* html &#123; background:url(*) fixed; &#125;
* html body &#123; margin:0; height:100%; &#125;
* html #pageOverlay &#123; position: absolute; left: expression(documentElement.scrollLeft + documentElement.clientWidth - this.offsetWidth); top: expression(documentElement.scrollTop + documentElement.clientHeight - this.offsetHeight); &#125;
</style>
<script>
(function()&#123;
 // 获取对象
 var $ = function (id)&#123;
&nbsp;&nbsp;return document.getElementById(id);
 &#125;;
 // 遍历
 var each = function(a, b) &#123;
&nbsp;&nbsp;for (var i = 0, len = a.length; i < len; i++) b(a[i], i);
 &#125;;
 // 事件绑定
 var bind = function (obj, type, fn) &#123;
&nbsp;&nbsp;if (obj.attachEvent) &#123;
&nbsp;&nbsp; obj['e' + type + fn] = fn;
&nbsp;&nbsp; obj[type + fn] = function()&#123;obj['e' + type + fn](window.event);&#125;
&nbsp;&nbsp; obj.attachEvent('on' + type, obj[type + fn]);
&nbsp;&nbsp;&#125; else &#123;
&nbsp;&nbsp; obj.addEventListener(type, fn, false);
&nbsp;&nbsp;&#125;;
 &#125;;
 
 // 移除事件
 var unbind = function (obj, type, fn) &#123;
&nbsp;&nbsp;if (obj.detachEvent) &#123;
&nbsp;&nbsp; try &#123;
&nbsp;&nbsp;&nbsp;&nbsp;obj.detachEvent('on' + type, obj[type + fn]);
&nbsp;&nbsp;&nbsp;&nbsp;obj[type + fn] = null;
&nbsp;&nbsp; &#125; catch(_) &#123;&#125;;
&nbsp;&nbsp;&#125; else &#123;
&nbsp;&nbsp; obj.removeEventListener(type, fn, false);
&nbsp;&nbsp;&#125;;
 &#125;;
 
 // 阻止浏览器默认行为
 var stopDefault = function(e)&#123;
&nbsp;&nbsp;e.preventDefault ? e.preventDefault() : e.returnValue = false;
 &#125;;
 // 获取页面滚动条位置
 var getPage = function()&#123;
&nbsp;&nbsp;var dd = document.documentElement,
&nbsp;&nbsp; db = document.body;
&nbsp;&nbsp;return &#123;
&nbsp;&nbsp; left: Math.max(dd.scrollLeft, db.scrollLeft),
&nbsp;&nbsp; top: Math.max(dd.scrollTop, db.scrollTop)
&nbsp;&nbsp;&#125;;
 &#125;;
 
 // 锁屏
 var lock = &#123;
&nbsp;&nbsp;show: function()&#123;
&nbsp;&nbsp; $('pageOverlay').style.visibility = 'visible';
&nbsp;&nbsp; var p = getPage(),
&nbsp;&nbsp;&nbsp;&nbsp;left = p.left,
&nbsp;&nbsp;&nbsp;&nbsp;top = p.top;
&nbsp;&nbsp; 
&nbsp;&nbsp; // 页面鼠标操作限制
&nbsp;&nbsp; this.mouse = function(evt)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;var e = evt &#124;&#124; window.event;
&nbsp;&nbsp;&nbsp;&nbsp;stopDefault(e);
&nbsp;&nbsp;&nbsp;&nbsp;scroll(left, top);
&nbsp;&nbsp; &#125;;
&nbsp;&nbsp; each(['DOMMouseScroll', 'mousewheel', 'scroll', 'contextmenu'], function(o, i) &#123;
&nbsp;&nbsp;&nbsp;&nbsp; bind(document, o, lock.mouse);
&nbsp;&nbsp; &#125;);
&nbsp;&nbsp; // 屏蔽特定按键: F5, Ctrl + R, Ctrl + A, Tab, Up, Down
&nbsp;&nbsp; this.key = function(evt)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;var e = evt &#124;&#124; window.event,
&nbsp;&nbsp;&nbsp;&nbsp; key = e.keyCode;
&nbsp;&nbsp;&nbsp;&nbsp;if((key == 116) &#124;&#124; (e.ctrlKey && key == 82) &#124;&#124; (e.ctrlKey && key == 65) &#124;&#124; (key == 9) &#124;&#124; (key == 38) &#124;&#124; (key == 40)) &#123;
&nbsp;&nbsp;&nbsp;&nbsp; try&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.keyCode = 0;
&nbsp;&nbsp;&nbsp;&nbsp; &#125;catch(_)&#123;&#125;;
&nbsp;&nbsp;&nbsp;&nbsp; stopDefault(e);
&nbsp;&nbsp;&nbsp;&nbsp;&#125;;
&nbsp;&nbsp; &#125;;
&nbsp;&nbsp; bind(document, 'keydown', lock.key);
&nbsp;&nbsp;&#125;,
&nbsp;&nbsp;close: function()&#123;
&nbsp;&nbsp; $('pageOverlay').style.visibility = 'hidden';
&nbsp;&nbsp; each(['DOMMouseScroll', 'mousewheel', 'scroll', 'contextmenu'], function(o, i) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;unbind(document, o, lock.mouse);
&nbsp;&nbsp; &#125;);
&nbsp;&nbsp; unbind(document, 'keydown', lock.key);
&nbsp;&nbsp;&#125;
 &#125;;
 bind(window, 'load', function()&#123;
&nbsp;&nbsp;$('btn_lock').onclick = function()&#123;
&nbsp;&nbsp; lock.show();
&nbsp;&nbsp;&#125;;
&nbsp;&nbsp;$('pageOverlay').onclick = function()&#123;
&nbsp;&nbsp; lock.close();
&nbsp;&nbsp;&#125;;
 &#125;);
&#125;)();
</script>
</head>
<body&nbsp;&nbsp; >
<button id="btn_lock" style="position: absolute; left:50%; top:40%; ">开启锁屏</button>
<ol id="test">
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
<li>囧</li>
</ol>
<div id="pageOverlay"></div>
</body>
</html></textarea><br/><br/>原文：http://www.planeart.cn/?p=792
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/78/</link>
<title><![CDATA[jQuery打造动态渐变按钮]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Tue, 11 May 2010 01:57:07 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/78/</guid> 
<description>
<![CDATA[ 
	<p>&nbsp;&nbsp;这是写给web设计者和前端开发者的教程，我们将演示如何使用Photoshop创建按钮的sprite图，然后是如何使用<strong>jQurey</strong>打造动态渐变效果。本教程分为以下四步：</p><ul>&nbsp;&nbsp;<li>&nbsp;&nbsp;&nbsp;&nbsp;Step1 - Photoshop</li>&nbsp;&nbsp;<li>&nbsp;&nbsp;&nbsp;&nbsp;Step2 - HTML/CSS</li>&nbsp;&nbsp;<li>&nbsp;&nbsp;&nbsp;&nbsp;Step3 - JavaScript(jQuery)</li>&nbsp;&nbsp;<li>&nbsp;&nbsp;&nbsp;&nbsp;Step4 - CSS修改</li></ul><p>&nbsp;&nbsp;最终结果如下：</p><p>&nbsp;&nbsp;<img alt="" src="/blog/attachment/image/02.jpg" style="width: 500px; height: 364px" /><a href="http://www.blueidea.com/articleimg/2010/05/7581/gradual-change-button.html" target="_blank"><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<strong>查看演示</strong></a><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<strong>Step1 - Photoshop</strong></p><p>&nbsp;&nbsp;<b>1. 新建文件</b></p><p>&nbsp;&nbsp;按钮的尺寸是100px X 80px，但由于我们需要创建一个有两种状态的CSS sprite背景图，所以我们在Photoshop中创建（Ctrl+N）一个长宽为200px X 160px的图片文件，如下图：</p><p>&nbsp;&nbsp;<img alt="" src="/blog/attachment/image/03.jpg" style="width: 500px; height: 326px" /><br />&nbsp;&nbsp;&nbsp;</p><p align="left">&nbsp;&nbsp;<b>2. 创建参考线</b></p><p>&nbsp;&nbsp;为了使绘制按钮更容易，我们创建参考线，从标尺中拉出参考线，如果你找不到标尺，可以按Ctrl+R显示，如下图：<img alt="" src="/blog/attachment/image/04.jpg" style="width: 500px; height: 282px" /><br />&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<b>3. 绘制形状</b></p><p>&nbsp;&nbsp;选择工具面板中的矩形工具，设置圆角半径为10px，在画布上绘制形状，如下图：<img alt="" src="/blog/attachment/image/05.jpg" style="width: 500px; height: 280px" /></p><p>&nbsp;&nbsp;<b>4. 设置形状样式</b></p><p>&nbsp;&nbsp;接上图最后一步，双击层，打开图层样式窗口，设置形状的样式，首先选择渐变叠加，设置渐变颜色从#3d3d3d到#8b8b8b，如下图：<img alt="" src="/blog/attachment/image/06.jpg" style="width: 500px; height: 275px" /></p><p>&nbsp;&nbsp;然后，选择&ldquo;内发光&rdquo;，设置混合模式为&ldquo;正常&rdquo;，不透明度为100%，颜色设置为#ffffff，图素大小设置为3像素，如下图：<img alt="" src="/blog/attachment/image/07.jpg" style="width: 500px; height: 248px" /></p><p>&nbsp;&nbsp;之后，再选择&ldquo;描边&rdquo;，设置大小为1像素，位置为&ldquo;内部&rdquo;，颜色为黑色#000000，如下图：<img alt="" src="/blog/attachment/image/08.jpg" style="width: 500px; height: 251px" /><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<strong>5. 添加字体</strong></p><p>&nbsp;&nbsp;<strong>输入文本，设置文字相对水平和垂直居中，字体为<a href="http://font.knowsky.com/down/6513.html" target="_blank"><strong>方正准圆简体</strong></a>，字号36点，加粗平滑，颜色为白色（#FFFFFF），如下图：</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/09.jpg" style="width: 500px; height: 252px" /></strong></p><p>&nbsp;&nbsp;<strong>6. 设置字体样式</strong></p><p>&nbsp;&nbsp;<strong>同样的双击文字图层，打开文字图层样式，设置字体样式，点击&ldquo;投影&rdquo;，设置混合模式为&ldquo;正常&rdquo;，颜色为#3e3e3e，不透明度为100%，角度为90度，距离为1像素，大小为2像素；点击&ldquo;内阴影&rdquo;，设置混合模式为&ldquo;正常&rdquo;，颜色为#454545，不透明度为75%，角度为90度，距离为1像素，大小为2像素，如下图所示：</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/10.jpg" style="width: 500px; height: 344px" /></strong></p><p>&nbsp;&nbsp;<strong>至此，我们就完成链接状态下的按钮背景图，效果如下：<img alt="" src="/blog/attachment/image/11.jpg" style="width: 500px; height: 138px" /></strong></p><p>&nbsp;&nbsp;<strong>7. 悬停背景图</strong></p><p>&nbsp;&nbsp;<strong>制作鼠标悬停状态下的按钮背景图，把图层放入组内，复制组，移动，并重命名，如下图：<img alt="" src="/blog/attachment/image/12.jpg" style="width: 500px; height: 212px" /></strong><br />&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<strong>8.背景图属性</strong></p><p>&nbsp;&nbsp;<strong>修改hover背景图的样式属性，打开背景图的图层样式窗口，选择&ldquo;描边&rdquo;，修改边框颜色为#004d77；选择&ldquo;渐变叠加&rdquo;，修改渐变从#1671a3到#5baedc，如下图：</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/13.jpg" style="width: 500px; height: 269px" /></strong></p><p>&nbsp;&nbsp;<strong>9. 设置字体样式</strong></p><p>&nbsp;&nbsp;<strong>打开字体图层样式，选择&ldquo;投影&rdquo;，修改投影颜色为#207aad；选择&ldquo;内阴影&rdquo;，修改字体颜色为#0d4f74，如下图：</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/14.jpg" style="width: 500px; height: 188px" /></strong></p><p>&nbsp;&nbsp;<strong>10. 图层半透明</strong></p><p>&nbsp;&nbsp;<strong>添加图层半透明效果，按以上步骤修改，鼠标悬停背景图如下，最后是再加上一层半透明层，先添加一个200px X 40px的白色层，置顶并设置白色层的透明度为10%，如下图：</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/15.jpg" style="width: 500px; height: 204px" /></strong></p><p>&nbsp;&nbsp;<strong>最后，我们完成的CSS sprite背景图如下。</strong></p><p>&nbsp;&nbsp;<strong><img alt="" src="/blog/attachment/image/16.jpg" style="width: 500px; height: 173px" /></strong><br />&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<strong><strong>Step2 - HTML/CSS</strong></strong></p><p>&nbsp;&nbsp;<strong>按钮的HTML代码很简单：</strong></p><p>&nbsp;&nbsp;<strong><span class="code">&lt;a class=&rdquo;button&rdquo;&gt;前端档案&lt;/a&gt; </span></strong></p><p>&nbsp;&nbsp;<strong>再通过CSS设置一下背景图片就可以了，CSS代码如下：</strong></p><p>&nbsp;&nbsp;<strong><span class="code">/*链接按钮样式*/<br />&nbsp;&nbsp;.button &#123;<br />&nbsp;&nbsp;width:200px;<br />&nbsp;&nbsp;height:80px;<br />&nbsp;&nbsp;display:block;<br />&nbsp;&nbsp;background:url(bg_button.gif) top no-repeat;<br />&nbsp;&nbsp;text-indent:-9999px;<br />&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;/*按钮悬停样式*/<br />&nbsp;&nbsp;.button:hover&#123;<br />&nbsp;&nbsp;background:url(bg_button.gif) bottom no-repeat;<br />&nbsp;&nbsp;&#125;</span></strong></p><p>&nbsp;&nbsp;<strong>按照我们前面设计的图片，按钮的长宽为200px X 80px，背景图为黑色按钮。这段CSS就能够实现我们示例中的第一种效果（<a href="http://wiky.000a.biz/demo/0421/gradual-change-button.html" target="_blank"><strong>纯CSS效果</strong></a>）。</strong></p><p>&nbsp;&nbsp;<strong><strong>Step3 - JavaScript/jQuery</strong></strong></p><p>&nbsp;&nbsp;<strong>通过JavaScript，我们可以让按钮更加炫酷一些，我们需要在之前基础上加一个&lt;span&gt;元素，作为鼠标悬停时候显示的背景层，那么HTML会在DOM加载完成后修改成为：</strong></p><p>&nbsp;&nbsp;<strong><span class="code">&lt;a class=&rdquo;button&rdquo;&gt;&lt;span class=&rdquo;hover&rdquo;&gt;前端档案&lt;/span&gt;&lt;/a&gt; </span></strong></p><p>&nbsp;&nbsp;<strong>&lt;span&gt;元素在鼠标悬停前是全透明的，鼠标经过时，逐渐不透明，以达到渐变的效果，动画过程如下图：<img alt="" src="/blog/attachment/image/17.jpg" style="width: 500px; height: 249px" /></strong><br />&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;<strong>通过以上分析，我们可以写出jQuery代码如下，在DOM加载完成后，为按钮链接添加&lt;span&gt;层作为鼠标经过时的背景图，在为&lt;span&gt;元素添加鼠标悬停事件，鼠标经过时，渐变至不透明，鼠标离开时，渐变至全透明。</strong></p><p>&nbsp;&nbsp;<strong><span class="code">//把文本包含到&lt;span&gt;元素中，再附加到.button中<br />&nbsp;&nbsp;$(&#39;.jsbutton,.viewbutton,.downloadbutton&#39;).wrapInner(&#39;&lt;span class=&quot;hover&quot;&gt;&lt;/span&gt;&#39;).css(&#39;textIndent&#39;,&#39;0&#39;).each(function () &#123;<br />&nbsp;&nbsp;//先设置&lt;span&gt;元素中全透明，再添加鼠标悬停事件<br />&nbsp;&nbsp;$(&#39;span.hover&#39;).css(&#39;opacity&#39;, 0).hover(function () &#123;<br />&nbsp;&nbsp;$(this).stop().fadeTo(650, 1); //渐变至不透明<br />&nbsp;&nbsp;&#125;, function () &#123;<br />&nbsp;&nbsp;$(this).stop().fadeTo(650, 0); //渐变至全透明<br />&nbsp;&nbsp;&#125;);<br />&nbsp;&nbsp;&#125;); </span></strong></p><p>&nbsp;&nbsp;<strong>至此，我们完成了JS代码，还要注意一个步骤，CSS修改</strong></p><p>&nbsp;&nbsp;<strong><strong>Step4 - CSS修改</strong></strong></p><p>&nbsp;&nbsp;<strong>在纯CSS效果的示例中，我们是利用:hover伪类来实现sprite图片的切换，当我们使用jQuery后，是引入一个&lt;span&gt;层作为鼠标经过时背景图，所以CSS需要做如下修改：</strong></p><p>&nbsp;&nbsp;<strong><span class="code">/*之前的按钮悬停样式*/<br />&nbsp;&nbsp;.button:hover&#123;<br />&nbsp;&nbsp;background:url(bg_button.gif) bottom no-repeat;<br />&nbsp;&nbsp;&#125; </span></strong></p><p>&nbsp;&nbsp;<strong>修改为 </strong></p><p>&nbsp;&nbsp;<strong><span class="code">/*不需要在设置:hover的样式，而是设置span.hover的样式*/<br />&nbsp;&nbsp;.button span.hover &#123;<br />&nbsp;&nbsp;/*注意要使用绝对定位*/<br />&nbsp;&nbsp;position: absolute;<br />&nbsp;&nbsp;display: block;<br />&nbsp;&nbsp;width:200px;<br />&nbsp;&nbsp;height:80px;<br />&nbsp;&nbsp;background:url(bg_button.gif) bottom no-repeat;<br />&nbsp;&nbsp;text-indent:-9999px;<br />&nbsp;&nbsp;&#125; </span></strong></p><p>&nbsp;&nbsp;<strong>这个文件只能在登入之后下载。请先 <a href="http://www.206c.net/blog/login.php?job=register">注册</a> 或 <a href="http://www.206c.net/blog/login.php">登入</a></strong></p>
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/76/</link>
<title><![CDATA[jQuery 1.4官方文档中文版]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Fri, 30 Apr 2010 09:01:39 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/76/</guid> 
<description>
<![CDATA[ 
	<p><a href="http://paranimage.com/tag/jquery/" target="_blank">jquery</a>&nbsp;&nbsp;&nbsp;&nbsp; 1.4已于一月多前发布，下面是来自coolnalu翻译的一份<strong>jQuery官方文档中文版</strong>，<a href="http://jquery14.com/day-01" target="_blank">14 Days of jQuery的Day&nbsp;&nbsp;One</a>, 详细介绍了jQuery 1.4各种更新和新特性。为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery <a href="http://paranimage.com/category/dede/javascript/" target="_blank">javascript</a>库的最新主要版本!&nbsp;&nbsp;这个版本包含了大量的编程，测试，和记录文档的工作，我们为此感到很骄傲。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-R&eacute;mi Babe, Ariel Flesler,&nbsp;&nbsp;Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl&nbsp;&nbsp;Swedberg, and Aaron Quint。谢谢他们在修复BUG和完成这次发布上所做的工作。</p> <h3>下载(Downloading)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 按照惯例，我们提供了两份jQuery的拷贝，一份是最小化的(我们现在采用<a href="http://code.google.com/closure/compiler/" target="_blank">Google&nbsp;&nbsp;Closure</a>作为默认的压缩工具了)，一份是未压缩的(供纠错或阅读)。 </p> <ul>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://code.jquery.com/jquery-1.4.min.js" target="_blank">jQuery 压缩</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (23kb <a href="http://www.julienlecomte.net/blog/2007/08/13/" target="_blank">Gzipped</a>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://code.jquery.com/jquery-1.4.js" target="_blank">jQuery 常规</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (154kb)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li> </ul> <p>&nbsp;&nbsp;&nbsp;&nbsp; 另外，Google也在他们的服务器上<a href="http://code.google.com/apis/ajaxlibs/documentation/index.html" target="_blank">放置了一份jQuery的拷贝</a>。这份拷贝会自动的最小化然后压缩 &ndash;&nbsp;&nbsp;并且放在Google最快的缓存服务器上。 </p> <ul>&nbsp;&nbsp;&nbsp;&nbsp; <li><a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" target="_blank">http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js</a></li> </ul> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以在你的站点上直接引用上面的URL，这样就可以享受迅速加载jQuery的性能优势了。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 就jQuery1.4来说，我们努力的减少大规模升级中的麻烦 &ndash;&nbsp;&nbsp;通过保持所有public函数的签名。即使如此，还请下面可能会造成问题的变更列表，这样能够了解哪些变更可能会给你的应用造成问题。 </p> <h2>(功能) Features</h2> <p>&nbsp;&nbsp;&nbsp;&nbsp; 下面的内容概括了jQuery1.4里加入的变更和功能。另外所有的变更都已经在<a href="http://api.jquery.com/category/version/1.4/" target="_blank">jQuery&nbsp;&nbsp;1.4 的文档</a>里记录了。 </p> <h3>热门方法经过了性能上的大&rdquo;检修&rdquo;</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 不少比较热门的和常用的jQuery方法在1.4里被重写了。(译注:重写了方法的内部，外部调用没有大幅度改变)&nbsp;&nbsp;我们分析源码的时候发现我们能够获得大幅的性能提升，通过把jQuery和自己比较: 查看内部函数被调用了多少次，然后努力<a href="http://ejohn.org/blog/function-call-profiling/" target="_blank">降低 源码的复杂度</a>(译注:计算机算法中的Complexity) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在1.4版里我们显著的降低了大部分热门jQuery方法的的复杂度。 </p> <h3>更易用的设置函数 (Easy Setter Functions)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 算来已经有一阵了，你们已经可以给<a href="http://api.jquery.com/attr" target="_blank">.attr()</a>传 递一个函数，然后这个函数的结果会被用来赋给相应的<a href="http://paranimage.com/category/dede/html/" target="_blank">html</a>属 性(attribute)上。这个功能现在被移植到所有的设置函数了: <a href="http://api.jquery.com/css" target="_blank">.css()</a>, <a href="http://api.jquery.com/attr" target="_blank">.attr()</a>, <a href="http://api.jquery.com/val" target="_blank">.val()</a>, <a href="http://api.jquery.com/html" target="_blank">.html()</a>, <a href="http://api.jquery.com/text" target="_blank">.text()</a>, <a href="http://api.jquery.com/append" target="_blank">.append()</a>, <a href="http://api.jquery.com/prepend" target="_blank">.prepend()</a>, <a href="http://api.jquery.com/before" target="_blank">.before()</a>, <a href="http://api.jquery.com/after" target="_blank">.after()</a>, <a href="http://api.jquery.com/replaceWith" target="_blank">.replaceWith()</a>, <a href="http://api.jquery.com/wrap" target="_blank">.wrap()</a>, <a href="http://api.jquery.com/wrapInner" target="_blank">.wrapInner()</a>, <a href="http://api.jquery.com/offset" target="_blank">.offset()</a>, <a href="http://api.jquery.com/addClass" target="_blank">.addClass()</a>, <a href="http://api.jquery.com/removeClass" target="_blank">.removeClass()</a>,&nbsp;&nbsp;以及 <a href="http://api.jquery.com/toggleClass" target="_blank">.toggleClass()</a>. </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 另外, 对于下面几个方法，当前的值会被作为第2个变量传递给这个函数。<a href="http://api.jquery.com/css" target="_blank">.css()</a>, <a href="http://api.jquery.com/attr" target="_blank">.attr()</a>, <a href="http://api.jquery.com/val" target="_blank">.val()</a>, <a href="http://api.jquery.com/html" target="_blank">.html()</a>, <a href="http://api.jquery.com/text" target="_blank">.text()</a>, <a href="http://api.jquery.com/append" target="_blank">.append()</a>, <a href="http://api.jquery.com/prepend" target="_blank">.prepend()</a>, <a href="http://api.jquery.com/offset" target="_blank">.offset()</a>, <a href="http://api.jquery.com/addClass" target="_blank">.addClass()</a>, <a href="http://api.jquery.com/removeClass" target="_blank">.removeClass()</a>,&nbsp;&nbsp;以及 <a href="http://api.jquery.com/toggleClass" target="_blank">.toggleClass()</a>. </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 这样代码就可以这样写: </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <span class="code">// 找出所有A标签里的'&amp;'字符，然后用一个span标签包围&nbsp;&nbsp;$('a').html(function(i,html)&#123; return html.replace(/&amp;/gi,'&amp;');&nbsp;&nbsp;&#125;); // 给一些链接的title属性加些信息 $('a[target]').attr(&quot;title&quot;, function(i,title)&#123;&nbsp;&nbsp;return title + &quot; (新窗口打开)&quot;; &#125;);</span> </p>  <h3><a href="http://paranimage.com/tag/ajax/" target="_blank">ajax</a></h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>嵌套参数的序列化</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.param/" target="_blank">jQuery.param()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/50d78e7658382d2a2f5149cae7a6572f78ce403f" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/67089eedf6f84acd9c16ea2a6dadadf7b13a7c84" target="_blank">Commit 2</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery 1.4在jQuery.param方法里加入了嵌入参数序列化的支持，借用了PHP编程里兴起的，而后又被Ruby on&nbsp;&nbsp;Rails推广开来的方式。&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; 举例来说，&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#123;foo: [&quot;bar&quot;, &quot;baz&quot;]&#125; 会被序列化为&nbsp;&nbsp;&ldquo;foo[]=bar&amp;foo[]=baz&rdquo;. </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在jQuery 1.3版里, &#123;foo: [&quot;bar&quot;, &quot;baz&quot;]&#125; 曾被序列化为 &ldquo;foo=bar&amp;foo=baz&rdquo;.&nbsp;&nbsp;但是，这样做没用办法将只含有一个元素的阵列编码。如果你需要旧的序列化方式，你可以设置传统Ajax设置来进行切换。(使用 jQuery.ajaxSettings.traditional进行全局切换，或者根据情况单独切换。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 总共有3种方式可以切换到旧的序列化方式: </p> <span class="code">// 全局改变序列化方式 (使用旧的)&nbsp;&nbsp;jQuery.ajaxSettings.traditional = true; // 指定情况使用旧的序列化方式 jQuery.param(&nbsp;&nbsp;stuff, true ); // 针对一个单独的Ajax请求使用旧的序列化方式 $.ajax(&#123; data: stuff,&nbsp;&nbsp;traditional: true &#125;);</span> <p>&nbsp;&nbsp;&nbsp;&nbsp; 更多信息参见: <a href="http://api.jquery.com/jQuery.param/" target="_blank">jQuery.param()&nbsp;&nbsp;文档</a>, <a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/39518945047413f1185682078043e70e0c5c9091" target="_blank">Commit</a>, <a href="http://github.com/jquery/jquery/blob/master/src/ajax.js#L175" target="_blank">Code</a> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>JSON和脚本类型通过&rdquo;content-type&rdquo;自动识别。</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax 文档</a>, <a href="http://github.com/jquery/jquery/commit/787f271052220c20787104f0eba6441aedac22ff" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/6861b5d4eb16222ed5ea623af6ce75362b55d1d4" target="_blank">Commit 2</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如果一个Ajax请求的回复的媒体类型是JSON(application/json),&nbsp;&nbsp;dataType默认设为&rdquo;json&rdquo;(如果dataType没有被指明)。另外，如果回复的媒体类型是&nbsp;&nbsp;Javascript(application/javascript),&nbsp;&nbsp;dataType默认设为&rdquo;script&rdquo;(同样，如果dataType没有明确指明), 这种情况下，脚本会自动运行。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>加入了Etag的支持</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/28ab4d32247943e1ae3409b23fe69303df0bc9eb" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 默认设置下,&nbsp;&nbsp;jQuery会忽略Ajax请求的&rdquo;Last-Modified&rdquo;页头。这样做是为了忽略浏览器的缓存。设置ifModified:true就可以使&nbsp;&nbsp;jQuery使用可用的缓存。jQuery1.4还会发出&rdquo;If-None-Match&rdquo;的页头如果你设置了ifModified选项。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>严格JSON模式，本地的JSON.parse方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/90a87c03b4943d75c24bc5e6246630231d12d933" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/308d6cdad023da190ace2a698ee4815ed8dad9c5" target="_blank">Commit 2</a>, <a href="http://github.com/jquery/jquery/commit/44e6beb10304789044de2c5a58f5bb82e8321636" target="_blank">Commit 3</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery&nbsp;&nbsp;1.3和以前的版本曾使用Javascript的eval对引入的JSON解析。1.4版则会使用本地的JSON解析器，前提是如果有本地的解析器可用。 它也会对引入的JSON进行校验。所以在<a href="http://api.jquery.com/jQuery.getJSON" target="_blank">jQuery.getJSON</a>方法里，或当一个Ajax请求的dataType是&rdquo;json&rdquo;的时 候，jQuery会拒绝不合标准的JSON(例如&#123;foo: &quot;bar&quot;&#125;)。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>序列化HTML5的元素</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.param/" target="_blank">jQuery.param()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/b31b9bd756a1489c3b1b856ed8b624c55da9e02f" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 新的<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#attr-input-type-keywords" target="_blank">HTML5输入方法</a>&nbsp;&nbsp;&nbsp;&nbsp; (比如&rsquo;datetime&rsquo;和&rsquo;range&rsquo;)在序列化<a href="http://api.jquery.com/serialize" target="_blank">.serialize()</a>一 个表单的时候会被包括在内。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>Ajax请求的环境</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/183f37e4b4128af7ba096ac40046768b84b6d66e" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以附加一个&rdquo;环境&rdquo;到Ajax请求上，所有的回调函数里都会拥有同样的&rdquo;环境&rdquo;设置(这样可以简化你的代码，尽可能避免使用闭合,或是其他对 象)。 </p> <span class="code">jQuery.ajax(&#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; url: &quot;test.html&quot;,&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; context: document.body,&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; success: function()&#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; jQuery(this).addClass(&quot;done&quot;);&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;); </span> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>请求成功回调函数的第三个参数会被设为原始的XHR对象</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/c2101245c07afdb831b0c79869c7263420407b67" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 所有的Ajax请求的成功回调函数现在都会收到原始的XMLHttpRequest对象，作为第三个参数。之前这个XHR对象只能通过$.ajax 一类方法的返回值来获取。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>明确设置&rdquo;Content-Type&rdquo;</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/25b0ba9f9612583033b902a0e40345463a3a71d0" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在1.3版，如果没有实际数据发送，<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax</a>的contentType会被忽略。1.4版里，contentType将总是和请求一 同发送。这修复了某些后台凭靠&rdquo;Content-Type&rdquo;页头判断回复类别所造成的问题。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>明确设置JSONP回调函数的名字</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax 文档</a>, <a href="http://github.com/jquery/jquery/commit/fbc73d45b487dd863886c7fd3f0af1fd4dec261b" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以使用<a href="http://api.jquery.com/jQuery.ajax/" target="_blank">jQuery.ajax()</a>方 法的jsonpCallback选项，通过名字来指定JSONP的回调函数。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>防止启动前跨域XHR</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/a7678267d848fcef8775c8b9f4fa3e507b8cc5f4" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 跨域Ajax(针对提供支持的浏览器)将更易用，因为默认设置下，启动前XHR被阻止了。(TODO) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.ajax()现在使用&rdquo;onreadystatechange&rdquo;事件替换了计时器</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/fe6c86d53046b0f4d648f61c0b8e75387af65152" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 使用&rdquo;onreadystatechange&rdquo;替换了轮流探询，Ajax请求现在将使用更少的资源 </p> <h3>元素属性 (Attributes)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; .<a href="http://paranimage.com/category/dede/css/" target="_blank">CSS</a>()<strong>和</strong>.attr()<strong> 的性能被优化了。</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; .attr()<strong>方法多了一个设置函数作为参数</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/attr/" target="_blank">.attr() 文档</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你不但可以将一个函数用在.attr()里，还可以在这个函数里使用属性的当前值。 </p> <span class="code">jQuery('&lt;img&nbsp;&nbsp;xsrc=&quot;enter.png&quot; alt=&quot;enter your name&quot; /&gt;')&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; .attr(&quot;alt&quot;,&nbsp;&nbsp;function(index, value) &#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; return &quot;Please, &quot; + value;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;); </span> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.val( Function )</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/val/" target="_blank">.val() 文档</a>) </p> <span class="code">&lt;input class=&quot;food&quot; type='text' data-index=&quot;0&quot; /&gt;&nbsp;&nbsp;&lt;input class=&quot;food&quot; type='text' data-index=&quot;1&quot; /&gt;</span> <span class="code">&nbsp;&nbsp;&nbsp;&nbsp; <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery(&quot;input:text.food&quot;).hide();&nbsp;&nbsp;&nbsp;&nbsp; </p>&nbsp;&nbsp;&nbsp;&nbsp; <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery(&quot;&lt;ul class='sortable'&gt;&lt;li&gt;Peanut&nbsp;&nbsp;Butter&lt;/li&gt;&lt;li&gt;Jelly&lt;/li&gt;&lt;/ul&gt;&quot;&nbsp;&nbsp;&nbsp;&nbsp; </p>&nbsp;&nbsp;&nbsp;&nbsp; <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .sortable()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .bind(&quot;endsort&quot;, function() &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(&quot;:text.food&quot;).val(function() &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $(&quot;ul.sortable li:eq(&quot; +&nbsp;&nbsp;$(this).attr(&quot;data-index&quot;)&nbsp;&nbsp;+ &quot;)&quot;).text();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;);&nbsp;&nbsp;&nbsp;&nbsp; </p> </span> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>text和CDATAHTML元素也支持.text()方法了</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/text/" target="_blank">.text() 文档</a>, <a href="http://github.com/jquery/jquery/commit/b30af34f28074b491929445f5aad3d62c63e772f" target="_blank">Commit</a>) </p>  <h3>核心 (Core)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>快捷元素创建</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery/#jQuery2" target="_blank">jQuery() 文档</a>, <a href="http://github.com/jquery/jquery/commit/d40083c866738727aa7ffd7f13d2955bc9575d5e" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 现在当你需要使用jQuery函数创建一个元素的时候，你可以同时附递一个对象来指定属性值和事件: </p> <pre><span class="code"><p>jQuery(&quot;</p><p>&quot;, &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;id: &quot;foo&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;css: &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height: &quot;50px&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width: &quot;50px&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color: &quot;blue&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor: &quot;#ccc&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;,<br />&nbsp;&nbsp;&nbsp;&nbsp;click: function() &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).css(&quot;backgroundColor&quot;, &quot;red&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&#125;).appendTo(&quot;body&quot;);<br /></p></span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; 对象里的键值的名字与相关的jQuery的方法的名字是对应的，对象的值会被作为参数传递给jQuery的方法。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; (译注:譬如$(&quot;&lt;a&gt;link&lt;/a&gt;&quot;,&nbsp;&nbsp;&#123;css:&#123;background:&quot;#ccc&quot;&#125;&#125;);相当 于$(&quot;&lt;a&gt;link&lt;/a&gt;&quot;)).css(&quot;background&quot;, &quot;#ccc&quot;); </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.eq(-N), .get(-N) (负指数)</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/eq/" target="_blank">.eq() 文档</a>, <a href="http://api.jquery.com/get/" target="_blank">.get() 文档</a>, <a href="http://github.com/jquery/jquery/commit/e532dfe5228217f55a33122a4438fd70522dbb4b" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你现在可以在.get()和.eq()方法里使用负数。譬如，你要选择倒数第2个div元素，或者是倒数第2个DOM对象: </p> <pre>$(&quot;div&quot;).eq(-2);<br /><br /></pre> <h3>样式 (CSS)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.css()方法在性能是以前的2倍。</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; .addClass()<strong>, </strong>.removeClass()<strong>, 和 </strong>.hasClass()<strong>这 几个方法在性能上是以前的3倍</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.toggleClass()可以切换多个css类了</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/toggleClass/" target="_blank">.toggleClass()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/5e6e53835e552920db4f88ac0c9eca71aaacbef0" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以通过<a href="http://api.jquery.com/toggleClass/" target="_blank">.toggleClass()</a>调 用多个css类的名字来切换他们。 </p> <span class="code">$(&quot;div&quot;).toggleClass(&quot;current active&quot;);</span> <h3>数据</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.data()返回对象, .data(Object)设置对象</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/data/" target="_blank">.data() 文档</a>, <a href="http://github.com/jquery/jquery/commit/d36d224cc52e70d837306d33a03f517ef72abc60" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8" target="_blank">Commit 2</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 有时候你可能需要在一个元素上附加一个复杂的对象。一个常见的例子是你需要从一个元素身上复制所有的数据到令一个元素上。在jQuery&nbsp;&nbsp;1.4里, 不使用任何参数调用<a href="http://api.jquery.com/data/" target="_blank">.data()</a>时，.data 会返回一个复杂对象。(译注: 包含所有键-值对的对象。) 调用<a href="http://api.jquery.com/data/" target="_blank">.data(Object)</a>&nbsp;&nbsp;&nbsp;&nbsp; 则会设置这个对象。注意这个对象还包括了元素上绑定的事件，所以用的时候要小心。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>除非需要, 不然不会创建数据缓存。</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/c4f144eeffd94c745839b0ced2de9c62cfa9f075" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/97e134fe80a734b97170bf43c9459511f4e165c7" target="_blank">Commit 2</a>, <a href="http://github.com/jquery/jquery/commit/67d445a703491c90a7d3c46be34bcdceb4d1c896" target="_blank">Commit 3</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery使用一个独特的自定义属性来获取特定元素上附加的数据。当查找数据，但是没有新加的数据的时候，jQuery会尽量避免创建这个自定义 属性。这样可能会提高性能，同时还会在这种情况下避免污染DOM。 </p> <h3>效果 (Effects)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>单个属性缓进缓出</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/animate/#per-property-easing" target="_blank">Per-property Easing 文档</a>, <a href="http://github.com/jquery/jquery/commit/93fdbeb963a9c350f807818c7cc99982942a92f3" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 除了能够给一个动态效果指定缓进出函数外，你现在可以指定每个属性的缓进出函数了。James Padolsey的<a href="http://james.padolsey.com/javascript/easing-in-jquery-1-4a2/" target="_blank">blog上</a>有更进一步的信息和演示。 </p> <span class="code">$(&quot;#clickme&quot;).click(function() &#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; $(&quot;div&quot;).animate(&#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; width: [&quot;+=200px&quot;, &quot;swing&quot;],&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; height: [&quot;+=50px&quot;, &quot;linear&quot;],&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;, 2000, function() &#123;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; $(this).after(&quot;&lt;div&gt;Animation complete.&lt;/div&gt;&quot;);&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;);&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#125;); </span> <br /> <br />  <br /> <br /> <h3>事件 (Events)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新方法: jQuery.proxy()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.proxy/" target="_blank">jQuery.proxy()&nbsp;&nbsp;Documenation</a>, <a href="http://github.com/jquery/jquery/commit/66975de2d249643779e2b3daad0457f7f5f92508" target="_blank">Commit 1</a>, <a href="http://github.com/jquery/jquery/commit/1d2b1a57dae0b73b3d99197f73f4edb623b5574a" target="_blank">Commit 2</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如果你需要保证一个函数内的&rdquo;this&rdquo;恒定地保持某个值, 你可以用jQuery.proxy获得一个相同作用域的函数。 </p> <pre><span class="code"><p>var obj = &#123;<br />&nbsp;&nbsp;name: &quot;John&quot;,<br />&nbsp;&nbsp;test: function() &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;alert( this.name );<br />&nbsp;&nbsp;&nbsp;&nbsp;$(&quot;#test&quot;).unbind(&quot;click&quot;, obj.test);<br />&nbsp;&nbsp;&#125;<br />&#125;;</p><p>$(&quot;#test&quot;).click( jQuery.proxy( obj, &quot;test&quot; ) );</p></span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>多个事件绑定</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/bind" target="_blank">.bind() 文档</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以通过递入一个对象来一次性绑定元素的多个事件。 </p> <pre><span class="code">$(&quot;div.test&quot;).bind(&#123;<br />&nbsp;&nbsp;click: function()&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass(&quot;active&quot;);<br />&nbsp;&nbsp;&#125;,<br />&nbsp;&nbsp;mouseenter: function()&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass(&quot;inside&quot;);<br />&nbsp;&nbsp;&#125;,<br />&nbsp;&nbsp;mouseleave: function()&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;$(this).removeClass(&quot;inside&quot;);<br />&nbsp;&nbsp;&#125;<br />&#125;);</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>&lsquo;change&rsquo;和&rsquo;submit&rsquo;事件规范化</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/change" target="_blank">Change 文档</a>, <a href="http://api.jquery.com/submit" target="_blank">Submit 文档</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 普通的或是即时的change和submit事件可以在各种浏览器上稳定工作了。我们覆盖了IE里的change和submit,&nbsp;&nbsp;替换为与其他浏览器相同的事件。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新的事件: &lsquo;focusin&rsquo; and &lsquo;focusout&rsquo;</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/focusin/" target="_blank">.focusin() 文档</a>, <a href="http://api.jquery.com/focusout/" target="_blank">.focusout()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/03481a52c72e417b01cfeb499f26738cf5ed5839" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; focusin和focusout在一般情况下等同于focus和blur,&nbsp;&nbsp;但是多了向父元素传递的作用。如果你自己编写你的事件代理模式(TODO),&nbsp;&nbsp;这个功能将对你有很大帮助。请注意对focus和blur使用live()方法将不会起作用; 在<a href="http://paranimage.com/category/dede/" target="_blank">设计</a>的时候我们根 据 <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html" target="_blank">DOM事件规范</a>决定不使其向父元素传递事件。 </p> <pre><span class="code">$(&quot;form&quot;).focusout(function(event) &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;var tgt = event.target;<br />&nbsp;&nbsp;&nbsp;&nbsp;if (tgt.nodeName == &quot;INPUT&quot; &amp;&amp; !tgt.value) &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(tgt).after(&quot;nothing here&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&#125;);</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>所有的事件都可以成为即时事件</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/live" target="_blank">.live() 文档</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 除了<a href="http://api.jquery.com/ready" target="_blank">ready</a>, <a href="http://api.jquery.com/focus" target="_blank">focus</a>&nbsp;&nbsp;&nbsp;&nbsp; (用focusin), 和 <a href="http://api.jquery.com/blur" target="_blank">blur</a>&nbsp;&nbsp;&nbsp;&nbsp; (用focusout)以外, 所有能用.bind()绑定的事件都可以成为即时事件。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在live()所支持的事件里，我们对能够支持下面这几个额外的事件感到尤其骄傲。通过.live()里的事件代理,&nbsp;&nbsp;1.4版实现了对change, submit, focusin, focusout, mouseenter,&nbsp;&nbsp;以及mouseleave事件的跨浏览器支持。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 注: 如果你需要即时的focus事件，你应该用focusin和focusout, 而不要用focus和blur, 因为就像前面提到的,&nbsp;&nbsp;focus和blur不向上传递。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 还有, live()也接受数据对象作为参数了, 同bind()方法一样 (<a href="http://github.com/jquery/jquery/commit/71efbdd3b26f3a283f8d4bfdcc7b6343142027b9" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>live/die也支持环境变量了</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/30e760b63fd6d82f30833cd2864f245dd9594cd9" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 现在可以在绑定事件的时候给选择符指定一个环境。如果环境被指定了, 只有属于这个环境下的元素才会被绑定事件。在创建即时事件的时候,&nbsp;&nbsp;元素本身不需要已经被定义, 但是环境必须被创建。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>确定ready事件至少含有</strong>body<strong>元素</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/262fcf7b7b919da1564509f621cf7480a5d5572b" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery现在会检查body是不是存在，如果不存在，会对body进行轮流探询。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>在不需要手动处理内存溢出的非IE浏览器中, 卸载的速度提高了。</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/f3474c00cd6d9e5fd61b6ef1562003e9986ad67d" target="_blank">Commit</a>) </p> <h3>DOM操作 (Manipulation)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在jQuery 1.4里一系列的DOM操作方法的性能都有巨大的提升。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong><a href="http://api.jquery.com/append" target="_blank">.append()</a>, <a href="http://api.jquery.com/prepend" target="_blank">.prepend()</a>, <a href="http://api.jquery.com/before" target="_blank">.before()</a>,&nbsp;&nbsp;and <a href="http://api.jquery.com/after" target="_blank">.after()</a>的性 能提高了。</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong><a href="http://api.jquery.com/html" target="_blank">.html()</a>的 性能提高到以前的3倍。</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.remove()和.empty()的速度则达到以前的4倍.</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新方法: .detach()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/detach/" target="_blank">.detach() 文档</a>, <a href="http://github.com/jquery/jquery/commit/7a67f8897d3c2ed97254f0fdb969be14e77962d1" target="_blank">Commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; detach()将一个元素从DOM里移除, 但是并不卸载关联的事件处理函数。这个方法可用于暂时性的将一个元素移除，执行相关操作，然后返回。 </p> <pre><span class="code">var foo = $(&quot;#foo&quot;).click(function() &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;// 相关操作<br />&#125;);<br />foo.detach();<br />// foo保留了相关处理函数<br />foo.appendTo(&quot;body&quot;);</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新的unwrap()方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/unwrap/" target="_blank">documentation</a>, <a href="http://github.com/jquery/jquery/commit/69e6e53555f21f07b534f1169298f7b33011bb4b" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; unwrap()方法拿到一个已知的父元素的子元素，然后将父元素用子元素替换。(译注: 将子元素从&rdquo;包裹&rdquo;里拿出来,&nbsp;&nbsp;因名unwrap)。如此这般: </p> <pre><span class="code">&lt;body&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;annie&lt;/p&gt; &lt;p&gt;davey&lt;/p&gt; &lt;p&gt;stevie&lt;/p&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&lt;/body&gt;</span></pre> <pre><span class="code">$('div').unwrap();</span></pre> <pre><span class="code">&lt;body&gt;<br />&nbsp;&nbsp; &lt;p&gt;annie&lt;/p&gt; &lt;p&gt;davey&lt;/p&gt; &lt;p&gt;stevie&lt;/p&gt;<br />&lt;/body&gt;</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>domManip方法里的缓存</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/8db967e9d52407c8e76d81b9d472800667f6fa29" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery会将jQuery(&quot;&lt;div&gt;&quot;)和.after(&quot;&lt;div&gt;&quot;)一类方法创建的节点记入缓存。这样,&nbsp;&nbsp;对于利用这些方法, 使用字符串进行DOM操作的页面，性能将有极大的提高。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>无连接的节点间的before, after, replaceWith操作</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/173c1477ae6efc4c2eeb7131ba0646c4e1323975" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 现在你可以对还没有放置到DOM Tree上的节点进行before, after,&nbsp;&nbsp;和replaceWith的操作了。意味着你可以先对节点进行复杂的操作,&nbsp;&nbsp;待完成后再放到合适的DOM位置上。这样也能尽量避免操作过程中造成重新排版。 </p> <pre><span class="code">jQuery(&quot;&lt;div&gt;&quot;).before(&quot;&lt;p&gt;Hello&lt;/p&gt;&quot;).appendTo(&quot;body&quot;)</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; .clone(true)<strong> 也会复制关联数据</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/clone/" target="_blank">clone 文档</a>, <a href="http://github.com/jquery/jquery/commit/4b70f006f579fba24a882d80ca67f1971dbb4922" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 1.3版中, .clone(true)虽然也是深度复制, 但是没有复制关联的数据。1.4版里，它则会复制数据,&nbsp;&nbsp;同时还包括所有的事件。这点上和jQuery.extend在语义想同的, 所以普通对象和阵列会被复制, 但是自定义的对象则不会。 </p>  <h3>位移 (Offset)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.offset( coords &#124; Function )</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/offset/" target="_blank">.offset() 文档</a>, <a href="http://github.com/jquery/jquery/commit/daffb954e397bd5d9f8e9aaedab6c0baa9609e1e" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 现在可以设置元素的位移了! 和所有的设置函数一样, offset也可以接受一个函数作为第二个参数。 </p> <h3>队列 (Queueing)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 队列经历了一次大修, 使用队列会比使用默认的fx更易掌握。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新的 .delay() 方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/delay/" target="_blank">.delay() 文档</a>, <a href="http://github.com/jquery/jquery/commit/bbd933cbfe6d31a749cb336d7a84155ccfab247f" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; .delay()方法会根据参数滞后若干毫秒执行队列里剩下的对象。默认的它会使用&rdquo;fx&rdquo;队列。但你可以选择性的通过delay方法的第二个参数 选择其他队列。(译注:每个队列都以一个名字识别。) </p> <pre><span class="code">$(&quot;div&quot;).fadeIn().delay(4000).fadeOut();</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>队列里的</strong>next (<a href="http://api.jquery.com/queue/" target="_blank">.queue() 文档</a>, <a href="http://github.com/jquery/jquery/commit/89b4bc53ca0ca3d4e5c80b94ce92b09cc34af8ef" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery 1.4版里, 当队列里的一个函数被调用的时候，第一个参数会被设为另一个函数。当后者被调用的时候,&nbsp;&nbsp;会自动排除队列里的下一个对象, 以此来推动队列到下一步。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="width: 443px; height: 174px" class="code">jQuery(&quot;div&quot;).queue(&quot;ajax&quot;,&nbsp;&nbsp;function(next) &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var self = this;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery.getJSON(&quot;/update&quot;,&nbsp;&nbsp;function(json) &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(self).html(json.text);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;).queue(&quot;ajax&quot;,&nbsp;&nbsp;function() &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).fadeIn();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;);&nbsp;&nbsp;&nbsp;&nbsp; </span> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.clearQueue()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/clearQueue/" target="_blank">clearQueue 文档</a>, <a href="http://github.com/jquery/jquery/commit/d857315967a1cc07b73924bbdf2eb12f4f910c45" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 队列可以被清空了。这个方法会移除队列里所有未执行的函数,&nbsp;&nbsp;但不会移除正在运行的函数。无参数的情况下调用.clearQueue()方法将会清空默认的&rdquo;fx&rdquo;队列。 </p> <h3>选择符 (Selectors)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>&ldquo;#id p&rdquo;效率更高</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jeresig/sizzle/commit/c5c18ae5f17f11b39b7f261633e4bfc5ef3e99d7" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 所有以ID开头的选择符都得到了优化, 能够在瞬间得到返回值。所有以ID为开头的选择符速度将一直快于其他选择符。 </p> <h3>页面遍访 (Traversing)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.index(), .index(String)</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/index/" target="_blank">index 文档</a>, <a href="http://github.com/jquery/jquery/commit/ffd457d4561eb1a6653aaef90f92a3b3010b9139" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; .index() 方法经过重写, 变得更加直观和灵活。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你可以获得一个元素相对于同父元素的指数: </p> <pre><span class="code">// 计算第一个 &lt;li&gt; 元素在它所有的同父元素中的指数:<br />$(&quot;li.current&quot;).index()</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; 你也可以获得一个元素在一个jQuery元素集合中的指数, 这个集合可以用一个选择符或者是一个DOM元素来指定: </p> <pre><span class="code">// 计算这个 &lt;h3 id=&quot;more-info&quot;&gt; 元素在页面上所有 &lt;h3&gt; 元素里的指数:<br />$(&quot;#more-info&quot;).index(&quot;h3&quot;)</span></pre> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新的.has()方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/has/" target="_blank">has 文档</a>, <a href="http://github.com/jquery/jquery/commit/4e27f17007c2329e31b449e61bb31197b90a37f1" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 这个方法相当于选择符里的:has()过滤法。它拿到一个jQuery集合,返回含有指定选择符的元素。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>新的 .nextUntil(), .prevUntil(), .parentsUntil() 方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/nextUntil/" target="_blank">.nextUntil() 文档</a>, <a href="http://api.jquery.com/prevUntil/" target="_blank">.prevUntil()&nbsp;&nbsp;文档</a>, <a href="http://api.jquery.com/parentsUntil/" target="_blank">.parentsUntil()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/2b481b93cfca62f95aa7005e7db651456fa08e65" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 新的&rdquo;until&rdquo;方法类似于.nextAll(), .prevAll(), 和.parents()。区别是可以用一个选择符来停止元素探索。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.add(String, Element)</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://jquery14.com/day-01/%3C/p%3E%3Cp%3Ehttp://api.jquery.com/add/%3C/p%3E%3Cp%3E" target="_blank">.add() 文档</a>, <a href="http://jquery14.com/day-01/%3C/p%3E%3Cp%3Ehttp://github.com/jquery/jquery/commit/b0fe380cf89564305646bbd55d1fd7bd210fd591%3C/p%3E%3Cp%3E" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 可以给.add()方法指定环境了。这个功能可以用于在一个调用链中加入和操作额外元素(比如Ajax请求里返回的新元素)。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>.closest(filter, DOMElement)</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/closest/" target="_blank">.closest() 文档</a>, <a href="http://github.com/jquery/jquery/commit/d6991fa273515a8503692324499edcc71b5c3f64" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 可以通过closest方法的第2个参数设置一个DOMElement环境。给closest设置一个环境一般能够提高这个方法的运行速度。这个优 化也适用live(), 因为这个方法内部调用了closest()。 </p> <h3>常用工具 (Utilities)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.isEmptyObject()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.isEmptyObject/" target="_blank">jQuery.isEmptyObject()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/a38a5cd531a328319f8b7f3f33a84044b54591ce" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如果对象,em&gt;没有任何属性, 该方法将返回true。jQuery.isEmptyObject()方法不对参数进行任何检查,&nbsp;&nbsp;所以请保证参数是一个对象。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.isPlainObject()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.isPlainObject/" target="_blank">jQuery.isPlainObject()</a>, <a href="http://github.com/jquery/jquery/commit/4b55e94d0849568a2fd121952f13a9d6571c731f" target="_blank">commit</a>&nbsp;&nbsp;&nbsp;&nbsp; ) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如果一个对象是通过字符创建的(译注:&#123;&#125;),jQuery.isPlainObject()返回true;&nbsp;&nbsp;如果对象是其他类别的对象(译注:如new Object())或者是基本类型, 则返回false。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.contains()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.contains/" target="_blank">jQuery.contains()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/4e27f17007c2329e31b449e61bb31197b90a37f1" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如果两个参数都是DOM节点，并且第二个节点是嵌套在第一个节点内部的话,&nbsp;&nbsp;jQuery.contains()返回true。反之返回false。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.noop</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.noop/" target="_blank">jQuery.noop()&nbsp;&nbsp;文档</a>, <a href="http://github.com/jquery/jquery/commit/6cb2945837ccca55204191a8e7a70b2b2486c28e" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 是个空的函数, 可以用在必须要有一个函数的情况下。(译注: noop是No Operation的意思。) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.unique()</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.unique/" target="_blank">jQuery.unique()&nbsp;&nbsp;文档</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery 1.4版中,&nbsp;&nbsp;jQuery.unique()方法返回结果里的元素是按照他们在页面里的顺序排序的。由于在创建jQuery集合的时候jQuery使用 jQuery.unique()方法, 所以jQuery方法返回的集合也是按照他们在页面里的顺序排列的。 </p> <h3>其他 (Miscellaneous)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>jQuery.browser以浏览器引擎为中心</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://api.jquery.com/jQuery.browser/" target="_blank">jQuery.browser&nbsp;&nbsp;文档</a>, <a href="http://jquery14.com/day-01/%3Cbr%20/%3Ehttp://github.com/jquery/jquery/commit/ffb1867a4364ea65e60dad3469e8c8eb420ebcac" target="_blank" class="broken_link">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strike>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strike>&nbsp;&nbsp;&nbsp;&nbsp; </a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 例如, 你可以通过jQuery.browser.webkit探测引擎是否是Webkit。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>改进了对</strong>applets<strong>的处理</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/59802928566b6be3a66d65e77c2418fff37e6f5f" target="_blank">commit 1</a>, <a href="http://github.com/jquery/jquery/commit/3ec2f1aef6b137d0f639e2fc53f95352d24b9d90" target="_blank">commit 2</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery不再试图在Java applets上绑定事件或是数据了(绑定事件或是数据会出现错误)。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>不再使用arguments.callee</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/985856b823b1648bffc3fd63c1faf836d0ddaf7c" target="_blank">commit</a>) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 为了顺应<a href="http://code.google.com/p/google-caja/" target="_blank">Caja</a>的 要求, 同时也因为即将开始应用的ECMAScript 5规范里将其标记为陈旧,&nbsp;&nbsp;我们将jQuery核心中所有用到arguments.callee的代码都移除了。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>用Closure Compiler替换了YUI Min</strong>&nbsp;&nbsp;&nbsp;&nbsp; (<a href="http://github.com/jquery/jquery/commit/3fd62eae9df3159fc238a515bb748140a942313d" target="_blank">commit</a>) </p> <h3>内部重组 (Internal Reorganization)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; 在1.4版的<a href="http://paranimage.com/category/dede/" target="_blank">开 发</a>过程中的一个重点是要建立一个更易读, 更易懂的代码库。为了达到这个目标我们树立了一系列编写代码规范的向导。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 下面是一些主要的变化: </p> <ul>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 旧的&rsquo;core.js&rsquo;文件被分成了&rsquo;attribute.js&rsquo;, &lsquo;css.js&rsquo;, &lsquo;data.js&rsquo;,&nbsp;&nbsp;&lsquo;manipulation.js&rsquo;, &lsquo;traversing.js&rsquo;, and &lsquo;queue.js&rsquo;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ready事件被移入了&rsquo;core.js&rsquo; (因为它是jQuery的一个基本组成之一)。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大部分核心代码都符合新的<a href="http://docs.jquery.com/JQuery_Core_Style_Guidelines" target="_blank" class="broken_link">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strike>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码规范&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strike>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </a>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; css和属性的逻辑被划分开来, 不再如以往相互缠绕。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li> </ul> <br /> <h3>测试 (Testing)</h3> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery 1.4版发布过程中我们<a href="http://dev.jquery.com/report/34" target="_blank">修复了207个问题</a>&nbsp;&nbsp;&nbsp;&nbsp; (比较之下1.3版里有97个修复)。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; jQuery 1.4.此外, 测试的数量从jQuery 1.3.2中的1504例升到了1.4中的3060例。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 所有测试都在主要浏览器里完全通过了。(Safari 3.2, Safari 4, <a href="http://paranimage.com/category/apps/firefox/" target="_blank">firefox</a>&nbsp;&nbsp;&nbsp;&nbsp; 2, Firefox 3, Firefox 3.5, IE 6, IE 7,&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; IE 8, Opera 10.10, and&nbsp;&nbsp;Chrome) </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 我们尽量试图减小jQuery 1.4对大规模升级可能造成的麻烦 &ndash; 保持所有公开函数的签名不变。即使如此,&nbsp;&nbsp;请通读下面的列表以保证你对可能对你的应用造成问题的变更。 </p> <ul>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/add" target="_blank">.add()</a>不再简单的将 结果串联到一起, 结果将会被混合到一起, 然后根据他们在页面里的顺序排列。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/clone" target="_blank">.clone(true)</a>将 复制事件和数据, 而不仅是事件。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/jQuery.data" target="_blank">jQuery.data(elem)</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不再返回id, 取而代之的是元素的对象缓存。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/jQuery" target="_blank">jQuery()</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (无参数) 不再自动转换成<a href="http://api.jquery.com/jQuery" target="_blank">jQuery(document)</a>了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<a href="http://api.jquery.com/val" target="_blank">.val(&ldquo;&hellip;&rdquo;)</a>获 得一个option或一个checkbox的值不再有歧义(将总是根据value属性选择, 而不是根据text的值)。(<a href="http://github.com/jquery/jquery/commit/f298cce100c6fe23840ac95e66aaea9cb2bfb447" target="_blank">Commit</a>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/jQuery.browser" target="_blank">jQuery.browser.version</a>现 在将返回引擎的版本.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在起将对引入的JSON更严格,&nbsp;&nbsp;如果JSON的格式不符将会报错。如果你需要对不符合JSON严格格式的Javascript进行估值, 你必须设置请求的文件类型为纯文本,&nbsp;&nbsp;然后用eval()来对内容估值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数序列化默认会按照PHP/Rails的风格进行。你可以通过jQuery.ajaxSettings.traditional =&nbsp;&nbsp;true;来切换到旧的序列化方式。你也可以针对个别请求进行切换, 在调用<a href="http://api.jquery.com/jQuery.ajax" target="_blank">jQuery.ajax</a>的 时候递入&#123;traditional: true&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内部的jQuery.className被移除了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://api.jquery.com/jQuery.extend" target="_blank">jQuery.extend(true,&nbsp;&nbsp;&hellip;)</a>不再扩展复杂对象或是阵列。(TODO)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果一个<a href="http://api.jquery.com/jQuery.ajax" target="_blank">Ajax 请求</a>没有指定dataType, 而返回的数据类型是&rdquo;text/javascript&rdquo;, 那么回复将会被执行。之前,&nbsp;&nbsp;必须明确的指定dataType。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置<a href="http://api.jquery.com/jQuery.ajax" target="_blank">Ajax&nbsp;&nbsp;请求</a>的&rdquo;ifModified&rdquo;属性会将ETags纳入考虑。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li> </ul> <p>&nbsp;&nbsp;&nbsp;&nbsp; 我们还针对1.4版中可能造成问题的变更编写了一个向后兼容的<a href="http://github.com/jquery/jquery-compat-1.3" target="_blank">插件</a>。 如果你升级到1.4以后出现问题, 可以在引入1.4版的文件之后引入这个插件。 </p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 如何使用这个插件: </p> <pre><span class="code">&lt;script xsrc=&quot;http://code.jquery.com/jquery.js&quot;&gt;&lt;/script&gt;<br />&lt;script xsrc=&quot;http://code.jquery.com/jquery.compat-1.3.js&quot;&gt;&lt;/script&gt;</span></pre> <h2>原始数据和测试页面</h2> <p>&nbsp;&nbsp;&nbsp;&nbsp; 性能测试中我们使用了下列测试套包: </p> <ul>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ejohn.org/files/jquery1.4/slick/?type=attr" target="_blank">Attributes</a>&nbsp;&nbsp;&nbsp;&nbsp; </li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ejohn.org/files/jquery1.4/slick/?type=class" target="_blank">Class</a>&nbsp;&nbsp;&nbsp;&nbsp; </li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ejohn.org/files/jquery1.4/slick/?type=dom" target="_blank">DOM Manipulation</a>&nbsp;&nbsp;&nbsp;&nbsp; </li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ejohn.org/files/jquery1.4/slick/?type=empty" target="_blank">Empty/Remove</a>&nbsp;&nbsp;&nbsp;&nbsp; </li>&nbsp;&nbsp;&nbsp;&nbsp; <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Function Call Profiling: <a href="http://ejohn.org/files/jquery-profile.html" target="_blank">1.3.2</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ejohn.org/files/jquery-profile-14.html" target="_blank">1.4</a>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li> </ul><pre>英文原文: <a href="http://jquery14.com/day-01" target="_blank">Day One- The 14 Days of jQuery</a><br />中文译文: <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">翻译: jQuery1.4官方文档 &#124; coolnalu</a></pre> 
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/75/</link>
<title><![CDATA[精巧支付宝导航条制作教程]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Fri, 30 Apr 2010 08:47:19 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/75/</guid> 
<description>
<![CDATA[ 
	其实也算不上教程，也就是自己没事儿的时候做点东西然后发上来大家交流交流，希望大家不吝赐教^!^<br/><br/>因为刚看过亚东的教程和这个有点相似，所以就自己琢磨了一下写了一个仅用到一小段的JS就搞定了。亚东的里面要用到JQuery。我感觉要是简单一点的东西直接上JS就行了，有大量需求时再调用库才好。<br/><br/>核心HTML代码如下： <br/><br/><textarea name="code" class="html" rows="15" cols="100"><div id="menu">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div id="top"><!–橙色菜单项部分：此标签作用在于滑动门效果的实现—>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<ul id="item"><!–列表项li可自由添加与修改 –>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item1"><a href="#"><span>前端开发</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item2" class="active"><a href="#"><span>我要付款</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item3"><a href="#"><span>网站开发</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item4"><a href="#"><span>交易管理</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item5"><a href="#"><span>我的支付宝</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item6"><a href="#"><span>安全中心</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li id="item7"><a href="#"><span>商家服务</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li class="ext1"></li><!–额外的标签用于定位菜单项右上圆角 –>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ul>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div id="bot"><!–灰色子菜单项部分：此标签作用也在于滑动门效果的实现–>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<ul class="sub-item" id="sub-item1">
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>HTML</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>CSS</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>JavaScript</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>ActionScript</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>Photoshop</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>Fireworks</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="#"><span>Flash</span></a></li>
&nbsp;&nbsp;&nbsp;&nbsp;<li class="ext2"></li><!–额外的标签用于定位菜单项右下圆角 –>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ul>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;</div></textarea><br/><br/>注意：<br/><br/>&nbsp;&nbsp; 1. 菜单项是可以自由扩展的，前提是复制代码中类名为“sub-item”红色列表标签。也就是copy这个ul标签的所有内容粘贴其后就行。<br/>&nbsp;&nbsp; 2. 类名为“sub-item”列表标签ul的id属性依次类加就OK了，如：sub-item1,sub-item2,sub- item3…<br/>&nbsp;&nbsp; 3. 类名为“active”的蓝色列表标签表示载入时的默认菜单项。<br/><br/>核心JavaScript代码：<br/><br/>主要功能是：子菜单项随着菜单项变化而变化的效果(类似tab 选项卡)。 <br/><br/><textarea name="code" class="JS" rows="15" cols="100">window.onload = function() &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i=1; i<8; i++ )&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var nodeItem = document.getElementById("item"+i);&nbsp;&nbsp;&nbsp;&nbsp;//遍历每个菜单项增加 onClick事件
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeItem.onclick = function() &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*菜单激活动态样式*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( n=0; n<6; n++)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName("li")[n].className = "";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert(this.className);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.className = "active";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var linkNode = parseInt( this.id.substring(4,5) );&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( j=1; j<10; j++)&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按顺序匹配菜单项和菜单内容
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var nodeSubItem = document.getElementById("sub-item"+j);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( linkNode == j )&#123;&nbsp;&nbsp;&nbsp;&nbsp;//如果菜单项和菜单内容匹配则显示，否则隐藏
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeSubItem.style.display = "block";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeSubItem.style.display = "none";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;</textarea><br/><br/>JS代码就不多做解释了，重要部分我已经给出注释。因为我也是菜鸟，费了很大劲才实现效果，还希望高手多多指点。<br/><br/>CSS代码有点小多我就不贴出来了，其实核心代码就那几句，主要为了仿制得完美就得多写一点啦！有兴趣的同学直接下载我的源码研究。有什么问题直接给我留言^!^<br/><br/><a href="http://www.blueidea.com/articleimg/2010/03/7456/alipay-tab.html" target="_blank">最终效果预览</a><br/><br/>原文：http://www.keelii.com/alipay-tab/
]]>
</description>
</item><item>
<link>http://www.206c.net/blog/post/73/</link>
<title><![CDATA[jQuery打造动态下滑菜单]]></title> 
<author>零度溫柔 &lt;nickdraw@qq.com&gt;</author>
<category><![CDATA[Javascript]]></category>
<pubDate>Thu, 29 Apr 2010 01:50:04 +0000</pubDate> 
<guid>http://www.206c.net/blog/post/73/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;jQuery的"write less, do more"的特性可谓是家喻户晓，即使没有很丰富JS编程经验的人，也可以通过其提供的API很快学会如何使用，当然，如果您经验丰富，我还是建议您可以理解jQuery各主要函数的实现原理，其他不说了，直接看看如何用它来实现菜单神奇的效果吧<br/><br/><a href="http://www.206c.net/blog/attachment.php?fid=148" class="highslide" onclick="return hs.expand(this)"><img src="http://www.206c.net/blog/attachment.php?fid=148" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://wiky.000a.biz/demo/0415/animated-menu-0415.html" target="_blank">查看演示</a><br/><br/>Step1 - HTML结构<br/>看一下菜单的HTML代码，跟平常的菜单代码没有什么区别：<br/><br/><textarea name="code" class="html" rows="15" cols="100"> <div id="menu" class="menu"> 
&nbsp;&nbsp;&nbsp;&nbsp;<ul>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">Home</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">HTML/CSS</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">JavaScript</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">Resources</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">Tutorials</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li><a href="javascript:;">About</a></li>
&nbsp;&nbsp;&nbsp;&nbsp;</ul>
</div></textarea><br/><br/>关键在于利用脚本在每个锚点(a元素)中建立几个分隔层，这样就可以在鼠标悬停时分别控制它们产生动画。为此，我们要在DOM加载完成时候修改DOM的结构，使得每个锚点代码变成如下：<br/><br/><textarea name="code" class="html" rows="15" cols="100"><a href="javascript:;">
&nbsp;&nbsp;&nbsp;&nbsp;<span class="out">Home</span>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="bg"></span>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="over">Home</span>
</a></textarea><br/><br/>原先的每个锚点中的内容会被附加到两个span元素（.out和.over）里面，另外一个span元素（.bg）为背景图片层。<br/><br/>至于如何修改DOM结构，JS代码将在Step3中讲解。<br/><br/>Step2 - CSS样式<br/><br/>在示例中，展示了两种样式，有使用背景图的和没有使用背景图的（具体查看演示），您也可以自由定制自己的样式，以设计出更炫酷的菜单，这里提供基本的样式和解释：<br/><br/><textarea name="code" class="CSS" rows="15" cols="100">/* 以下是菜单基本的样式
*/.menu ul li &#123;
&nbsp;&nbsp;&nbsp;&nbsp;float: left;
&nbsp;&nbsp;&nbsp;&nbsp;/* 菜单子元素的内容超出不可见 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow: hidden;
&nbsp;&nbsp;&nbsp;&nbsp;/* 以下省略部分代码 */
&#125;
.menu ul li a &#123;
&nbsp;&nbsp;&nbsp;&nbsp;/* 必须是相对定位&nbsp;&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp; position: relative;
&nbsp;&nbsp;&nbsp;&nbsp;display: block;
&nbsp;&nbsp;&nbsp;&nbsp;width: 110px;
&nbsp;&nbsp;&nbsp;&nbsp;/* 以下省略部分代码 */
&#125;
.menu ul li a span &#123;
&nbsp;&nbsp;&nbsp;&nbsp;/* 所有层将使用绝对定位 */
&nbsp;&nbsp;&nbsp;&nbsp;position: absolute;
&nbsp;&nbsp;&nbsp;&nbsp;left: 0;
&nbsp;&nbsp;&nbsp;&nbsp;width: 110px;
&#125;
.menu ul li a span.out &#123;
&nbsp;&nbsp;&nbsp;&nbsp;top: 0px;
&#125;
.menu ul li a span.over,.menu ul li a span.bg &#123; 
&nbsp;&nbsp; /* 起初.over层和.bg层相对a元素-45px以达到隐藏的效果 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top: -45px;&#125;/
* 以下是使用背景图的示例 */
#menu &#123; 　　
/* 菜单背景 */ 
&nbsp;&nbsp; background:url(bg_menu.gif) scroll 0 -1px repeat-x; 
&nbsp;&nbsp; border:1px solid #CCC;&#125;
#menu ul li a &#123;
&nbsp;&nbsp;&nbsp;&nbsp;color: #000;
&#125;
#menu ul li a span.over &#123;
&nbsp;&nbsp;&nbsp;&nbsp;color: #FFF;
&#125;
#menu ul li span.bg &#123; 　　
/* 指定高度和背景图 */
&nbsp;&nbsp;&nbsp;&nbsp;height: 45px;
&nbsp;&nbsp;&nbsp;&nbsp;background: url(bg_over.gif) center center no-repeat;
&#125;</textarea><br/><br/>Step3 - JavaScript代码<br/><br/>首先要做的是，实现Step1中所说的，在DOM加载完成后修改其DOM结构，具体做法如下：<br/><br/><textarea name="code" class="JS" rows="15" cols="100">// 把每个a中的内容包含到一个层（span.out）中，
// 然后再在span.out层后面追加背景图层（span.bg）
$("#menu li a").wrapInner( '<span class="out"></span>' )
　　　　　　　　　.append( '<span class="bg"></span>' );
// 循环为菜单的a每个添加一个层（span.over）
$("#menu li a").each(function() &#123;
　　$( '<span class="over">' +&nbsp;&nbsp;$(this).text() + '</span>' )
　　　　　　　　　.appendTo( this );
&#125;);</textarea><br/><br/>在讲动画代码之前，先看一下动画的过程，如下图所示：<br/><br/><a href="http://www.206c.net/blog/attachment.php?fid=149" class="highslide" onclick="return hs.expand(this)"><img src="http://www.206c.net/blog/attachment.php?fid=149" class="insertimage" alt="Highslide JS" title="点击图片放大" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>在Step1中我们知道DOM加载后，a元素中建立了几个分隔层，在Step2中，CSS样式中，我们设置了span.bg和span.over层的top属性为-45px，因为span元素已设置为绝对定位，它将相对于li a 元素向上-45px，因为li元素内容超出不可见，所以开始时，.bg层和.over层位于空间范围外。<br/><br/>我们要设置的动画过程是，当鼠标悬停时，三个层同时向下移动，span.out层向下移动至移除可见范围，span.over和span.bg移动进入可见区域，设置span.bg速度比span.over速度稍快，错位产生更加效果。<br/><br/>要实现这样动画效果，使用jQuery的.animate()方法很容易就可以实现，以下是JS代码和解释：<br/><br/><textarea name="code" class="JS" rows="15" cols="100">$("#menu li a").hover(function() &#123;
　　// 鼠标悬停时候被触发的函数
&nbsp;&nbsp; $(".out",this).stop().animate(&#123;'top':'45px'&#125;,250);//下滑至隐藏
&nbsp;&nbsp; $(".over",this).stop().animate(&#123;'top':'0px'&#125;,250); //下滑至显示
&nbsp;&nbsp; $(".bg",this).stop().animate(&#123;'top':'0px'&#125;,120); //下滑至显示
&nbsp;&nbsp;&#125;, function() &#123;
&nbsp;&nbsp; // 鼠标移出时候被触发的函数
&nbsp;&nbsp; $(".out",this).stop().animate(&#123;'top':'0px'&#125;,250); //上滑至显示
&nbsp;&nbsp; $(".over",this).stop().animate(&#123;'top':'-45px'&#125;,250);//上滑至隐藏
&nbsp;&nbsp; $(".bg",this).stop().animate(&#123;'top':'-45px'&#125;,120);//上滑至隐藏
&#125;);</textarea><br/><br/>总结<br/><br/>以上讲解了如何一步步打造jQuery动态下滑菜单，您可以按部就班自己实现一个，也可以下载源代码修改定制，当然，您有什么好的提议或者有什么问题，都可以给我留言。
]]>
</description>
</item>
</channel>
</rss>