﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-CONAN ZONE-文章分类-JQuery</title><link>http://www.blogjava.net/conans/category/32370.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Tue, 08 Sep 2009 08:31:40 GMT</lastBuildDate><pubDate>Tue, 08 Sep 2009 08:31:40 GMT</pubDate><ttl>60</ttl><item><title>高级 jQuery</title><link>http://www.blogjava.net/conans/articles/294319.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 08 Sep 2009 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/294319.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 简介这个关于jQuery 的系列文章帮助您提高了创建基于 JavaScript 的 Web 应用程序的能力。即使您在阅读这些文章之前从未听说过jQuery，但是您应该已经具备了使用 jQuery 构建良好的 Web应用程序所需的语言技能和背景知识。但是，有时候良好的应用程序还不能满足需求，这时您将需要一个强大的 Web应用程序。这就需要通过几个步骤修改现有的应用程序，让它能够在...&nbsp;&nbsp;<a href='http://www.blogjava.net/conans/articles/294319.html'>阅读全文</a><img src ="http://www.blogjava.net/conans/aggbug/294319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-09-08 15:41 <a href="http://www.blogjava.net/conans/articles/294319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中级 jQuery</title><link>http://www.blogjava.net/conans/articles/294317.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 08 Sep 2009 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/294317.html</guid><description><![CDATA[<p><a name="N1008A"><span class="atitle">简介</span></a></p>
<p>本文的写作灵
感源自读者关于先前一篇文章的电子邮件反馈；该邮件这样写道 &#8220;jQuery
在简单的页面上无可挑剔，但在复杂的页面上性能极其低下。在解决性能问题之前，您必须对复杂页面使用常规的 JavaScript。&#8221; 这立即让我想到
&#8220;jQuery 和 JavaScript 之间的性能比较会是什么样的？&#8221;事实上，我很少看到将 jQuery 库与 JavaScript 或其他
JavaScript 库进行比较的文章。我可能像大多数人一样，仅看到用 jQuery
编写客户端代码的简易，而忽略了可能的性能问题。在我看来，在易用性和性能之间进行折衷是值得的。但是，存在这样一种折衷吗？jQuery 是不是比
&#8220;一般&#8221; 的 JavaScript 慢？jQuery 是不是比其他库慢？本文将尝试解答这些问题。 </p>
<p>度量
JavaScript 性能要考虑的最重要问题是执行 JavaScript
的环境。因为代码是运行在客户端上的，所以它的执行依赖于客户端计算机，这使得客户端机器成为影响性能的最重要因素。很明显，运行 4 核 CPU
的新服务器执行代码的速度肯定要比 400 MHz 老式处理器快。这是毫无疑问的。不过，由于您不能控制 Web
应用程序用户用于访问您的站点的机器，所以在度量性能时要考虑关于硬件的许多因素。</p>
<p>JavaScript
性能的另一个重要方面是用于运行 JavaScript 的浏览器，JavaScript 新手可能不容易发觉这个影响因素。每个浏览器内部都包含一个
JavaScript 引擎，即用于解析和执行 JavaScript 代码并处理 Web 应用程序页面的本机代码。因此，JavaScript
的性能严重依赖于客户端使用的浏览器，并且在某些情况下，您<em>可以</em> 控制用户使用的浏览器。本文提供一些关于 JavaScript 性能的指导原则，并解释不同浏览器对性能的影响。</p>
<p>最
后，在总结 JavaScript，尤其是 jQuery 的性能之后，我将确定一些能够改进 jQuery
代码性能的最佳实践，充分利用运行得最快的代码部分，而尽量避免运行得最慢的代码部分。在您阅读完本文之后，&#8220;jQuery 的性能好吗&#8221;
这个问题将得到解答，并且给我发送那封电子邮件的人也将知道他的断言是否正确。</p>
<p><a name="N100A0"><span class="atitle">创建性能测试</span></a></p>
<p>关
于性能测试的第一步是创建一个合适的性能测试。jQuery 以及其他 JavaScript
库在代码中扮演的最重要角色就是使用选择查找特定页面元素。我在最初的性能测试中就以这方面为重点。一个良好的性能测试应该真正地发挥
JavaScript
库的全部力量，用包含数千个页面元素的页面测试它。应该运行所有选择方法，让我看到哪个选择方法最快，哪个最慢。测试应该事先知道正确的答案，从而确定
JavaScript 库是否正确地执行选择方法。最后，应该显示所有结果，并附带所用的运行时间，让我能够在所有库之间进行比较。</p>
<p>我差点忽略了性能测试的最重要方面：它应该是免费的。毕竟这个系列文章的不成文规则就是相互利用彼此的成果，因此我继续发扬这种精神，在此使用一个现成的 JavaScript 库性能测试。这个测试称为 SlickSpeed Selectors Test（见 <a href="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/?ca=drs-tp4608#resources">参考资料</a>），
它非常适合我的需求。它将 jQuery 1.2.6（撰写本文时的最新版本）与其他 4 个流行的 JavaScript
库（MooTools、Prototype、YUI 和 Dojo）进行比较。然后，它使用带有数千个页面元素的页面运行 40
个选择测试。换句话说，这是我所希望的最佳性能测试。我将在第一个性能测试分析中使用该测试。</p>
<p><a name="N100B1"><span class="atitle">对比 JavaScript 库的性能</span></a></p>
<p>对于第一个性能测试，我使用的运行环境是 2.2 GHz 处理器、2 GB RAM 和 Firefox 3.0.3（非常重要）。我在该配置下运行 5 次测试，图 1 显示了 5 次运行的平均结果。</p>
<br />
<a name="fig1"><strong>图 1. 性能测试 1 的结果</strong></a><br />
<img alt="这个表格显示了在 Firefox 3.0.3 中用不同工具运行的 5 次测试。平均执行时间的毫秒数为：Mootools，418；jQuery，451；Prototype，701；YUI，1006；Dojo，303。最快与最慢测试的差距为 704 毫秒。" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test1.jpg" height="245" width="430" />
<br />
<p>从第一次测试能够得出什么结论？现在我们仅关注总体结果，而不是每次测试。在获得一些总体结论之后，我将稍后在本文中关注每个测试。</p>
<ul>
    <li>结论 1：YUI 慢到了极点！<br />
    对，与其他库相比，YUI 真的很慢。仔细查看每个测试，找出为什么这个库在选择元素组（例如 &#8220;p, a&#8221;）时非常慢。对于要求具有很好性能的页面而言，这个库是最差的选择。</li>
    <li>结论 2：Mootools、jQuery 和 Dojo 的运行时间几乎一样。
    <br />
    与其他两个库相比，这 3 个库是非常快的，并且 Dojo 是它们当中最快的，而 jQuery 是最慢的。但是从全局考虑，它们之间的速度是很接近的。</li>
    <li>结论 3：这些库之间的相对差别还是比较明显的。<br />
    度量最快时间/最慢时间以确定速度的相对差别，您可以看到相对差别为 332%。这个差别是比较大的，这表明使用 Firefox 时选择不同的 JavaScript 库会对性能有影响。</li>
</ul>
<p>但是要记住，这些结论仅基于一个浏览器的结果。这是基于 Firefox 3.0.3 得出的结论。现在我们进入下一小节，我将在不同的浏览器上运行该测试。</p>
<p><a name="N100E2"><span class="atitle">在不同浏览器上的 JavaScript 性能</span></a></p>
<p>面
对不同浏览器运行 JavaScript 会得出的不同结果（性能和时间都不同），许多初级 Web 程序员觉得不可思议。尽管这对初级 Web
程序员而言是个挫折（他们担心要编写额外的代码来处理不同的浏览器），但是有经验的 Web 程序员在 Netscape 和 Internet
Explorer 的早期就知道如何处理该问题。这也是使用 JavaScript 库的一个亮点，因为它们都谨慎处理许多或大部分浏览器差异。 </p>
<p>JavaScript
速度差异的主要原因是每个浏览器都使用自己的 JavaScript 引擎。JavaScript 引擎是用于解析 JavaScript 并根据
Web 应用程序执行它的本机代码。因此，JavaScript
的执行速度与底层引擎直接相关。在最近几个月，许多浏览器公司越来越关注他们的浏览器的性能，这是有原因的。随着某些页面的 JavaScript
变得日益复杂，JavaScript 引擎的快慢能够影响 Web 应用程序的响应速度。因此，当 Google 和 Firefox
等公司谈论它们的 JavaScript 引擎时，它们就会谈及下一代引擎的速度要快 10 倍。这对 Web 应用程序而言是很重要的，因为底层
JavaScript 引擎的速度直接导致更复杂的 Web 应用程序的出现。</p>
<p>现在，您知道 JavaScript 引擎是
JavaScript 执行速度的一个因素，那么让我们在不同的浏览器上运行刚才在 Firefox 上运行的测试，并尝试找出不同的引擎对
JavaScript 性能的影响。记住，这个测试与我前面在 Firefox 上运行的测试是一样的，因此除了 JavaScript
引擎以外，其他所有东西都是相同的。图 2 显示了测试结果。</p>
<br />
<a name="fig2"><strong>图 2. 性能测试 2 的结果</strong></a><br />
<img alt="性能测试 2 的结果" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test2.jpg" height="747" width="440" />
<br />
<p>看
完这些测试结果之后，您首先注意到的是在这些浏览器中运行得到的时间差很大。在 Chrome 1.0 上运行 jQuery 需要 168
毫秒，而在 IE6 上运行需要 1728 秒。这是难以置信的时间差！jQuery 选择方法在 IE6 上运行比在 Chrome 上运行慢 10
倍！现在，您知道为什么 Google 喜欢夸耀它的 JavaScript 引擎，以及为什么某些浏览器很少介绍自己的 JavaScript
引擎。这些差别还是比较大的。</p>
<p>您应该注意到，jQuery 在 Firefox 或一些其他浏览器上运行时速度排在第 3
位，而在另一些浏览器上排在第 1
位。事实上，这些结果表明，根据性能进行分类的话，这些库可以分为两组，而不管使用什么浏览器。Mootools、Dojo 和 jQuery
通常属于一个组别，而 Prototype 和 YUI 属于另一个组别，前一组要比后一组快得多。</p>
<p><a name="N10107"><span class="atitle">性能测试结论</span></a></p>
<p>我觉得所有这些结论都需要专门花一个小节进行阐述，因为它们对 JavaScript 开发人员非常重要。我仍然尝试总结上面的性能结果，并且没有忘记本文是以 jQuery 为主题的。</p>
<p><strong>结论 1：Mootools、jQuery 和 Dojo 在性能方面不分上下。</strong>
<br />
查看它们在所有 5 个浏览器上进行的测试，在求取平均值之后，您可以看到这 3 个库的性能几乎是一样的。（理想情况下，我们应该调查每个浏览器的市场份额。但是调整这些数字很难，因为使用 JavaScript 库的站点不一定由 &#8220;平均用户&#8221; 访问）。</p>
<br />
<a name="fig3"><strong>图 3. 测试结果的平均值（Mootools、jQuery 和 Dojo）</strong></a><br />
<img alt="这个表格显示来各个浏览器的平均值。这个平均值的毫秒数为：Mootools，1.29；jQuery 1.19；Dojo 1.38。" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test3.jpg" height="190" width="299" />
<br />
<p><strong>结论 2：Prototype 和 YUI 的性能很慢。</strong>
<br />
看看这两个库在 5 个浏览器中的测试结果与 jQuery 的对比。在求取它们的平均值之后，您可以发现这两个库的性能差别有多大。它们在任意浏览器中平均比 jQuery 慢 300%。</p>
<br />
<a name="fig4"><strong>图 4. 测试结果的平均值（jQuery、Prototype 和 YUI）</strong></a><br />
<img alt="这个表格显示了在各个浏览器之间取得的平均值。平均值的毫秒数为：jQuery，1.00；Prototype，3.96；YUI，3.73。" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test4.jpg" height="190" width="299" />
<br />
<p><strong>结论 3：如果对性能要求比较高时，选择 Mootools、jQuery 和 Dojo 之一获得的性能几乎一样。</strong>
<br />
根据以上的平均值，选择这 3 个库之一比选择另外两个库之一能够获得更多的性能优势。从在所有浏览器上运行得出的平均值看，它们的性能是相当的。因此，当您选择 JavaScript 库时，选择这 3 个库之一是不会错的。</p>
<p><strong>结论 4：如果对性能要求比较高时，不要选择 Prototype 或 YUI。</strong>
<br />
如果要求 JavaScript 库具有较高的性能，或者打算创建一个大型的 JavaScript 项目，那么就不应该选择这两个库之一。这两个库的性能要比其他库逊色得多。 </p>
<p><strong>结论 5：浏览器对性能的影响是 JavaScript 库的 9 倍。</strong>
<br />
我
认为这是本文所有结论中最重要的结论。您可以在特定情况下讨论哪个 JavaScript
库最快，但它最终的影响却是很小的！对于性能而言，浏览器的影响比库本身要大得多。回顾一下图 3 和图 4 的平均值，您可以看到 3
个最快的库中，最慢那个（Dojo）仅比最快那个（jQuery）慢 15%。只有 15%！然而，您看看 jQuery
在最快的浏览器（Chrome 1.0）和最慢的浏览器（IE6）上运行的速度差别，这个差别竟然达到 1000%！从这两个数字看，15% 对
1000% 而言是微不足道的。至此，关于 3 个较快的库中哪个是最快的争论可以停止了，因为它们对最终结果的影响是微乎其微的。 </p>
<p><strong>结论 6：如果 JavaScript 性能对 Web 应用程序很重要，并且您可以控制选择什么浏览器，那么就选择最快的浏览器！</strong>
<br />
在
某些情况下，您可以控制使用什么浏览器访问站点。如果能够控制使用什么浏览器，那么您就是很幸运的。我就碰到这样幸运的项目。在这种情况下，如果您拥有一
个复杂的 JavaScript 应用程序，或者您认为性能很重要，那么您就应该控制用户用于访问 Web
应用程序的浏览器。这些测试已经清楚地显示了浏览器的影响。如果您的 JavaScript 应用程序的访问量很大，那么您可以告诉用户，他们<em>必须</em> 使用 Chrome。</p>
<p><strong>结论 7：如果您不能控制用户使用的浏览器，那么要首先考虑在 IE6 上的性能。</strong>
<br />
但
是，在大部分情况下，我们都无法控制用户使用什么浏览器访问我们的站点。不过，很大一部分用户都使用 IE 6
浏览网页。到目前为止的测试中，这个浏览器的 JavaScript 引擎是最慢的。但是由于仍然有大量用户使用它，并且良好的 Web 设计需要
&#8220;适应最糟糕的情况&#8221;，这意味着您可以考虑根据 IE6 设计您的 JavaScript 应用程序。</p>
<p><a name="N10163"><span class="atitle">jQuery 性能调优</span></a></p>
<p>本
文的第二部分将讨论如何改进 jQuery 代码的性能。前一部分表明选择 jQuery 作为 JavaScript
库指向了正确的性能方向。如果您正在阅读本文，您可能已经使用了
jQuery。但是底层库速度快并不意味着您编写的所有代码都是高质量的。如果您没有回过头来想想应该怎么做，使用 jQuery
仍然会编写出非常慢的代码。</p>
<p>这个部分介绍一些性能调优知识，以及改进 jQuery 代码速度的最佳实践技巧。
</p>
<p><strong>技巧 #1 - 尽可能多地通过 ID 进行搜索，而不是 CLASS</strong>
<br />
在 jQuery 代码中两种常见的搜索技术是通过元素的 ID 进行搜索和通过元素的 CLASS 进行搜索。在使用常规 JavaScript 的 JavaScript 库之前，通过 ID 查找页面元素还是相当简单的。可以使用 <code>getElementById()</code>
方法快速找到元素。但是如果没有 JavaScript 库，要查找 CLASS 会更加困难，在必要情况下，我们还通过在其 ID
中进行编码帮助查找。使用 jQuery 时，搜索 CLASS 就像搜索页面上的 ID
一样简单，因此这两个搜索似乎是可互换的。然而实际情况并非如此。通过 ID 搜索比通过 CLASS 搜索要快得多。当通过 ID
进行搜索时，jQuery 实际上仅使用内置的 <code>getElementById()</code> 方法，但通过 CLASS 进行搜索时必须遍历页面上的所有元素，以查找匹配项。很明显，当页面越大并且越复杂时，通过 CLASS 进行搜索会导致响应非常慢，而通过 ID 进行搜索不会随着页面变大而变慢。</p>
<p>前面运行的 jQuery 性能测试结果支持这一数据。让我们查看每个测试，看看需要注意 jQuery 代码的什么地方。在这个例子中，分别看看通过 ID 和 CLASS 进行搜索时的测试结果（图 5）。</p>
<br />
<a name="fig5"><strong>图 5. ID 搜索和 CLASS 搜索对比</strong></a><br />
<img alt="这个测试样例在搜索 #title 时，找到一个匹配项，耗时 1 毫秒。在搜索 .note 时找到 14 个匹配项，耗时 39 毫秒。" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test5.jpg" height="90" width="249" />
<br />
<p>这
些测试是不同的，但它们得出的数据表明通过 ID 进行搜索比通过 CLASS 进行搜索快得多。这如何影响到 jQuery
代码？在编写搜索时，您要记住这些技巧：如果既可选择 CLASS 又可选择 ID，那么通常要选择
ID。如果需要在您的代码中搜索某些元素，一定要给它们分配 ID。</p>
<p>清单 1 显示了一个实际的 jQuery 测试，您可以在您的机器上运行它对此进行验证：</p>
<br />
<a name="listing1"><strong>清单 1. CLASS 和 ID</strong></a><br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">$(document).ready(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">Start&nbsp;Test</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.info(d.getSeconds()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;d.getMilliseconds());<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;testBody&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testBody&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;div&nbsp;class='testable</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">i</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">'&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">body</span><span style="color: #000000;">"</span><span style="color: #000000;">).append(testBody);<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">.testable</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">i);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.info(d.getSeconds()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;d.getMilliseconds());<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.time(</span><span style="color: #000000;">"</span><span style="color: #000000;">Start&nbsp;ID&nbsp;Test</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;testBody&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;testBody&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;div&nbsp;id='testable</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">i</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">'&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">body</span><span style="color: #000000;">"</span><span style="color: #000000;">).append(testBody);<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#testable</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">i);<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.info(d.getSeconds()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;d.getMilliseconds());<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;console.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">End&nbsp;Test</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;});</span></div>
<br />
<br />
<p>ID 测试耗时 218 毫秒，而 CLASS 测试耗时 19.9 秒！甚至在专门为该测试构建的简单页面上，ID 搜索也要比 CLASS 搜索快 100 倍！</p>
<p><strong>技巧 #2 - 提供尽可能多的搜索信息</strong>
<br />
jQuery 提供如此多的页面元素搜索方法，有时您难以指出哪种方法是最好的。有一条经验是不会错的，即为搜索参数提供尽可能多的信息。因此，假如您正在搜索带有 &#8220;clickable&#8221; CLASS 的所有页面元素，如果您提前知道仅有 <code>DIV</code> 附带有 CLASS，那么就能提高搜索性能。所以，搜索 &#8220;div.clickable&#8221; 会更加快。图 6 显示了支持该技巧的结果。</p>
<br />
<a name="fig6"><strong>图 6. 尽可能多地提供信息</strong></a><br />
<img alt="这个测试显示搜索 div.example 找到了 43 个匹配项，耗时 2 毫秒。搜索 .note 找到 14 个匹配项，耗时 39 毫秒。" src="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/test6.jpg" height="90" width="249" />
<br />
<p>考虑到底层 JavaScript 代码之后，这就不足为奇了。通过提供元素标记，与 CLASS 参数匹配的搜索元素数量将大大减少，从而将搜索性能提升至与本例中的 ID 搜索相当。 </p>
<p>开发人员在编写 jQuery 选择方法时不能偷懒，尽管 jQuery 的简单让人产生偷懒的欲望。简单让您放松了警惕。搜索机制变得如此简单，让我们倾向于仅输入一条信息。然而，您应该总是尽可能多地输入信息，尤其是已知信息。清单 2 显示了一个很好的例子。
</p>
<br />
<a name="listing2"><strong>清单 2. 提供充足的信息<br />
<br />
</strong></a>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Assume&nbsp;there&nbsp;are&nbsp;50&nbsp;of&nbsp;these&nbsp;in&nbsp;some&nbsp;giant&nbsp;form,&nbsp;and&nbsp;you&nbsp;need&nbsp;to&nbsp;validate</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;these&nbsp;fields&nbsp;before&nbsp;they&nbsp;are&nbsp;submitted,&nbsp;and&nbsp;there&nbsp;are&nbsp;hundreds&nbsp;of&nbsp;other</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;elements&nbsp;on&nbsp;the&nbsp;page&nbsp;as&nbsp;well</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">text&nbsp;class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">notBlank</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;"bad"&nbsp;way&nbsp;to&nbsp;validate&nbsp;these&nbsp;fields</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">$(</span><span style="color: #000000;">"</span><span style="color: #000000;">.notBlank</span><span style="color: #000000;">"</span><span style="color: #000000;">).each(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;($(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).val()</span><span style="color: #000000;">==</span><span style="color: #000000;">""</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).addClass(</span><span style="color: #000000;">"</span><span style="color: #000000;">error</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">});<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;"good"&nbsp;way&nbsp;to&nbsp;validate&nbsp;these&nbsp;fields</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">$(</span><span style="color: #000000;">"</span><span style="color: #000000;">input.notBlank</span><span style="color: #000000;">"</span><span style="color: #000000;">).each(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;($(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).val()</span><span style="color: #000000;">==</span><span style="color: #000000;">""</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).addClass(</span><span style="color: #000000;">"</span><span style="color: #000000;">error</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">});<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;"best"&nbsp;way&nbsp;to&nbsp;validate&nbsp;these&nbsp;fields</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">$(</span><span style="color: #000000;">"</span><span style="color: #000000;">input:text.notBlank</span><span style="color: #000000;">"</span><span style="color: #000000;">).each(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;($(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).val()</span><span style="color: #000000;">==</span><span style="color: #000000;">""</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).addClass(</span><span style="color: #000000;">"</span><span style="color: #000000;">error</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></div>
<a name="listing2"><br />
<strong><br />
</strong></a>
<p><strong>技巧 #3 - 缓存选择器</strong>
<br />
最
后一个性能技巧利用了几乎所有 jQuery 选择器都返回 jQuery
对象这个特性。这意味着在理想的情况下，您仅需要运行选择器一次，并且能够轻松地将所有函数连接在一起，或缓存结果供以后使用。您也不要担心缓存，因为与
总体可用内存相比，返回的对象是很小的。 </p>
<p>清单 3 给出了一些关于如何利用缓存的例子。</p>
<br />
<a name="listing3"><strong>清单 3. 缓存</strong></a><br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Imagine&nbsp;a&nbsp;function&nbsp;that&nbsp;hides&nbsp;all&nbsp;the&nbsp;div's&nbsp;with&nbsp;a&nbsp;class&nbsp;of&nbsp;"hideable"&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;when&nbsp;a&nbsp;button&nbsp;is&nbsp;pressed.&nbsp;&nbsp;These&nbsp;DIV's&nbsp;might&nbsp;reappear&nbsp;later&nbsp;when&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;working&nbsp;with&nbsp;the&nbsp;page,&nbsp;&nbsp;so&nbsp;the&nbsp;button&nbsp;can&nbsp;be&nbsp;pressed&nbsp;any&nbsp;number&nbsp;of&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;times,&nbsp;and&nbsp;the&nbsp;DIV's&nbsp;that&nbsp;have&nbsp;reappeared</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;will&nbsp;again&nbsp;be&nbsp;made&nbsp;to&nbsp;be&nbsp;hidden.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#ourHideButton</span><span style="color: #000000;">"</span><span style="color: #000000;">).click(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">.hideable</span><span style="color: #000000;">"</span><span style="color: #000000;">).hide();<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">});<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;As&nbsp;you&nbsp;saw&nbsp;in&nbsp;the&nbsp;CLASS&nbsp;versus&nbsp;ID&nbsp;example,&nbsp;though,&nbsp;a&nbsp;search&nbsp;for&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;CLASS&nbsp;is&nbsp;very&nbsp;inefficient</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;If&nbsp;this&nbsp;button&nbsp;is&nbsp;pressed&nbsp;often,&nbsp;it&nbsp;could&nbsp;lead&nbsp;to&nbsp;a&nbsp;slow&nbsp;response</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Instead&nbsp;of&nbsp;the&nbsp;above&nbsp;example,&nbsp;you&nbsp;should&nbsp;write&nbsp;your&nbsp;code&nbsp;like&nbsp;this</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;hideable;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#ourHideButton</span><span style="color: #000000;">"</span><span style="color: #000000;">).click(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(hideable)<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hideable.hide();<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hideable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">.hideable</span><span style="color: #000000;">"</span><span style="color: #000000;">).hide();<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">});<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;You&nbsp;can&nbsp;cache&nbsp;your&nbsp;search&nbsp;in&nbsp;a&nbsp;JavaScript&nbsp;variable&nbsp;and&nbsp;reuse&nbsp;it&nbsp;every&nbsp;time</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;the&nbsp;button&nbsp;is&nbsp;pressed.&nbsp;&nbsp;Because&nbsp;jQuery&nbsp;almost&nbsp;always&nbsp;returns&nbsp;the</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;jQuery&nbsp;object,&nbsp;you&nbsp;can&nbsp;save&nbsp;it&nbsp;the&nbsp;first&nbsp;time&nbsp;it&nbsp;is&nbsp;called&nbsp;for&nbsp;future&nbsp;use</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;</div>
<br />
<br />
<p>在我的最后一个关于性能的示例代码中，将查看我在本系列的第一篇文章中提到的小部件（见 <a href="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/?ca=drs-tp4608#resources">参考资料</a>）。这个小部件是在表的左上角上的复选框，它允许您选择或取消选择该列上的所有复选框。这个小部件在电子邮件应用程序中非常常见，用于选择或取消选择所有消息。
</p>
<br />
<a name="listing4"><strong>清单 4. 性能改进</strong></a><br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Here&nbsp;is&nbsp;the&nbsp;code&nbsp;as&nbsp;I&nbsp;originally&nbsp;presented&nbsp;it&nbsp;in&nbsp;that&nbsp;article.&nbsp;&nbsp;Let's&nbsp;see</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;if&nbsp;we&nbsp;can&nbsp;improve&nbsp;the&nbsp;performance&nbsp;in&nbsp;any&nbsp;way&nbsp;from&nbsp;the&nbsp;things&nbsp;we&nbsp;learned&nbsp;here</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;selectAll()<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;checked&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#selectall</span><span style="color: #000000;">"</span><span style="color: #000000;">).attr(</span><span style="color: #000000;">"</span><span style="color: #000000;">checked</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">.selectable</span><span style="color: #000000;">"</span><span style="color: #000000;">).each(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;subChecked&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).attr(</span><span style="color: #000000;">"</span><span style="color: #000000;">checked</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(subChecked&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;checked)<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).click();<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Here's&nbsp;the&nbsp;improved&nbsp;function.&nbsp;&nbsp;The&nbsp;search&nbsp;for&nbsp;the&nbsp;ID&nbsp;of&nbsp;"selectall"&nbsp;is</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;OK&nbsp;as-is,&nbsp;because&nbsp;we&nbsp;saw&nbsp;how&nbsp;fast&nbsp;the&nbsp;ID&nbsp;search&nbsp;is.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;The&nbsp;search&nbsp;for&nbsp;the&nbsp;CLASS&nbsp;of&nbsp;"selectable"&nbsp;was&nbsp;not&nbsp;well-designed&nbsp;though,</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;because&nbsp;we&nbsp;saw&nbsp;a&nbsp;search&nbsp;by&nbsp;CLASS&nbsp;is&nbsp;very&nbsp;inefficient.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;First&nbsp;step&nbsp;was&nbsp;improving&nbsp;the&nbsp;search&nbsp;by&nbsp;supplying&nbsp;as&nbsp;much&nbsp;information&nbsp;as&nbsp;we&nbsp;know.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;We&nbsp;narrowed&nbsp;the&nbsp;search&nbsp;to&nbsp;only&nbsp;checkboxes&nbsp;with&nbsp;the&nbsp;CLASS&nbsp;of&nbsp;selectable.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;This&nbsp;should&nbsp;improve&nbsp;our&nbsp;search</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Further,&nbsp;we&nbsp;can&nbsp;cache&nbsp;this&nbsp;search&nbsp;because&nbsp;we&nbsp;will&nbsp;only&nbsp;need&nbsp;to&nbsp;perform&nbsp;it&nbsp;once</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Finally,&nbsp;we&nbsp;can&nbsp;perform&nbsp;this&nbsp;search&nbsp;before&nbsp;the&nbsp;selectall&nbsp;checkbox&nbsp;is&nbsp;even</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;checked&nbsp;(when&nbsp;the&nbsp;page&nbsp;is&nbsp;finished&nbsp;loading),&nbsp;so&nbsp;that&nbsp;the&nbsp;search&nbsp;is&nbsp;completed</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;and&nbsp;cached&nbsp;before&nbsp;the&nbsp;user&nbsp;even&nbsp;uses&nbsp;it.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;These&nbsp;3&nbsp;simple&nbsp;performance&nbsp;steps&nbsp;gave&nbsp;me&nbsp;a&nbsp;200%&nbsp;increase&nbsp;in&nbsp;speed&nbsp;when&nbsp;tested</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;on&nbsp;a&nbsp;page&nbsp;with&nbsp;200&nbsp;rows&nbsp;of&nbsp;data.</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;selectable&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">:checkbox.selectable</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;selectAll()<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">{<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;checked&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#selectall</span><span style="color: #000000;">"</span><span style="color: #000000;">).attr(</span><span style="color: #000000;">"</span><span style="color: #000000;">checked</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;selectable.each(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;subChecked&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).attr(</span><span style="color: #000000;">"</span><span style="color: #000000;">checked</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(subChecked&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;checked)<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">).click();<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">38</span>&nbsp;</div>
<br />
<br />
<p><a name="N101F3"><span class="atitle">关于性能的要点</span></a></p>
<p>使
用 JavaScript 时，速度和性能绝对不是小问题。在现实中，创建 jQuery 的开发人员和处理浏览器内置 JavaScript
引擎的开发人员都非常关注性能问题。事实上，在最近 6 个月以来，浏览器开发的最重要问题就是 JavaScript
引擎的速度。浏览器开发者都致力于在下一年迅速提升 JavaScript 的执行性能，从而大大提高 jQuery 代码和 JavaScript
引擎的速度。来自这些 &#8220;速度之战&#8221; 的消息表明，提升 JavaScript 性能是大势所趋。领导 jQuery 项目的 John Resig
一直都在谈论他的最新 &#8220;Sizzle&#8221; 选择引擎。他从头编写了一个选择引擎，并声称初步结果表明它比 Firefox 要快 4
倍。这是巨大的速度提升！在我撰写本文的最后部分时，jQuery 1.3 已经发布，并且包含了 Sizzle 选择引擎。jQuery
声称，在所有浏览器上运行的总体结果表明选择引擎的 1.3 版本比 1.2.6 版本的快 49%。此外，1.3 发布版在 HTML 注入（向
DOM 添加新的元素）上改进了 6 倍，在函数定位上改进了 3 倍。在我完成本文时，很多人都更新到了最新的 jQuery
发布版，这是非常令人激动的！</p>
<p>影响 JavaScript 性能的另一个因素是浏览器，如前所述，它的影响是所选的库的 9
倍。Firefox 和 Chrome 在 &#8220;最快 JavaScript 引擎&#8221; 之战中各有胜负，而 Safari
的参与让竞争更加激烈。从我们上面的测试中，可以看到 Chrome 在 JavaScript 引擎性能方面远远超过 Firefox，但是
Firefox 3.1 将包含新的 Tracemonkey JavaScript 引擎，届时其速度将比当前的 JavaScript 引擎
3.0 快 20 至 40 倍（这是他们声称的，不是我的观点），真不可思议！ </p>
<p>在未来一两年内，您将看到底层 JavaScript 引擎和 JavaScript 库的速度得到巨大改进，从而导致使用 JavaScript 的 Web 应用程序将变得更加复杂。</p>
<p>如
果您正在决定是使用 JavaScript 库还是自己编写 JavaScript，那么需要考虑的另一件事情是处理和调试 JavaScript
库所需的全部工作。最近几年以来，有数百位用户一直在维护库中的每一个函数。您可能要忙到深夜，甚至筋疲力尽地编写自己的函数。您更相信谁呢？另外，即使
您能编写出比 jQuery 库更快的代码，您是否想过使用 jQuery
库能够获得更多的优势？您是否为了辛苦地编写自己的代码而放弃使用非常便利的 jQuery
及其函数库？自己编写代码不仅需要大量时间，并且还会产生更多 bug，因此我还是建议使用现成的 jQuery 库。 </p>
<p>我最后讨论的要点可能会让一些人沮丧，但是我们必须考虑编写这些 jQuery
库的程序员。他们当中的一些是最棒的，并且他们编写的超级优秀的代码（一般人不能编写这样出色的代码）都收入到这些库中。我承认自己远远不如编写
jQuery 库的程序员。因此，为何不利用他们的智慧？ </p>
<p><a name="N10209"><span class="atitle">结束语</span></a></p>
<p>本
文从总体上讨论了 jQuery 和 JavaScript 库的性能。通过对选择方法进行大量的测试，您看到这些库之间的速度存在巨大的差距，并且
jQuery 是最快的库之一。不过，即使您选择了最快的 JavaScript 库，还是不能解决 Web
应用程序的性能问题，因为浏览器对性能的影响比库强 9 倍。如果您能够控制用户使用特定的 Web
浏览器，那么就让他们使用最快的浏览器。找到能够最快地运行您的 Web 应用程序的浏览器，并让用户通过使用它从中受益。理想情况下，让最慢的
JavaScript 浏览器消失意味着出现更快的 Web 应用程序。</p>
<p>我还提供了关于 jQuery 性能的 3 个技巧。尽管有好几个站点都提供了关于 jQuery 性能的技巧，但是这 3 个技巧是最有效的。3 个技巧肯定比 50 个技巧容易记住，但其他技巧也是很好的，我将在 <a href="http://www.ibm.com/developerworks/cn/web/wa-aj-advjquery/?ca=drs-tp4608#resources">参考资料</a> 部分指出另外一些技巧。不过，如果您在编写代码时记住了这 3 个技巧，将会获得巨大的性能提升。应该永远记住的 3 个 jQuery 技巧是：通过 ID 搜索比通过 CLASS 搜索快 100 倍，尽可能多地提供搜索信息，以及尽量缓存选择。</p>
<p>最
后，我们快速查看了 jQuery 和浏览器的 JavaScript 引擎即将推出的改进。在我撰写本文的结尾部分时，jQuery 1.3
已经发布了，它承诺在选择和代码的其他方面实现跳跃式性能改进。此外，Firefox 还承诺它的下一代 JavaScript 引擎会快 20 至
40 倍！这些迹象表明，在未来的一两年内，JavaScript 环境会在性能上取得重大突破。在不久的将来，复杂的 Web
应用程序会日益流行，因为快速运行这些程序的条件已经成熟。</p>
<p>在本文结束时，我们应该回过头来重新检验这句话 &#8220;jQuery
在简单的页面上无可挑剔，但在复杂的页面上性能极其低下。在解决性能问题之前，您必须对复杂页面使用常规的
JavaScript。&#8221;根据我的经验，jQuery 的 &#8220;性能问题&#8221; 一样出现在 &#8220;常规的 JavaScript&#8221;
中。事实上，真正影响性能的不是 jQuery 或 JavaScript，而是浏览器。因此我同意这样的观点：使用设计不良的 jQuery
代码的复杂页面运行在 IE6 上时会导致糟糕的性能。不过，我希望您已经了解我要阐述的思想：只要拥有良好的 jQuery 代码、运用 3
个最重要的技巧并选择最快的浏览器，那么即使运行最复杂的页面也不会出现明显的性能问题。</p>
<img src ="http://www.blogjava.net/conans/aggbug/294317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-09-08 15:31 <a href="http://www.blogjava.net/conans/articles/294317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> jQuery Ajax 全解析</title><link>http://www.blogjava.net/conans/articles/213754.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 09 Jul 2008 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/213754.html</guid><description><![CDATA[<p>jQuery确实是一个挺好的轻量级的JS框架，能帮助我们快速的开发JS应用，并在一定程度上改变了我们写JavaScript代码的习惯。</p>
<p>废话少说，直接进入正题，我们先来看一些简单的方法，这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法，当然，如果要处理复杂的逻辑，还是需要用到jQuery.ajax()的(这个后面会说到).</p>
<p><font size="4"><font color="#bb0000"><strong>1. load</strong>( url, [data], [callback] ) ：载入远程 HTML 文件代码并插入至 DOM 中。</font></font></p>
<p><strong>url </strong>(String) : 请求的HTML页的URL地址。</p>
<p><strong>data </strong>(Map) : (可选参数) 发送至服务器的 key/value 数据。</p>
<p><strong>callback </strong>(Callback) : (可选参数) 请求完成时(<font color="#bb0000">不需要是success的</font>)的回调函数。</p>
<p>这个方法默认使用 GET 方式来传递的，如果[data]参数有传递数据进去，就会自动转换为POST方式的。jQuery 1.2 中，可以指定选择符，来筛选载入的 HTML 文档，DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some &gt; selector"。</p>
<p>这个方法可以很方便的动态加载一些HTML文件，例如表单。</p>
<p>示例代码：</p>
<pre>$("<span style="color: #8b0000">.ajax.load</span>").load("<span style="color: #8b0000">http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html .post</span>",
<span style="color: #0000ff">function</span> (responseText, textStatus, XMLHttpRequest){
<span style="color: #0000ff">this</span>;<span style="color: #008000">//在这里this指向的是当前的DOM对象，即$(".ajax.load")[0]</span>
<span style="color: #008000">//alert(responseText);//请求返回的内容</span>
<span style="color: #008000">//alert(textStatus);//请求状态：success，error</span>
<span style="color: #008000">//alert(XMLHttpRequest);//XMLHttpRequest对象</span>
});</pre>
<p>&nbsp;</p>
<div class="ajax load">这里将显示结果。</div>
<p>&nbsp;</p>
<p><strong><font color="#bb0000">注：</font></strong>不知道为什么URL写绝对路径在FF下会出错，知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径，所以在FF下你将会出错并不会看到返回结果。<font color="#ff00ff">还有get()和post()示例都是跨域调用的，发现传上来后没办法获取结果，所以把运行按钮去掉了。</font></p>
<p>&nbsp;</p>
<p><font size="4"><font color="#bb0000"><strong>2. jQuery.get</strong>( url, [data], [callback] )：使用GET方式来进行异步请求</font></font></p>
<blockquote>
<p>参数：</p>
<p><strong>url </strong>(String) : 发送请求的URL地址.</p>
<p><strong>data </strong>(Map) : (可选) 要发送给服务器的数据，以 Key/value 的键值对形式表示，会做为QueryString附加到请求URL中。</p>
<p><strong>callback </strong>(Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。</p>
</blockquote>
<p>这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数，请使用 $.ajax。示例代码：</p>
<pre>$.get("<span style="color: #8b0000">./Ajax.aspx</span>", {Action:"<span style="color: #8b0000">get</span>",Name:"<span style="color: #8b0000">lulu</span>"}, <span style="color: #0000ff">function</span> (data, textStatus){
<span style="color: #008000">//返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.</span>
<span style="color: #0000ff">this</span>; <span style="color: #008000">// 在这里this指向的是Ajax请求的选项配置信息，请参考下图</span>
<span style="color: #0000ff">alert</span>(data);
<span style="color: #008000">//alert(textStatus);//请求状态：success，error等等。
当然这里捕捉不到error，因为error的时候根本不会运行该回调函数</span>
<span style="color: #008000">//alert(this);</span>
});</pre>
<p>点击发送请求：</p>
<p>jQuery.get()回调函数里面的 this ，指向的是Ajax请求的选项配置信息：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_4.png" fade="329209555" jquery1209889101078="18"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="289" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_1.png" width="466" border="0" /></a></p>
<p>&nbsp;</p>
<p><font size="4"><font color="#bb0000"><strong>3. jQuery.post</strong>( url, [data], [callback], [type] ) ：使用POST方式来进行异步请求</font></font></p>
<p>&nbsp;</p>
<blockquote>
<p>参数：</p>
<p><strong>url </strong>(String) : 发送请求的URL地址.</p>
<p><strong>data </strong>(Map) : (可选) 要发送给服务器的数据，以 Key/value 的键值对形式表示。</p>
<p><strong>callback </strong>(Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。</p>
<p><strong>type</strong> (String) : (可选)官方的说明是：Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等)</p>
</blockquote>
<p>这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数，请使用 $.ajax。示例代码：</p>
<p>Ajax.aspx：</p>
<pre>Response.ContentType = "<span style="color: #8b0000">application/json</span>";
Response.Write("<span style="color: #8b0000">{result: '</span>" + Request["<span style="color: #8b0000">Name</span>"] + "<span style="color: #8b0000">,你好！(这消息来自服务器)'}</span>");</pre>
<p>jQuery 代码： </p>
<pre>$.post("<span style="color: #8b0000">Ajax.aspx</span>", { Action: "<span style="color: #8b0000">post</span>", Name: "<span style="color: #8b0000">lulu</span>" },
<span style="color: #0000ff">function</span> (data, textStatus){
<span style="color: #008000">// data 可以是 xmlDoc, jsonObj, html, text, 等等.</span>
<span style="color: #008000">//this; // 这个Ajax请求的选项配置信息，请参考jQuery.get()说到的this</span>
<span style="color: #0000ff">alert</span>(data.result);
}, "<span style="color: #8b0000">json</span>");</pre>
<p>点击提交：</p>
<p>这里设置了请求的格式为"json"：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_6.png" jquery1209889101078="19"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_2.png" width="440" border="0" /></a></p>
<p>如果你设置了请求的格式为"json"，此时你没有设置Response回来的ContentType 为：Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。</p>
<p>注意一下，<span style="color: #0000ff">alert</span>(data.result); 由于设置了Accept报头为&#8220;json&#8221;，这里返回的data就是一个对象，并不需要用eval()来转换为对象。</p>
<p>&nbsp;</p>
<p><font color="#bb0000"><font size="4"><strong>4. jQuery.getScript</strong>( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件</font>。</font></p>
<blockquote>
<h4>参数</h4>
<p><strong>url </strong>(String) : 待载入 JS 文件地址。</p>
<p><strong>callback </strong>(Function) : (可选) 成功载入后回调函数。</p>
</blockquote>
<p>jQuery 1.2 版本之前，getScript 只能调用同域 JS 文件。 1.2中，您可以跨域调用 JavaScript 文件。注意：Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本，请加入延时函数。</p>
<p>这个方法可以用在例如当只有编辑器focus()的时候才去加载编辑器需要的JS文件.下面看一些示例代码：</p>
<p>加载并执行 test.js。 </p>
<p><strong>jQuery 代码:</strong></p>
<p>$.getScript("test.js");</p>
<hr />
<p>加载并执行 AjaxEvent.js ，成功后显示信息。</p>
<p><strong>jQuery 代码:</strong></p>
<pre>$.getScript("<span style="color: #8b0000">AjaxEvent.js</span>", <span style="color: #0000ff">function</span>(){
<span style="color: #0000ff">alert</span>("<span style="color: #8b0000">AjaxEvent.js 加载完成并执行完成.你再点击上面的Get或Post按钮看看有什么不同？</span>");
});</pre>
<p>&nbsp;</p>
<p>加载完后请重新点击一下上面的 Load 请求看看有什么不同。</p>
<p><font color="#bb0000" size="4"><strong>jQuery Ajax 事件</strong></font></p>
<p>Ajax请求会产生若干不同的事件，我们可以订阅这些事件并在其中处理我们的逻辑。在jQuery这里有两种Ajax事件：局部事件 和 全局事件。</p>
<p><strong>局部事件</strong>就是在每次的Ajax请求时在方法内定义的，例如：</p>
<pre>$.ajax({
beforeSend: <span style="color: #0000ff">function</span>(){
<span style="color: #008000">// Handle the beforeSend event</span>
},
complete: <span style="color: #0000ff">function</span>(){
<span style="color: #008000">// Handle the complete event</span>
}
<span style="color: #008000">// ...</span>
});</pre>
<p><strong>全局事件</strong>是每次的Ajax请求都会触发的，它会向DOM中的所有元素广播，在上面 getScript() 示例中加载的脚本就是全局Ajax事件。全局事件可以如下定义：</p>
<pre>$("<span style="color: #8b0000">#loading</span>").bind("<span style="color: #8b0000">ajaxSend</span>", <span style="color: #0000ff">function</span>(){
$(<span style="color: #0000ff">this</span>).show();
}).bind("<span style="color: #8b0000">ajaxComplete</span>", <span style="color: #0000ff">function</span>(){
$(<span style="color: #0000ff">this</span>).hide();
});</pre>
<p>或者：</p>
<pre>$("<span style="color: #8b0000">#loading</span>").ajaxStart(<span style="color: #0000ff">function</span>(){
$(<span style="color: #0000ff">this</span>).show();
});</pre>
<p>我们可以在特定的请求将全局事件禁用，只要设置下 global 选项就可以了：</p>
<pre>$.ajax({
url: "<span style="color: #8b0000">test.html</span>",
global: <span style="color: #0000ff">false</span>,<span style="color: #008000">// 禁用全局Ajax事件.</span>
<span style="color: #008000">// ...</span>
});</pre>
<p>下面是jQuery官方给出的完整的Ajax事件列表：</p>
<li><strong>ajaxStart</strong> (Global Event) This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.
<ul>
    <li><strong>beforeSend</strong> (Local Event) This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.)
    <li><strong>ajaxSend</strong> (Global Event) This global event is also triggered before the request is run.
    <li><strong>success</strong> (Local Event) This event is only called if the request was successful (no errors from the server, no errors with the data).
    <li><strong>ajaxSuccess</strong> (Global Event) This event is also only called if the request was successful.
    <li><strong>error</strong> (Local Event) This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request).
    <li><strong>ajaxError</strong> (Global Event) This global event behaves the same as the local error event.
    <li><strong>complete</strong> (Local Event) This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.
    <li><strong>ajaxComplete</strong> (Global Event) This event behaves the same as the complete event and will be triggered every time an Ajax request finishes. </li>
</ul>
<li><strong>ajaxStop</strong> (Global Event) This global event is triggered if there are no more Ajax requests being processed.
<p>具体的全局事件请参考API文档。好了，下面开始说jQuery里面功能最强的Ajax请求方法 $.ajax();&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p><font size="4"><font color="#bb0000"><strong>jQuery.ajax</strong>( options ) : 通过 HTTP 请求加载远程数据</font></font></p>
<p>这个是jQuery 的底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。</p>
<p>$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象，但特殊情况下可用于手动终止请求。</p>
<p><strong>注意：</strong> 如果你指定了 dataType 选项，请确保服务器返回正确的 MIME 信息，(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。见 <a href="http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests" fade="329209389" jquery1209889101078="20">Specifying the Data Type for AJAX Requests</a> 。当设置 datatype 类型为 'script' 的时候，所有的远程(不在同一个域中)POST请求都回转换为GET方式。</p>
<p>$.ajax() 只有一个参数：参数 key/value 对象，包含各配置及回调函数信息。详细参数选项见下。</p>
<p>jQuery 1.2 中，您可以跨域加载 JSON 数据，使用时需将数据类型设置为 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jquery1209889101078="21">JSONP</a>。使用 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jquery1209889101078="22">JSONP</a> 形式调用函数时，如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。数据类型设置为 "jsonp" 时，jQuery 将自动调用回调函数。(这个我不是很懂)</p>
<p>参数列表：</p>
<p>
<table cellspacing="2" cellpadding="2" width="600" border="1">
    <tbody>
        <tr>
            <td valign="top" width="90"><font color="#bb0000">参数名</font></td>
            <td valign="top" width="83"><font color="#bb0000">类型</font></td>
            <td valign="top" width="419"><font color="#bb0000">描述</font></td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>url </strong></td>
            <td valign="top" width="83">String</td>
            <td valign="top" width="419">(默认: 当前页地址) 发送请求的地址。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>type</strong></td>
            <td valign="top" width="83">String</td>
            <td valign="top" width="419">(默认: "GET") 请求方式 ("POST" 或 "GET")， 默认为 "GET"。注意：其它 HTTP 请求方法，如 PUT 和 DELETE 也可以使用，但仅部分浏览器支持。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>timeout</strong></td>
            <td valign="top" width="83">Number</td>
            <td valign="top" width="419">设置请求超时时间（毫秒）。此设置将覆盖全局设置。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>async </strong></td>
            <td valign="top" width="83">Boolean</td>
            <td valign="top" width="419">(默认: true) 默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>beforeSend </strong></td>
            <td valign="top" width="83">Function</td>
            <td valign="top" width="419">发送请求前可修改 XMLHttpRequest 对象的函数，如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。
            <pre><span style="color: #0000ff">function</span> (XMLHttpRequest) {
            <span style="color: #0000ff">this</span>; <span style="color: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>cache </strong></td>
            <td valign="top" width="83">Boolean</td>
            <td valign="top" width="419">(默认: true) jQuery 1.2 新功能，设置为 false 将不会从浏览器缓存中加载请求信息。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>complete </strong></td>
            <td valign="top" width="83">Function</td>
            <td valign="top" width="419">请求完成后回调函数 (请求成功或失败时均调用)。参数： XMLHttpRequest 对象，成功信息字符串。
            <pre><span style="color: #0000ff">function</span> (XMLHttpRequest, textStatus) {
            <span style="color: #0000ff">this</span>; <span style="color: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>contentType </strong></td>
            <td valign="top" width="83">String</td>
            <td valign="top" width="419">(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>data </strong></td>
            <td valign="top" width="83">Object, String</td>
            <td valign="top" width="419">发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组，jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&amp;foo=bar1&amp;foo=bar2'。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>dataType </strong></td>
            <td valign="top" width="83">String</td>
            <td valign="top" width="419">
            <p>预期服务器返回的数据类型。如果不指定，jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText，并作为回调函数参数传递，可用值:</p>
            <p>"xml": 返回 XML 文档，可用 jQuery 处理。</p>
            <p>"html": 返回纯文本 HTML 信息；包含 script 元素。</p>
            <p>"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。</p>
            <p>"json": 返回 JSON 数据 。</p>
            <p>"jsonp": <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jquery1209889101078="23">JSONP</a> 格式。使用 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jquery1209889101078="24">JSONP</a> 形式调用函数时，如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。</p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>error </strong></td>
            <td valign="top" width="83">Function</td>
            <td valign="top" width="419">(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数：XMLHttpRequest 对象，错误信息，（可能）捕获的错误对象。
            <pre><span style="color: #0000ff">function</span> (XMLHttpRequest, textStatus, errorThrown) {
            <span style="color: #008000">// 通常情况下textStatus和errorThown只有其中一个有值 </span>
            <span style="color: #0000ff">this</span>; <span style="color: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>global </strong></td>
            <td valign="top" width="83">Boolean</td>
            <td valign="top" width="419">(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件，如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>ifModified </strong></td>
            <td valign="top" width="83">Boolean</td>
            <td valign="top" width="419">(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>processData </strong></td>
            <td valign="top" width="83">Boolean</td>
            <td valign="top" width="419">(默认: true) 默认情况下，发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息，请设置为 false。</td>
        </tr>
        <tr>
            <td valign="top" width="90"><strong>success </strong></td>
            <td valign="top" width="83">Function</td>
            <td valign="top" width="419">请求成功后回调函数。这个方法有两个参数：服务器返回数据，返回状态
            <pre><span style="color: #0000ff">function</span> (data, textStatus) {
            <span style="color: #008000">// data could be xmlDoc, jsonObj, html, text, etc...</span>
            <span style="color: #0000ff">this</span>; <span style="color: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>这里有几个Ajax事件参数：<strong>beforeSend </strong>，<strong>success </strong>，<strong>complete ，error 。</strong>我们可以定义这些事件来很好的处理我们的每一次的Ajax请求。注意一下，这些Ajax事件里面的 <font color="#0000ff">this</font> 都是指向Ajax请求的选项信息的(请参考说 get() 方法时的this的图片)。请认真阅读上面的参数列表，如果你要用jQuery来进行Ajax开发，那么这些参数你都必需熟知的。</p>
<h4>示例代码，获取博客园首页的文章题目：</h4>
<pre>$.ajax({
type: "<span style="color: #8b0000">get</span>",
url: "<span style="color: #8b0000">http://www.cnblogs.com/rss</span>",
beforeSend: <span style="color: #0000ff">function</span>(XMLHttpRequest){
<span style="color: #008000">//ShowLoading();</span>
},
success: <span style="color: #0000ff">function</span>(data, textStatus){
$("<span style="color: #8b0000">.ajax.ajaxResult</span>").html("");
$("<span style="color: #8b0000">item</span>",data).each(<span style="color: #0000ff">function</span>(i, domEle){
$("<span style="color: #8b0000">.ajax.ajaxResult</span>").append("<span style="color: #8b0000">&lt;li&gt;</span>"+$(domEle).children("<span style="color: #8b0000">title</span>").text()+"<span style="color: #8b0000">&lt;/li&gt;</span>");
});
},
complete: <span style="color: #0000ff">function</span>(XMLHttpRequest, textStatus){
<span style="color: #008000">//HideLoading();</span>
},
error: <span style="color: #0000ff">function</span>(){
<span style="color: #008000">//请求出错处理</span>
}
});</pre>
<p>&nbsp;</p>
<p class="ajax ajaxResult">这里将显示首页文章列表。</p>
<p class="ajax ajaxResult">&nbsp;</p>
<p>&nbsp;</p>
<p><font color="#bb0000" size="4"><strong>其他</strong></font></p>
<p><font color="#bb0000"><strong>jQuery.ajaxSetup</strong>( options ) : 设置全局 AJAX 默认选项。</font></p>
<p>设置 AJAX 请求默认地址为 "/xmlhttp/"，禁止触发全局 AJAX 事件，用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。</p>
<p><strong>jQuery 代码:</strong></p>
<pre>$.ajaxSetup({
url: "<span style="color: #8b0000">/xmlhttp/</span>",
global: <span style="color: #0000ff">false</span>,
type: "<span style="color: #8b0000">POST</span>"
});
$.ajax({ data: myData });</pre>
<p>&nbsp;</p>
<p><strong><font color="#bb0000" size="4">serialize() 与 serializeArray()</font></strong></p>
<p>serialize() : 序列表表格内容为字符串。</p>
<p>serializeArray() : 序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。</p>
<p>示例：</p>
<p>HTML代码：</p>
<pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"results"</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">b</span><span style="color: #0000ff">&gt;</span>Results: <span style="color: #0000ff">&lt;/</span><span style="color: #800000">b</span><span style="color: #0000ff">&gt;</span> <span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">select</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"single"</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>Single<span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>Single2<span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">select</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">select</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"multiple"</span> <span style="color: #ff0000">multiple</span>=<span style="color: #0000ff">"multiple"</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">option</span> <span style="color: #ff0000">selected</span>=<span style="color: #0000ff">"selected"</span><span style="color: #0000ff">&gt;</span>Multiple<span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>Multiple2<span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">option</span> <span style="color: #ff0000">selected</span>=<span style="color: #0000ff">"selected"</span><span style="color: #0000ff">&gt;</span>Multiple3<span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">select</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">/&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"checkbox"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"check"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"check1"</span><span style="color: #0000ff">/&gt;</span> check1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"checkbox"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"check"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"check2"</span>
<span style="color: #ff0000">checked</span>=<span style="color: #0000ff">"checked"</span><span style="color: #0000ff">/&gt;</span> check2
<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"radio"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"radio"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"radio1"</span>
<span style="color: #ff0000">checked</span>=<span style="color: #0000ff">"checked"</span><span style="color: #0000ff">/&gt;</span> radio1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"radio"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"radio"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"radio2"</span><span style="color: #0000ff">/&gt;</span> radio2
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></pre>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_8.png" jquery1209889101078="25"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="106" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_3.png" width="812" border="0" /></a></p>
<p><strong><font color="#bb0000">serializeArray() 结果为：</font></strong></p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_10.png" fade="329209610" jquery1209889101078="26"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="338" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_4.png" width="513" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong><font color="#bb0000">一些资源</font></strong></p>
<p>一个jQuery的Ajax Form表单插件：<a style="background-color: rgb(255,255,245)" href="http://www.malsup.com/jquery/form/" fade="329209619" jquery1209889101078="27">http://www.malsup.com/jquery/form/</a></p>
<p>一个专门生成Loading图片的站点：<a title="http://ajaxload.info/" href="http://ajaxload.info/" jquery1209889101078="28">http://ajaxload.info/</a>&nbsp;&nbsp; 大家觉得那些Loading比较炫的可以在这里跟帖晒一下，方便大家取用，嘎嘎</p>
</li>
<img src ="http://www.blogjava.net/conans/aggbug/213754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-09 19:10 <a href="http://www.blogjava.net/conans/articles/213754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jquery和prototype冲突解决 </title><link>http://www.blogjava.net/conans/articles/212858.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sun, 06 Jul 2008 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/212858.html</guid><description><![CDATA[<p>问题背景: 想用 jQuery 做 AJAX 处理, 用基于 Prototype 的 EasyValidation 做表单验证, 但是二者不能共存, 因为都用了同一个方法名: $().
<p>解决:
<p>jquery和prototype冲突解决, 网上流传的一篇文章,我这里测试结果是错误的! <a href="http://ajaxbbs.net/blog/post/71/">http://ajaxbbs.net/blog/post/71/</a>
<p>另一种方式是:<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery.noConflict();<br />
&lt;/script&gt;
<p>参考: <a href="http://www.d5s.cn/archives/6">http://www.d5s.cn/archives/6</a>, 但我这里测试也有问题!
<p>本人测试通过的方式:
<p>1、将jquery.js放到prototype.js前面（这个是必须的!）。<br />
2、在jquery.js后面将$变量重命名。<br />
方法如下：
<p>&lt;script type="text/javascript"&nbsp; src="jquery.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var jQuery=$;<br />
&lt;/script&gt;
<p>&lt;script type="text/javascript" type="text/javascript" src="window.js"&gt;&lt;/script&gt;<br />
&lt;!--上面这个window.js调用了jquery框架的方法--&gt;<br />
&lt;script type="text/javascript" type="text/javascript" src="prototype.js"&gt;&lt;/script&gt;
<p>3、将原来使用的$方法名一律替换为jQuery名，如$("obj")替换为jQuery("obj")。
<p>例如下面的一段代码, 混合了 jQuery和基于Prototype的 EasyValidation:
<p>&lt;!--&nbsp; jquery, 注意加载顺序 --&gt;<br />
&lt;script src="js/jquery-1.2.6.pack.js"&gt;&lt;/script&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var jQuery=$;<br />
&lt;/script&gt;
<p>&lt;!-- 表单验证 --&gt;<br />
&lt;script src="easy_validation/lib/prototype.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script src="easy_validation/lib/effects.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script src="easy_validation/src/validation_cn.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;link rel="stylesheet" type="text/css" href="easy_validation/styles/style_min.css" /&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;div id="contents"&gt;&lt;/div&gt;<br />
&nbsp; &lt;script&gt;<br />
&nbsp; jQuery(document).ready(function(){<br />
&nbsp;&nbsp;&nbsp; //jQuery("#contents").load("test.jsp");<br />
&nbsp;&nbsp;&nbsp; jQuery("#contents").load("test.jsp?username=BeanSoft")<br />
&nbsp; });<br />
&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 为form增加required-validate class,标识需要验证form --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form id='helloworld' action="#" class='required-validate'&gt;<br />
&lt;input name="user.name" class="required min-length-6 max-length-20 validate-alphanum" value="beansoft"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; *密码:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="user.password" type="password" class="required min-length-6 max-length-20" value="123456" &gt;
<p>&nbsp;&nbsp;&nbsp; *密码(重复):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input name="password1" type="password" class="required equals-user.password" value="123456" &gt;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type='submit' value='Submit'/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type='reset' value='Reset'/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt; </p>
<img src ="http://www.blogjava.net/conans/aggbug/212858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-07-06 15:04 <a href="http://www.blogjava.net/conans/articles/212858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  jQuery应用(三)--jQuery技巧总结</title><link>http://www.blogjava.net/conans/articles/209584.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209584.html</guid><description><![CDATA[<strong>语法总结和注意事项</strong>
<p><strong>1、关于页面元素的引用</strong></p>
<p>通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法，且返回的对象为jquery对象（集合对象），不能直接调用dom定义的方法。</p>
<p><strong>2、jQuery对象与dom对象的转换</strong></p>
<p>只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的，调用方法时要注意操作的是dom对象还是jquery对象。<br />
普通的dom对象一般可以通过$()转换成jquery对象。<br />
如：$(document.getElementById("msg"))则为jquery对象，可以使用jquery的方法。<br />
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项，一般可通过索引取出。<br />
如：$("#msg")[0]，$("div").eq(1)[0]，$("div").get()[1]，$("td")[5]这些都是dom对象，可以使用dom中的方法，但不能再使用Jquery的方法。<br />
以下几种写法都是正确的：</p>
<p><span class="code">$("#msg").html();<br />
$("#msg")[0].innerHTML;<br />
$("#msg").eq(0)[0].innerHTML;<br />
$("#msg").get(0).innerHTML;</span></p>
<p><strong>3、如何获取jQuery集合的某一项</strong></p>
<p>对于获取的元素集合，获取其中的某一项（通过索引指定）可以使用eq或get(n)方法或者索引号获取，要注意，eq返回的是jquery对象，而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法，而dom对象只能使用dom的方法，如要获取第三个&lt;div&gt;元素的内容。有如下两种方法：</p>
<p><span class="code">$("div").eq(2).html();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用jquery对象的方法<br />
$("div").get(2).innerHTML;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用dom的方法属性</span></p>
<p><strong>4、同一函数实现set和get</strong></p>
<p>Jquery中的很多方法都是如此，主要包括如下几个：</p>
<p></p>
<p>$("#msg").html();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回id为msg的元素节点的html内容。<br />
$("#msg").html("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content</p>
<p>$("#msg").text();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回id为msg的元素节点的文本内容。<br />
$("#msg").text("&lt;b&gt;new content&lt;/b&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//将&#8220;&lt;b&gt;new content&lt;/b&gt;&#8221; 作为普通文本串写入id为msg的元素节点内容中,页面显示&lt;b&gt;new content&lt;/b&gt;</p>
<p>$("#msg").height();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回id为msg的元素的高度<br />
$("#msg").height("300");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将id为msg的元素的高度设为300<br />
$("#msg").width();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回id为msg的元素的宽度<br />
$("#msg").width("300");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将id为msg的元素的宽度设为300</p>
<p>$("input").val(");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回表单输入框的value值<br />
$("input").val("test");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将表单输入框的value值设为test</p>
<p>$("#msg").click();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //触发id为msg的元素的单击事件<br />
$("#msg").click(fn);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为id为msg的元素单击事件添加函数</p>
<p>&nbsp;</p>
<p>同样blur,focus,select,submit事件都可以有这两种调用方法</p>
&nbsp;
<p><strong>5、集合处理功能</strong></p>
<p>对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理，jquery已经为我们提供的很方便的方法进行集合的处理。<br />
包括两种形式：</p>
<p></p>
<p><strong>6、扩展我们需要的功能</strong></p>
<p><span class="code">$.extend({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; min: function(a, b){return a &lt; b?a:b; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max: function(a, b){return a &gt; b?a:b; } <br />
});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为jquery扩展了min,max两个方法</span></p>
<p>使用扩展的方法（通过&#8220;$.方法名&#8221;调用）：</p>
<p><span class="code">alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));</span></p>
<p><strong>7、支持方法的连写</strong><br />
所谓连写，即可以对一个jquery对象连续调用各种不同的方法。</p>
<p>例如：</p>
<p><span class="code">$("p").click(function(){alert($(this).html())})<br />
.mouseover(function(){alert('mouse over event')})<br />
.each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});</span></p>
<p><strong>8、操作元素的样式</strong></p>
<p>主要包括以下几种方式：</p>
<p><span class="code">$("#msg").css("background");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回元素的背景颜色<br />
$("#msg").css("background","#ccc")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设定元素背景为灰色<br />
$("#msg").height(300); $("#msg").width("200");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设定宽高<br />
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式<br />
$("#msg").addClass("select");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为元素增加名称为select的class<br />
$("#msg").removeClass("select");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除元素名称为select的class<br />
$("#msg").toggleClass("select");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果存在（不存在）就删除（添加）名称为select的class</span></p>
<p><strong>9、完善的事件处理功能</strong></p>
<p>Jquery已经为我们提供了各种事件处理方法，我们无需在html元素上直接写事件，而可以直接为通过jquery获取的对象添加事件。<br />
如：<br />
<span class="code">$("#msg").click(function(){alert("good")})&nbsp;&nbsp;&nbsp;&nbsp;//为元素添加了单击事件<br />
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]})&nbsp;&nbsp; //为三个不同的p元素单击事件分别设定不同的处理</span></p>
<p>jQuery中几个自定义的事件：</p>
<p>（1）hover(fn1,fn2)：一个模仿悬停事件（鼠标移动到一个对象上面及移出这个对象）的方法。当鼠标移动到一个匹配的元素上面时，会触发指定的第一个函数。当鼠标移出这个元素时，会触发指定的第二个函数。</p>
<p>//当鼠标放在表格的某行上时将class置为over，离开时置为out。<br />
<span class="code">$("tr").hover(function(){<br />
$(this).addClass("over");<br />
},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).addClass("out"); <br />
});</span></p>
<p>（2）ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。</p>
<p><span class="code">$(document).ready(function(){alert("Load Success")})<br />
//页面加载完毕提示&#8220;Load Success&#8221;,不同于onload事件，onload需要页面内容加载完毕（图片等），而ready只要页面html代码下载完毕即触发。与$(fn)等价</span></p>
<p>（3）toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素，则触发指定的第一个函数，当再次点击同一元素时，则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。</p>
<p><span class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //每次点击时轮换添加和删除名为selected的class。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("p").toggle(function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).addClass("selected");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(this).removeClass("selected"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</span></p>
<p>（4）trigger(eventtype): 在每一个匹配的元素上触发某类事件。<br />
例如：<br />
<span class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("p").trigger("click");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//触发所有p元素的click事件</span></p>
<p>（5）bind(eventtype,fn)，unbind(eventtype): 事件的绑定与反绑定<br />
从每一个匹配的元素中（添加）删除绑定的事件。<br />
例如：<br />
<span class="code">$("p").bind("click", function(){alert($(this).text());});&nbsp;<br />
//为每个p元素添加单击事件<br />
$("p").unbind();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除所有p元素上的所有事件<br />
$("p").unbind("click")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除所有p元素上的单击事件</span></p>
<span class="code">
<p><strong>10、几个实用特效功能</strong></p>
<p>其中toggle()和slidetoggle()方法提供了状态切换功能。<br />
如toggle()方法包括了hide()和show()方法。<br />
slideToggle()方法包括了slideDown()和slideUp方法。</p>
<p><strong>11、几个有用的jQuery方法</strong></p>
<p>$.browser.浏览器类型：检测浏览器类型。有效参数：safari, opera, msie, mozilla。如检测是否ie：$.browser.isie，是ie浏览器则返回true。<br />
$.each(obj, fn)：通用的迭代函数。可用于近似地迭代对象和数组（代替循环）。<br />
如<br />
<span class="code">$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); }); </span></p>
<p>等价于：<br />
<span class="code">var tempArr=[0,1,2];<br />
for(var i=0;i&lt;tempArr.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("Item #"+i+": "+tempArr[i]);<br />
}</span></p>
<p>也可以处理json数据，如<br />
<span class="code">$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });</span></p>
<p>结果为：<br />
Name:name, Value:John<br />
Name:lang, Value:JS<br />
$.extend(target,prop1,propN)：用一个或多个其他对象来扩展一个对象，返回这个被扩展的对象。这是jquery实现的继承方式。<br />
如：<br />
<span class="code" style="width: 503px; height: 138px">$.extend(settings, options);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//合并settings和options，并将合并结果返回settings中，相当于options继承setting并将继承结果保存在setting中。<br />
var settings = $.extend({}, defaults, options);<br />
//合并defaults和options，并将合并结果返回到setting中而不覆盖default内容。<br />
可以有多个参数（合并多项并返回）</span></p>
<p>$.map(array, fn)：数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中，并返回生成的新数组。<br />
如：<br />
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });<br />
tempArr内容为：[4,5,6]<br />
var tempArr=$.map( [0,1,2], function(i){ return i &gt; 0 ? i + 1 : null; });<br />
tempArr内容为：[2,3]<br />
$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。<br />
如：<br />
<span class="code">$.merge( [0,1,2], [2,3,4] )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回[0,1,2,3,4]</span></p>
<p>$.trim(str)：删除字符串两端的空白字符。 <br />
如：<br />
<span class="code">$.trim("&nbsp; hello, how are you?&nbsp;&nbsp; ");&nbsp;&nbsp;&nbsp;&nbsp;//返回"hello,how are you? "</span></p>
<p><strong>12、解决自定义方法或其他类库与jQuery的冲突</strong></p>
<p>很多时候我们自己定义了$(id)方法来获取一个元素，或者其他的一些js类库如prototype也都定义了$方法，如果同时把这些内容放在一起就会引起变量方法定义冲突，Jquery对此专门提供了方法用于解决此问题。<br />
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可，如原来引用对象方法$("#msg")改为jQuery("#msg")。<br />
如：</p>
<p><span class="code">jQuery.noConflict(); <br />
// 开始使用jQuery<br />
jQuery("div&nbsp;&nbsp; p").hide();<br />
// 使用其他库的 $() <br />
$("content").style.display = 'none';</span></p>
</span>
<p>&nbsp;</p>
<p>$("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]})&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//为索引分别为0，1，2的p元素分别设定不同的字体颜色。</p>
<p>$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//实现表格的隔行换色效果</p>
<p>$("p").click(function(){alert($(this).html())})&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
//为每个p元素增加了click事件，单击某个p元素则弹出其内容</p>
<img src ="http://www.blogjava.net/conans/aggbug/209584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:00 <a href="http://www.blogjava.net/conans/articles/209584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery应用(二)--jQuery让Ajax变得异常简单 </title><link>http://www.blogjava.net/conans/articles/209583.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209583.html</guid><description><![CDATA[<p>jQuery让Ajax变得异常简单</p>
<p>使用jQuery,Ajax恐怕不能变得再简单了. jQuery有一系列的函数,可以使简单的事情变得真正简单,让复杂的事情也能变得尽可能<br />
的简单.</p>
<p>Ajax的一个一般用法就是加载一段html代码到页面上的某一区域. 要实现这个,你只要简单的选中这个元素,然后使用load()函数.<br />
下面是个例子,用来更新一些统计信息.</p>
<p>$('#stats').load('stats.html');通常,你可能需要向服务器端的页面传递一些参数. 你可能猜到了, 使用jQuery来实现的话会十分简单.你可以选择使用$.post()或者$.get(), 当然要根据你的具体需要. 如果需要, 你可以传递一个可选的数据对象和一个回调函数.Listing4是一个发送数据以及使用回调函数的简单例子:</p>
<p>[url=]Listing 4. Sending data to a page with Ajax[/url]</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_19_59_Open_Image" onclick="this.style.display='none'; document.getElementById('_19_59_Open_Text').style.display='none'; document.getElementById('_19_59_Closed_Image').style.display='inline'; document.getElementById('_19_59_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_19_59_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_19_59_Closed_Text').style.display='none'; document.getElementById('_19_59_Open_Image').style.display='inline'; document.getElementById('_19_59_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$.post(</span><span style="color: #000000">'</span><span style="color: #000000">save.cgi</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span id="_19_59_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_19_59_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;text:&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">my&nbsp;string</span><span style="color: #000000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;number:&nbsp;</span><span style="color: #000000">23</span><span style="color: #000000"><br />
<img id="_73_115_Open_Image" onclick="this.style.display='none'; document.getElementById('_73_115_Open_Text').style.display='none'; document.getElementById('_73_115_Closed_Image').style.display='inline'; document.getElementById('_73_115_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_73_115_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_73_115_Closed_Text').style.display='none'; document.getElementById('_73_115_Open_Image').style.display='inline'; document.getElementById('_73_115_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />}</span></span><span style="color: #000000">,&nbsp;function()&nbsp;</span><span id="_73_115_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_73_115_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">'</span><span style="color: #000000">Your&nbsp;data&nbsp;has&nbsp;been&nbsp;saved.</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
<p>如果你真的想要一些复杂的Ajax代码,那就是用$.ajax()函数. 你可以指定数据类型为xml, html, script或者json, jQuery 会为你自动准备好结果一遍你的回调函数能够立即使用这些数据. 你还可以设定 beforeSend,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error, success, 以及&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; complete 回调函数来给用户一些ajax体验的更多提示信息. 另外,还有一些参数,可以让你设置ajax请求的超时时间,或者一个页面的"最后更改"状态. Listing5展示了一个获取xml文档并使用我上面提到的一些参数的简单例子:</p>
<p>[url=]Listing 5. Complex Ajax made simple with $.ajax()[/url]</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_7_233_Open_Image" onclick="this.style.display='none'; document.getElementById('_7_233_Open_Text').style.display='none'; document.getElementById('_7_233_Closed_Image').style.display='inline'; document.getElementById('_7_233_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_7_233_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_7_233_Closed_Text').style.display='none'; document.getElementById('_7_233_Open_Image').style.display='inline'; document.getElementById('_7_233_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$.ajax(</span><span id="_7_233_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_7_233_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">document.xml</span><span style="color: #000000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">GET</span><span style="color: #000000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">xml</span><span style="color: #000000">'</span><span style="color: #000000">,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;timeout:&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">,<br />
<img id="_112_163_Open_Image" onclick="this.style.display='none'; document.getElementById('_112_163_Open_Text').style.display='none'; document.getElementById('_112_163_Closed_Image').style.display='inline'; document.getElementById('_112_163_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_112_163_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_112_163_Closed_Text').style.display='none'; document.getElementById('_112_163_Open_Image').style.display='inline'; document.getElementById('_112_163_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;error:&nbsp;function()</span><span id="_112_163_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_112_163_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">'</span><span style="color: #000000">Error&nbsp;loading&nbsp;XML&nbsp;document</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">,<br />
<img id="_192_231_Open_Image" onclick="this.style.display='none'; document.getElementById('_192_231_Open_Text').style.display='none'; document.getElementById('_192_231_Closed_Image').style.display='inline'; document.getElementById('_192_231_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_192_231_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_192_231_Closed_Text').style.display='none'; document.getElementById('_192_231_Open_Image').style.display='inline'; document.getElementById('_192_231_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function(xml)</span><span id="_192_231_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_192_231_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;do&nbsp;something&nbsp;with&nbsp;xml</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
<p>当你成功的获得xml反馈的时候, 你可以使用jQuery来遍历xml文档,就像你操作html的方式一样.这使操作一个xml文件以及整合内容到页面上变得十分的简单. Listing6 扩展了success函数,根据xml文档里的每个&lt;item&gt;在页面上增加一个了list(列表)条目.</p>
<p>[url=]Listing 6. Working with XML using jQuery[/url]</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_22_195_Open_Image" onclick="this.style.display='none'; document.getElementById('_22_195_Open_Text').style.display='none'; document.getElementById('_22_195_Closed_Image').style.display='inline'; document.getElementById('_22_195_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_22_195_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_22_195_Closed_Text').style.display='none'; document.getElementById('_22_195_Open_Image').style.display='inline'; document.getElementById('_22_195_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">success:&nbsp;function(xml)</span><span id="_22_195_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_22_195_Open_Text"><span style="color: #000000">{<br />
<img id="_63_191_Open_Image" onclick="this.style.display='none'; document.getElementById('_63_191_Open_Text').style.display='none'; document.getElementById('_63_191_Closed_Image').style.display='inline'; document.getElementById('_63_191_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_63_191_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_63_191_Closed_Text').style.display='none'; document.getElementById('_63_191_Open_Image').style.display='inline'; document.getElementById('_63_191_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(xml).find(</span><span style="color: #000000">'</span><span style="color: #000000">item</span><span style="color: #000000">'</span><span style="color: #000000">).each(function()</span><span id="_63_191_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_63_191_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;item_text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).text();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">'</span><span style="color: #000000">&lt;li&gt;&lt;/li&gt;</span><span style="color: #000000">'</span><span style="color: #000000">)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.html(item_text)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.appendTo(</span><span style="color: #000000">'</span><span style="color: #000000">ol</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span></div>
</div>
<p><br />
</p>
<img src ="http://www.blogjava.net/conans/aggbug/209583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 22:59 <a href="http://www.blogjava.net/conans/articles/209583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery应用(一)--基本操作 </title><link>http://www.blogjava.net/conans/articles/209581.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209581.html</guid><description><![CDATA[<p><strong>前言：</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery是一个不错的javascript产品，我曾经想总结一些javascript的一些常用功能，以备自己调用，然而看了jQuery，发现他做的太强了，不得不向他学习。&#8220;永远学习强者&#8221;，但是也告诫自己，不要被它们绑住了双手，否则你的创造性就会被扼杀，我建议当工具使用，不必死计其语法，否则自己就&#8220;晕&#8221;了。我希望有更多有创造性的产品出现。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 获取jQuery最新版本：<a href="http://jquery.com/src/"><font color="#3468a4">http://jquery.com/src/</font></a></p>
<p><strong>一、基本操作：</strong></p>
<p>1、当文档（dom）加载完毕后，立即执行内容：</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_62_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_62_Open_Text').style.display='none'; document.getElementById('_29_62_Closed_Image').style.display='inline'; document.getElementById('_29_62_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_62_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_62_Closed_Text').style.display='none'; document.getElementById('_29_62_Open_Image').style.display='inline'; document.getElementById('_29_62_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_62_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_62_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;do&nbsp;stuff&nbsp;when&nbsp;DOM&nbsp;is&nbsp;ready</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000">);</span></div>
</div>
<p>2、为所有的A标记添加一个事件。 <font color="#808080">：）当然也可以是其它的，任意发挥吧。</font></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_24_52_Open_Image" onclick="this.style.display='none'; document.getElementById('_24_52_Open_Text').style.display='none'; document.getElementById('_24_52_Closed_Image').style.display='inline'; document.getElementById('_24_52_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_24_52_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_24_52_Closed_Text').style.display='none'; document.getElementById('_24_52_Open_Image').style.display='inline'; document.getElementById('_24_52_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">).click(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_24_52_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_24_52_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;world!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);</span></div>
</div>
<p>3、使用<font color="#ff6600">选择器</font>与<font color="#ff6600">事件</font><br />
&nbsp;&nbsp;&nbsp; jQuery中提供了两种方法来选择HTML元素，第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器（如：$("div &gt; ul a")）；第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">在一个菜单应用中，将其子菜单中的A标记加样式</span><span style="color: #008000"><br />
<img id="_58_186_Open_Image" onclick="this.style.display='none'; document.getElementById('_58_186_Open_Text').style.display='none'; document.getElementById('_58_186_Closed_Image').style.display='inline'; document.getElementById('_58_186_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_58_186_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_58_186_Closed_Text').style.display='none'; document.getElementById('_58_186_Open_Image').style.display='inline'; document.getElementById('_58_186_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_58_186_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_58_186_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="_96_132_Open_Image" onclick="this.style.display='none'; document.getElementById('_96_132_Open_Text').style.display='none'; document.getElementById('_96_132_Closed_Image').style.display='inline'; document.getElementById('_96_132_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_96_132_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_96_132_Closed_Text').style.display='none'; document.getElementById('_96_132_Open_Image').style.display='inline'; document.getElementById('_96_132_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">#Menu&nbsp;ul&nbsp;a</span><span style="color: #000000">"</span><span style="color: #000000">).hover(</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="_96_132_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_96_132_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).addClass(</span><span style="color: #000000">"</span><span style="color: #000000">blue</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="_144_183_Open_Image" onclick="this.style.display='none'; document.getElementById('_144_183_Open_Text').style.display='none'; document.getElementById('_144_183_Closed_Image').style.display='inline'; document.getElementById('_144_183_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_144_183_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_144_183_Closed_Text').style.display='none'; document.getElementById('_144_183_Open_Image').style.display='inline'; document.getElementById('_144_183_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">,</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="_144_183_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_144_183_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).removeClass(</span><span style="color: #000000">"</span><span style="color: #000000">blue</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);</span></span></div>
</div>
<p>注：id选择加#号前缀，其下级标记用空格隔开。<font color="#808080">：）是不是很容易啊<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hover为其事件，其它事件有click,mouseover,mouseout,change...等。可参考:<a href="http://visualjquery.com/"><font color="#3468a4">http://visualjquery.com</font></a></p>
<p>4、用这些选择器和事件你已经可以做很多的事情了，但这里有一个更强的好东东！</p>
<pre>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_134_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_134_Open_Text').style.display='none'; document.getElementById('_29_134_Closed_Image').style.display='inline'; document.getElementById('_29_134_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_134_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_134_Closed_Text').style.display='none'; document.getElementById('_29_134_Open_Image').style.display='inline'; document.getElementById('_29_134_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_134_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_134_Open_Text"><span style="color: #000000">{<br />
<img id="_78_130_Open_Image" onclick="this.style.display='none'; document.getElementById('_78_130_Open_Text').style.display='none'; document.getElementById('_78_130_Closed_Image').style.display='inline'; document.getElementById('_78_130_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_78_130_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_78_130_Closed_Text').style.display='none'; document.getElementById('_78_130_Open_Image').style.display='inline'; document.getElementById('_78_130_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">#orderedlist</span><span style="color: #000000">"</span><span style="color: #000000">).find(</span><span style="color: #000000">"</span><span style="color: #000000">li</span><span style="color: #000000">"</span><span style="color: #000000">).each(</span><span style="color: #0000ff">function</span><span style="color: #000000">(i)&nbsp;</span><span id="_78_130_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_78_130_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).html(&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).html()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;BAM!&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;i&nbsp;);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
</pre>
<p>注：find() 让你在已经选择的element中作条件查找,因此 $("#orderedlist).find("li") 就像 $("#orderedlist li")一样。each()方法迭代了所有的li，并可以在此基础上作更多的处理。 大部分的方法,如addClass(), 都可以用它们自己的 each() 。在这个例子中, html()用来获取每个li的html文本, 追加一些文字，并将之设置为li的html文本。</p>
<p>&nbsp;5、不希望某些特定的元素被选择。jQuery 提供了filter() 和not() 方法来解决这个问题</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_86_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_86_Open_Text').style.display='none'; document.getElementById('_29_86_Closed_Image').style.display='inline'; document.getElementById('_29_86_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_86_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_86_Closed_Text').style.display='none'; document.getElementById('_29_86_Open_Image').style.display='inline'; document.getElementById('_29_86_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_86_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_86_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">li</span><span style="color: #000000">"</span><span style="color: #000000">).not(</span><span style="color: #000000">"</span><span style="color: #000000">[ul]</span><span style="color: #000000">"</span><span style="color: #000000">).css(</span><span style="color: #000000">"</span><span style="color: #000000">border</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1px&nbsp;solid&nbsp;black</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
<p>&nbsp;注：这个代码选择了所有的li元素，然后去除了没有ul子元素的li元素。注意体会方便之极的css()方法，并再次提醒请务必实际测试观察效果，比方说换个CSS样式呢？再加一个CSS样式呢？像这样：$("li").not("[ul]").css("border", "1px solid black").css("color","red")。</p>
<p>&nbsp;6、可以在子元素和属性(elements and attributes)上用作过滤器，比如你可能想选择所有的带有name属性的链接:</p>
<pre>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_66_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_66_Open_Text').style.display='none'; document.getElementById('_29_66_Closed_Image').style.display='inline'; document.getElementById('_29_66_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_66_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_66_Closed_Text').style.display='none'; document.getElementById('_29_66_Open_Image').style.display='inline'; document.getElementById('_29_66_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_66_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_66_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">a[@name]</span><span style="color: #000000">"</span><span style="color: #000000">).background(</span><span style="color: #000000">"</span><span style="color: #000000">#eee</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
</pre>
<p>注：这个代码给所有带有name属性的链接加了一个背景色。</p>
<p>6.1常见的情况是以name来选择链接，你可能需要选择一个有特点href属性的链接，这在不同的浏览器下对href的理解可能会不一致，所以我们的部分匹配("*=")的方式来代替完全匹配("=")：</p>
<pre>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_162_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_162_Open_Text').style.display='none'; document.getElementById('_29_162_Closed_Image').style.display='inline'; document.getElementById('_29_162_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_162_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_162_Closed_Text').style.display='none'; document.getElementById('_29_162_Open_Image').style.display='inline'; document.getElementById('_29_162_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_162_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_162_Open_Text"><span style="color: #000000">{<br />
<img id="_81_158_Open_Image" onclick="this.style.display='none'; document.getElementById('_81_158_Open_Text').style.display='none'; document.getElementById('_81_158_Closed_Image').style.display='inline'; document.getElementById('_81_158_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_81_158_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_81_158_Closed_Text').style.display='none'; document.getElementById('_81_158_Open_Image').style.display='inline'; document.getElementById('_81_158_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">a[@href*=/content/gallery]</span><span style="color: #000000">"</span><span style="color: #000000">).click(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_81_158_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_81_158_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;do&nbsp;something&nbsp;with&nbsp;all&nbsp;links&nbsp;that&nbsp;point&nbsp;somewhere&nbsp;to&nbsp;/content/gallery</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
</pre>
<p>小示例，比如一个FAQ的页面，答案首先会隐藏，当问题点击时，答案显示出来，jQuery代码如下：</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_274_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_274_Open_Text').style.display='none'; document.getElementById('_29_274_Closed_Image').style.display='inline'; document.getElementById('_29_274_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_274_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_274_Closed_Text').style.display='none'; document.getElementById('_29_274_Open_Image').style.display='inline'; document.getElementById('_29_274_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_274_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_274_Open_Text"><span style="color: #000000">{<br />
<img id="_94_270_Open_Image" onclick="this.style.display='none'; document.getElementById('_94_270_Open_Text').style.display='none'; document.getElementById('_94_270_Closed_Image').style.display='inline'; document.getElementById('_94_270_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_94_270_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_94_270_Closed_Text').style.display='none'; document.getElementById('_94_270_Open_Image').style.display='inline'; document.getElementById('_94_270_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">'</span><span style="color: #000000">#faq</span><span style="color: #000000">'</span><span style="color: #000000">).find(</span><span style="color: #000000">'</span><span style="color: #000000">dd</span><span style="color: #000000">'</span><span style="color: #000000">).hide().end().find(</span><span style="color: #000000">'</span><span style="color: #000000">dt</span><span style="color: #000000">'</span><span style="color: #000000">).click(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_94_270_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_94_270_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;answer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).next();<br />
<img id="_170_212_Open_Image" onclick="this.style.display='none'; document.getElementById('_170_212_Open_Text').style.display='none'; document.getElementById('_170_212_Closed_Image').style.display='inline'; document.getElementById('_170_212_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_170_212_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_170_212_Closed_Text').style.display='none'; document.getElementById('_170_212_Open_Image').style.display='inline'; document.getElementById('_170_212_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(answer.is(</span><span style="color: #000000">'</span><span style="color: #000000">:visible</span><span style="color: #000000">'</span><span style="color: #000000">))&nbsp;</span><span id="_170_212_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_170_212_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;answer.slideUp();<br />
<img id="_219_263_Open_Image" onclick="this.style.display='none'; document.getElementById('_219_263_Open_Text').style.display='none'; document.getElementById('_219_263_Closed_Image').style.display='inline'; document.getElementById('_219_263_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_219_263_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_219_263_Closed_Text').style.display='none'; document.getElementById('_219_263_Open_Image').style.display='inline'; document.getElementById('_219_263_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="_219_263_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_219_263_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;answer.slideDown();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
<p>注：在点击事件中的，我们用 $(this).next() 来找到dt下面紧接的一个dd元素，这让我们可以快速地选择在被点击问题下面的答案。</p>
<p>7、除了选择同级别的元素外，你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时，它的父级元素--也就是文章的这一段突出显示，试试这个：</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_29_175_Open_Image" onclick="this.style.display='none'; document.getElementById('_29_175_Open_Text').style.display='none'; document.getElementById('_29_175_Closed_Image').style.display='inline'; document.getElementById('_29_175_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_29_175_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_29_175_Closed_Text').style.display='none'; document.getElementById('_29_175_Open_Image').style.display='inline'; document.getElementById('_29_175_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_29_175_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_29_175_Open_Text"><span style="color: #000000">{<br />
<img id="_56_105_Open_Image" onclick="this.style.display='none'; document.getElementById('_56_105_Open_Text').style.display='none'; document.getElementById('_56_105_Closed_Image').style.display='inline'; document.getElementById('_56_105_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_56_105_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_56_105_Closed_Text').style.display='none'; document.getElementById('_56_105_Open_Image').style.display='inline'; document.getElementById('_56_105_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">).hover(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_56_105_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_56_105_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).parents(</span><span style="color: #000000">"</span><span style="color: #000000">p</span><span style="color: #000000">"</span><span style="color: #000000">).addClass(</span><span style="color: #000000">"</span><span style="color: #000000">highlight</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="_119_171_Open_Image" onclick="this.style.display='none'; document.getElementById('_119_171_Open_Text').style.display='none'; document.getElementById('_119_171_Closed_Image').style.display='inline'; document.getElementById('_119_171_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_119_171_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_119_171_Closed_Text').style.display='none'; document.getElementById('_119_171_Open_Image').style.display='inline'; document.getElementById('_119_171_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_119_171_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_119_171_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).parents(</span><span style="color: #000000">"</span><span style="color: #000000">p</span><span style="color: #000000">"</span><span style="color: #000000">).removeClass(</span><span style="color: #000000">"</span><span style="color: #000000">highlight</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
<p>8、在我们继续之前我们先来看看这一步： jQuery会让代码变得更短从而更容易理解和维护，下面是</p>
<p>&nbsp;</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">$(document).ready(callback)的缩写法：<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br />
<img id="_47_91_Open_Image" onclick="this.style.display='none'; document.getElementById('_47_91_Open_Text').style.display='none'; document.getElementById('_47_91_Closed_Image').style.display='inline'; document.getElementById('_47_91_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_47_91_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_47_91_Closed_Text').style.display='none'; document.getElementById('_47_91_Open_Image').style.display='inline'; document.getElementById('_47_91_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />$(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_47_91_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_47_91_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;code&nbsp;to&nbsp;execute&nbsp;when&nbsp;the&nbsp;DOM&nbsp;is&nbsp;ready</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000">);</span></div>
</div>
<p>应用到我们的Hello world例子中，可以这样:</p>
<pre>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img id="_13_72_Open_Image" onclick="this.style.display='none'; document.getElementById('_13_72_Open_Text').style.display='none'; document.getElementById('_13_72_Closed_Image').style.display='inline'; document.getElementById('_13_72_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_13_72_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_13_72_Closed_Text').style.display='none'; document.getElementById('_13_72_Open_Image').style.display='inline'; document.getElementById('_13_72_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">$(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_13_72_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_13_72_Open_Text"><span style="color: #000000">{<br />
<img id="_40_68_Open_Image" onclick="this.style.display='none'; document.getElementById('_40_68_Open_Text').style.display='none'; document.getElementById('_40_68_Closed_Image').style.display='inline'; document.getElementById('_40_68_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_40_68_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_40_68_Closed_Text').style.display='none'; document.getElementById('_40_68_Open_Image').style.display='inline'; document.getElementById('_40_68_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">).click(</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="_40_68_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">...</span><span id="_40_68_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;world!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">);</span></div>
</div>
</pre>
<p>：）是不是很容易呀，多亏了jQuery团队的努力呀！</p>
<img src ="http://www.blogjava.net/conans/aggbug/209581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 22:59 <a href="http://www.blogjava.net/conans/articles/209581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>