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

<channel>
	<title>Akasuna&#039;s Blog</title>
	<atom:link href="http://www.akasuna.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.akasuna.com</link>
	<description>此身不向今生度，更向何生度此身？</description>
	<lastBuildDate>Thu, 17 May 2012 02:53:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>jQuery 插件典型开发模式</title>
		<link>http://www.akasuna.com/2012/05/17/jquery-plugin-development-patterns/</link>
		<comments>http://www.akasuna.com/2012/05/17/jquery-plugin-development-patterns/#comments</comments>
		<pubDate>Thu, 17 May 2012 02:35:54 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=615</guid>
		<description><![CDATA[jQuery 插件通常分两类。 基于选择器的插件（支持链式操作） 不基于选择器的插件（不支持链式操作） 前段时间简单学习了 jQuery 插件开发，开发了两个简单的插件（以上两类，各开发了一个），在此对两种插件的开发模式做简要总结。 基于选择器的插件 通常开发模式如下： (function($, window, undefined) { $.fn.PluginName = function(opts) { var defaults = { // 插件自定义选项的默认值 }; // 以用户的自定义选项覆盖默认选项 var options = $.expend(defaults, opts &#124;&#124; {}); return this.each(function() { // 让插件支持链式操作 // 在这里编写插件功能代码 }); }; })(jQuery, window); 首先，创建一个匿名的自执行函数，形参为 &#038; 、 window 和 undefined，实参为 jQuery 和 window。 嗯？为什么没有为 undefined [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery 插件通常分两类。</p>
<ol>
<li>基于选择器的插件（支持链式操作）</li>
<li>不基于选择器的插件（不支持链式操作）</li>
</ol>
<p>前段时间简单学习了 jQuery 插件开发，开发了两个简单的插件（以上两类，各开发了一个），在此对两种插件的开发模式做简要总结。</p>
<p><span id="more-615"></span></p>
<h3>基于选择器的插件</h3>
<p>通常开发模式如下：</p>
<pre><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">,</span> undefined<span style="color:#ff0080; font-weight:bold">) {</span>
	$<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>PluginName <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>opts<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#bb7977; font-weight:bold">var</span> defaults <span style="color:#ff0080; font-weight:bold">= {</span>
			<span style="color:#f27900">// 插件自定义选项的默认值</span>
		<span style="color:#ff0080; font-weight:bold">};</span>

		<span style="color:#f27900">// 以用户的自定义选项覆盖默认选项</span>
		<span style="color:#bb7977; font-weight:bold">var</span> options <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">expend</span><span style="color:#ff0080; font-weight:bold">(</span>defaults<span style="color:#ff0080; font-weight:bold">,</span> opts || <span style="color:#ff0080; font-weight:bold">{});</span>

		<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span> <span style="color:#f27900">// 让插件支持链式操作</span>
			<span style="color:#f27900">// 在这里编写插件功能代码</span>
		<span style="color:#ff0080; font-weight:bold">});</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">})(</span>jQuery<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>首先，创建一个匿名的自执行函数，形参为 <code>&#038;</code> 、 <code>window</code> 和 <code>undefined</code>，实参为 <code>jQuery</code> 和 <code>window</code>。</p>
<p>嗯？为什么没有为 <code>undefined</code> 对应地传入一个实参呢？这是一个小技巧，考虑到 <code>undefined</code> 这个变量名可能在其它地方的 JavaScript 代码赋过值，失去了它真正的意义，所以这里干脆不传入这个参数，以确保它在那个匿名自执行函数中是真正的 <code>undefined</code>。</p>
<p><code>jQuery</code> 传入后对应为 <code>$</code>，这样可以保证插件内调用的 <code>$</code> 一定是 jQuery 而非 Prototype 之类的库。</p>
<p>此类插件的调用方式一般为 <code>$(selector).PluginName();</code> 这种形式。</p>
<p>此类具体示例可参考 <a href="https://github.com/libuchao/KTwitter" title="jQuery KTwitter plugin">https://github.com/libuchao/KTwitter</a></p>
<h3>不基于选择器的插件</h3>
<p>由于此类插件不依赖于选择器，所以也无链式操作一说。一般开发模式如下：</p>
<pre><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">,</span> undefined<span style="color:#ff0080; font-weight:bold">) {</span>
	$<span style="color:#ff0080; font-weight:bold">.</span>PluginName <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>opts<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#bb7977; font-weight:bold">var</span> defaults <span style="color:#ff0080; font-weight:bold">= {</span>
			<span style="color:#f27900">// 插件自定义选项的默认值</span>
		<span style="color:#ff0080; font-weight:bold">};</span>

		<span style="color:#f27900">// 以用户的自定义选项覆盖默认选项</span>
		<span style="color:#bb7977; font-weight:bold">var</span> options <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">expend</span><span style="color:#ff0080; font-weight:bold">(</span>defaults<span style="color:#ff0080; font-weight:bold">,</span> opts || <span style="color:#ff0080; font-weight:bold">{});</span>

		<span style="color:#f27900">// 在这里编写插件功能代码</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">})(</span>jQuery<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>此类插件的调用形式一般为 <code>$(selector).PluginName();</code> 这种形式。</p>
<p>此类插件具体示例可参考 <a href="https://github.com/libuchao/KBox" title="jQuery KBox plugin">https://github.com/libuchao/KBox</a></p>
<h3>其它事项</h3>
<p>如何让他人乐意用你的插件？</p>
<ol>
<li>其实不管插件是给自己用的，还是个其他人用的，代码都要尽量整洁规范，如果能提供说明文档则更好。</li>
<li>对于用户方面，尽量为用户提供灵活的自定义选项，如能配以演示 Demo 则更好。</li>
<li>要在各主流浏览器下进行测试，并对支持情况予以说明，如 Supports IE6+, FireFox3+, Safari5+, Chrome9+ &#8230;</li>
<li>对 jQuery 各版本支持情况要予以说明，如 Requires jQuery v1.3.2 or later &#8230;</li>
<li>如果插件代码体积比较大的话，尽可能同时提供带有注释的 Dev 版本和不带注释压缩过的 Min 版本（借助于 JavaScript 代码压缩工具）。</li>
<li>最后，测试测试再测试，保证质量。</li>
</ol>
<p>想学习插件开发？请参考这篇文档 <a href="http://docs.jquery.com/Plugins/Authoring" title="jQuery Plugin Tutorial">http://docs.jquery.com/Plugins/Authoring</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/05/17/jquery-plugin-development-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript 的原型对象（Prototype）</title>
		<link>http://www.akasuna.com/2012/05/14/prototypes-in-javascript/</link>
		<comments>http://www.akasuna.com/2012/05/14/prototypes-in-javascript/#comments</comments>
		<pubDate>Mon, 14 May 2012 10:18:30 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=612</guid>
		<description><![CDATA[在 JavaScript 中，每当定义一个对象（或函数）时候，对象中都会包含一些预定义的属性，其中一个属性就是原型对象 prototype。 var myObject = function( name ) { this.name = name; return this; }; console.log(typeof myObject.prototype); // object myObject.prototype.getName = function() { return this.name; }; 上面的代码创建了一个函数，然后赋值给 myObject。如果我名调用 myObject()，它将返回 window 对象。因为它是在全局作用域内定义的，而且它还没有被实例化，所以 this 直接指向全局对象： console.log(myObject() === window); // true 原型链 JavaScript 中定义或实例化任何一个对象的时候，它都会被附加一个名为 __proto__ 的隐藏属性，原型链正是依靠这个属性才得以形成。但是千万别直接访问 __proto__ 属性，因为有些浏览器并不支持直接访问它。另外 __proto__ 和 对象的 prototype 属性也不是一回事，它们各自有各自的用途。 怎么理解呢？其实，当我们创建 myObject 函数时，实际上是创建了一个 [...]]]></description>
			<content:encoded><![CDATA[<p>在 JavaScript 中，每当定义一个对象（或函数）时候，对象中都会包含一些预定义的属性，其中一个属性就是<strong style='color:red'>原型对象 prototype</strong>。</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myObject <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> name <span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>name <span style="color:#ff0080; font-weight:bold">=</span> name<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">};</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">typeof</span> myObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// object</span>

myObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">.</span>getName <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">.</span>name<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>上面的代码创建了一个函数，然后赋值给 <code>myObject</code>。如果我名调用 <code>myObject()</code>，它将返回 <code>window</code> 对象。因为它是在全局作用域内定义的，而且它还没有被实例化，所以 <code>this</code> 直接指向全局对象：</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">() ===</span> window<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// true</span>
</pre>
<p><span id="more-612"></span></p>
<h3>原型链</h3>
<p>JavaScript 中定义或实例化任何一个对象的时候，它都会被附加一个名为 <code>__proto__</code> 的隐藏属性，原型链正是依靠这个属性才得以形成。但是千万别直接访问 <code>__proto__</code> 属性，因为有些浏览器并不支持直接访问它。另外 <code>__proto__</code> 和 对象的 <code>prototype</code> 属性也不是一回事，它们各自有各自的用途。</p>
<p>怎么理解呢？其实，当我们创建 <code>myObject</code> 函数时，实际上是创建了一个 <code>Function</code> 类型的对象：</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">typeof</span> myObject<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// function</span>
</pre>
<p>这里要说明一下，<code>Function</code> 是 JavaScript 中预定义的一个对象，所以它也有自己预定义的属性（如 <code>length</code> 和 <code>arguments</code>）和方法（如 <code>call</code> 和 <code>apply</code>），当然也有 <code>__proto__</code>，以此实现原型链。也就是说，JavaScript 引擎内可能有类似如下的代码片段：</p>
<pre>Function<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span> <span style="color:#ff0080; font-weight:bold">= {</span>
	arguments<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">null</span><span style="color:#ff0080; font-weight:bold">,</span>
	length<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">,</span>
	call<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		<span style="color:#f27900">// secret code</span>
	<span style="color:#ff0080; font-weight:bold">},</span>
	apply<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(){</span>
		<span style="color:#f27900">// secret code</span>
	<span style="color:#ff0080; font-weight:bold">},</span>
    <span style="color:#ff0080; font-weight:bold">...</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>事实上，JavaScript 引擎代码不可能这样简单，这里只是描述一下原型链是如何工作的。</p>
<p>我们定义了一个函数 <code>myObject</code>，它还有一个参数 <code>name</code>，但是并没有给它任何其它属性，例如 <code>length</code> 或者其它方法，如 <code>call</code>。那么下面这段代码为啥能正常执行呢？</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObject<span style="color:#ff0080; font-weight:bold">.</span>length<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// 结果：1，是参数的个数</span>
</pre>
<p>这是因为我们定义 <code>myObject</code> 时，同时也给它定义了一个 <code>__proto__ </code> 属性，并赋值为 <code>Function.prototype</code>（参考前面的代码片段），所以我们能够像访问其它属性一样访问 <code>myObject.length</code>，即使我们并没有定义这个属性，因为它会顺着 <code>__proto__</code> 原型链往上去找 <code>length</code>，最终在 <code>Function</code> 里面找到了。</p>
<p>那为什么找到的 <code>length</code> 属性的值是 1，而不是 0 呢，是什么时候给它赋值的呢？由于 <code>myObject</code> 是 <code>Function</code> 的一个实例：</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObject <span style="color:#bb7977; font-weight:bold">instanceof</span> Function<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// true</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObject <span style="color:#ff0080; font-weight:bold">===</span> Function<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// false</span>
</pre>
<p>当实例化一个对象的时候，对象的 <code>__proto__</code> 属性会被赋值为其构造者的原型对象，在本示例中就是 <code>Function</code>，此时构造器回去计算参数的个数，改变 <code>length</code> 的值。</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObject<span style="color:#ff0080; font-weight:bold">.</span>__proto__ <span style="color:#ff0080; font-weight:bold">===</span> Function<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// true</span>
</pre>
<p>而当我们用 <code>new</code> 关键字创建一个新的实例时，新对象的 <code>__proto__</code> 将会被赋值为 <code>myObject.prototype</code>，因为现在的构造函数为 <code>myObject</code>，而非 <code>Function</code>。</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myInstance <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'foo'</span><span style="color:#ff0080; font-weight:bold">);</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myInstance<span style="color:#ff0080; font-weight:bold">.</span>__proto__ <span style="color:#ff0080; font-weight:bold">===</span> myObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// true</span>
</pre>
<p>新对象除了能访问 <code>Function.prototype</code> 中继承下来的 <code>call</code> 和 <code>apply</code> 外，还能访问从 myObject 中继承下来的 <code>getName</code> 方法：</p>
<pre>console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myInstance<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getName</span><span style="color:#ff0080; font-weight:bold">());</span> <span style="color:#f27900">// foo</span>

<span style="color:#bb7977; font-weight:bold">var</span> mySecondInstance <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'bar'</span><span style="color:#ff0080; font-weight:bold">);</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>mySecondInstance<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getName</span><span style="color:#ff0080; font-weight:bold">());</span> <span style="color:#f27900">// bar</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myInstance<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getName</span><span style="color:#ff0080; font-weight:bold">());</span> <span style="color:#f27900">// foo</span>
</pre>
<p>其实这相当于把原型对象当做一个蓝本，然后可以根据这个蓝本创建 N 个新的对象。</p>
<h3>prototype 的典型示例</h3>
<p>用过 jQuery 或者 Prototype 库的朋友可能知道，这些库中通常都会有 <code>trim</code> 这个方法。</p>
<p>示例：</p>
<pre>String<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">.</span>trim <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(/</span>^\s<span style="color:#ff0080; font-weight:bold">+</span>|\s<span style="color:#ff0080; font-weight:bold">+</span>$<span style="color:#ff0080; font-weight:bold">/</span>g<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p><code>trim</code> 用法：</p>
<pre><span style="color:#a68500">' foo bar   '</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">trim</span><span style="color:#ff0080; font-weight:bold">();</span> <span style="color:#f27900">// 'foo bar'</span>
</pre>
<p>但是这样做又有一个缺点，因为比较新版本的浏览器中的 JavaScript 引擎在 String 对象中本身就提供了 <code>trim</code> 方法， 那么我们自己定义的 <code>trim</code> 就会覆写它自带的 <code>trim</code>。其实，我们在定义 trim 方法之前，可以做个简单的检测，看是否需要自己添加这个方法：</p>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(!</span>String<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">.</span>trim<span style="color:#ff0080; font-weight:bold">) {</span>
	String<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#bb7977; font-weight:bold">prototype</span><span style="color:#ff0080; font-weight:bold">.</span>trim <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(/</span>^\s<span style="color:#ff0080; font-weight:bold">+</span>|\s<span style="color:#ff0080; font-weight:bold">+</span>$<span style="color:#ff0080; font-weight:bold">/</span>g<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>检查一下，如不存在 <code>trim</code> 这个方法，定义一个。</p>
<p>via <a href="http://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/" title="Prototypes in JavaScript">http://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/05/14/prototypes-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>纯 CSS 实现水平下拉菜单</title>
		<link>http://www.akasuna.com/2012/05/11/pure-css-dropdown-menu/</link>
		<comments>http://www.akasuna.com/2012/05/11/pure-css-dropdown-menu/#comments</comments>
		<pubDate>Fri, 11 May 2012 07:18:43 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=605</guid>
		<description><![CDATA[说到下拉菜单，第一反应是用 JavaScript 去实现，或者去找些现成的菜单插件什么的。其实，纯 CSS 也能实现下拉菜单。 花了点时间，用 CSS 简单实现了个一级下拉菜单。Demo：http://jsfiddle.net/akasuna/76CvN/ 菜单 HTML 结构如下： &#60;ul id=&#34;menu&#34;&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 1&#60;/a&#62; &#60;ul&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 1-1&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 1-2&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 1-3&#60;/a&#62; &#60;/li&#62; &#60;/ul&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 2&#60;/a&#62; &#60;ul&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 2-1&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 2-2&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;#&#34;&#62;Menu 2-3&#60;/a&#62; &#60;/li&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>说到下拉菜单，第一反应是用 JavaScript 去实现，或者去找些现成的菜单插件什么的。其实，纯 CSS 也能实现下拉菜单。</p>
<p>花了点时间，用 CSS 简单实现了个一级下拉菜单。Demo：<a href="http://jsfiddle.net/akasuna/76CvN/" title="CSS Dropdown menu">http://jsfiddle.net/akasuna/76CvN/</a></p>
<p>菜单 HTML 结构如下：<br />
<span id="more-605"></span></p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;ul</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;menu&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">1</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">1</span>-<span style="color:#800080; font-weight:bold">1</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">1</span>-<span style="color:#800080; font-weight:bold">2</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">1</span>-<span style="color:#800080; font-weight:bold">3</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">2</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">2</span>-<span style="color:#800080; font-weight:bold">1</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">2</span>-<span style="color:#800080; font-weight:bold">2</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">2</span>-<span style="color:#800080; font-weight:bold">3</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">3</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">3</span>-<span style="color:#800080; font-weight:bold">1</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">3</span>-<span style="color:#800080; font-weight:bold">2</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Menu <span style="color:#800080; font-weight:bold">3</span>-<span style="color:#800080; font-weight:bold">3</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
			<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
</pre>
<p>CSS代码：</p>
<pre><span style="color:#004466">#menu</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">font-family</span><span style="color:#ff0080; font-weight:bold">:</span> Arial<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">font-size</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">14px</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">width</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">500px</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">overflow</span><span style="color:#ff0080; font-weight:bold">:</span> hidden<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span><span style="color:#ff0080; font-weight:bold">,</span> #<span style="color:#8080c0; font-weight:bold">menu ul</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">list-style-type</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">background</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">#A3C159</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">margin</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">padding</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">float</span><span style="color:#ff0080; font-weight:bold">:</span> left<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li a</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">display</span><span style="color:#ff0080; font-weight:bold">:</span> block<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">padding</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">10px 15px</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">color</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">#FFF</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">text-decoration</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">border-right</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid <span style="color:#800080; font-weight:bold">#FFF</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li a</span><span style="color:#ff0080; font-weight:bold">:</span>hover <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">background</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">#1BA6B2</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li ul li</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">float</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li ul li a</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">border-top</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid <span style="color:#800080; font-weight:bold">#FFF</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li ul</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">display</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">position</span><span style="color:#ff0080; font-weight:bold">:</span> absolute<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">#menu</span> <span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>hover <span style="color:#8080c0; font-weight:bold">ul</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">display</span><span style="color:#ff0080; font-weight:bold">:</span> block<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>备注：不支持 IE6。</p>
<p>最后特别推荐一下 <a href="http://jsfiddle.net" title="jsFiddle">http://jsfiddle.net</a> 这个站点，在线调试 HTML，CSS，JavaScript 特别方便，更重要的是可以用它来制作在线 Demo。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/05/11/pure-css-dropdown-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 常用代码片段</title>
		<link>http://www.akasuna.com/2012/05/08/jquery-commonly-code-snippets/</link>
		<comments>http://www.akasuna.com/2012/05/08/jquery-commonly-code-snippets/#comments</comments>
		<pubDate>Tue, 08 May 2012 02:25:23 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=601</guid>
		<description><![CDATA[jQuery 嵌套的过滤器 过滤器可以有效对结果集就行过滤，最终得到我们想要的结果。例如下面代码就把结果集中包含有类 .selected 的元素给过滤掉了： .filter(&#34;:not(:has(.selected))&#34;); jQuery 缓存选择器结果集 把结果集保存在变量中缓存下来，重用时就无需再次用选择器去选择了。 var allItems = $(&#34;div.item&#34;); var keepList = $(&#34;div#container1 div.item&#34;); jQuery 检测某元素上是否包含某个类 jQuery 1.4.* 起新加的这个 has 方法： $(&#34;input&#34;).has(&#34;.email&#34;).addClass(&#34;email_icon&#34;); 使用 jQuery 切换样式表 用选择器选择出样式表标签元素，然后改变其 href 属性的值即可。 $('link[media='screen']').attr('href', 'Alternative.css'); jQuery 限制选择器选择范围（性能优化） 尽可能地在类名前面指明标签名，这样能大大减少选择器的执行时间，如果能用 ID 之类的选择器缩小查询范围则效果更佳。 var in_stock = $('#shopping_cart_items input.is_in_stock'); 假如 HTML 代码如下的话： &#60;ul id=&#34;shopping_cart_items&#34;&#62; &#60;li&#62; &#60;input value=&#34;Item-X&#34; name=&#34;item&#34; class=&#34;is_in_stock&#34; type=&#34;radio&#34;&#62; [...]]]></description>
			<content:encoded><![CDATA[<h3>jQuery 嵌套的过滤器</h3>
<p>过滤器可以有效对结果集就行过滤，最终得到我们想要的结果。例如下面代码就把结果集中包含有类 <code>.selected</code> 的元素给过滤掉了：</p>
<pre><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">filter</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;:not(:has(.selected))&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 缓存选择器结果集</h3>
<p>把结果集保存在变量中缓存下来，重用时就无需再次用选择器去选择了。<br />
<span id="more-601"></span></p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> allItems <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;div.item&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#bb7977; font-weight:bold">var</span> keepList <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;div#container1 div.item&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 检测某元素上是否包含某个类</h3>
<p>jQuery 1.4.* 起新加的这个 <code>has</code> 方法：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;input&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">has</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;.email&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">addClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;email_icon&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>使用 jQuery 切换样式表</h3>
<p>用选择器选择出样式表标签元素，然后改变其 <code>href</code> 属性的值即可。</p>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'link[media='</span>screen<span style="color:#a68500">']'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'href'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'Alternative.css'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 限制选择器选择范围（性能优化）</h3>
<p>尽可能地在类名前面指明标签名，这样能大大减少选择器的执行时间，如果能用 ID 之类的选择器缩小查询范围则效果更佳。</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> in_stock <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#shopping_cart_items input.is_in_stock'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>假如 HTML 代码如下的话：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;ul</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;shopping_cart_items&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;Item-X&quot;</span> <span style="color:#8080c0; font-weight:bold">name</span>=<span style="color:#a68500">&quot;item&quot;</span> <span style="color:#8080c0; font-weight:bold">class</span>=<span style="color:#a68500">&quot;is_in_stock&quot;</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;radio&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span> Item X
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;Item-Y&quot;</span> <span style="color:#8080c0; font-weight:bold">name</span>=<span style="color:#a68500">&quot;item&quot;</span> <span style="color:#8080c0; font-weight:bold">class</span>=<span style="color:#a68500">&quot;3-5_days&quot;</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;radio&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span> Item Y
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;Item-Z&quot;</span> <span style="color:#8080c0; font-weight:bold">name</span>=<span style="color:#a68500">&quot;item&quot;</span> <span style="color:#8080c0; font-weight:bold">class</span>=<span style="color:#a68500">&quot;unknown&quot;</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;radio&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span> Item Z
	<span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
</pre>
<h3>jQuery ToggleClass 的正确用法</h3>
<p><code>ToggleClass</code> 用来在某元素上添加或移除某个类。</p>
<pre><span style="color:#f27900">// No</span>
a<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">hasClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blueButton'</span><span style="color:#ff0080; font-weight:bold">)</span> ? a<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">removeClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blueButton'</span><span style="color:#ff0080; font-weight:bold">) :</span> a<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">addClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blueButton'</span><span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">// Yes</span>
a<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">toggleClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blueButton'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 判断浏览器是否为 IE</h3>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>msie<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// 此浏览器为 IE</span>
<span style="color:#ff0080; font-weight:bold">}</span> <span style="color:#bb7977; font-weight:bold">else</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#f27900">// 非 IE</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>用 jQuery 把某元素替换掉</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#thatdiv'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">replaceWith</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'fnuh'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 判断某元素中内容是否为空</h3>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">( !</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#keks'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">() ) {</span>
	<span style="color:#f27900">// 空空如也</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 判断无需列表元素的索引</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;ul &gt; li&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#ff0080; font-weight:bold">() {</span>
    <span style="color:#bb7977; font-weight:bold">var</span> index <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">prevAll</span><span style="color:#ff0080; font-weight:bold">().</span>length<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 给元素绑定事件执行函数</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#foo'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">bind</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'click'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'用户点击了 &quot;foo&quot;'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 在某元素上追加内容</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#lal'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">append</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'sometext'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 创建元素时，用一个对象为其添加属性及属性的值</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> $e <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;&lt;div&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">, {</span>
	href<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;#nav&quot;</span><span style="color:#ff0080; font-weight:bold">,</span>
	<span style="color:#a68500">&quot;class&quot;</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;a-class another-class&quot;</span><span style="color:#ff0080; font-weight:bold">,</span>
	title<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;...&quot;</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p><strong style='color:red;'>注意</strong>：<code>class</code> 是 JavaScript 的保留字，最好加上引号。</p>
<h3>jQuery 用元素的属性作为过滤条件</h3>
<p>而且可以用多个属性作为条件：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> elements <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'.someclass input[type=sometype][value=somevalue]'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 使用 delegate 为元素添加事件</h3>
<p>自 jQuery 1.4.2 起，建议用 <code>delegate</code> 和 <code>undelegate</code> 来替代 <code>live</code> 和 <code>die</code>，因为 <code>delegate</code> 对上下文有更好的支持。</p>
<pre><span style="color:#f27900">// 使用 live()</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;table&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;td&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">live</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;hover&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">toggleClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;hover&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">});</span>

<span style="color:#f27900">// 使用 delegate()</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;table&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">delegate</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;td&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">&quot;hover&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(){</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">toggleClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;hover&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>用 jQuery 找到下拉框中被选定的那个元素</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#someElement'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">find</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'option:selected'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 将包含有某文字的段落隐藏</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;p.value:contains('thetextvalue')&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">hide</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 将滚动条滚动到页面上某位置</h3>
<pre>jQuery<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>autoscroll <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'html,body'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">animate</span><span style="color:#ff0080; font-weight:bold">({</span>
			scrollTop<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">offset</span><span style="color:#ff0080; font-weight:bold">().</span>top
		<span style="color:#ff0080; font-weight:bold">},</span>
		<span style="color:#800080; font-weight:bold">500</span>
	<span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 执行如下代码开始滚动，其实 autoscroll 就是一个 jQuery 插件。</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#footer'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">autoscroll</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 检测浏览器版本</h3>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>safari <span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// afari</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>msie <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>version <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#800080; font-weight:bold">6</span> <span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// IE6 以上</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>msie <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>version <span style="color:#ff0080; font-weight:bold">&lt;=</span> <span style="color:#800080; font-weight:bold">6</span> <span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// IE6 及以下</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>mozilla <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> $<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>version <span style="color:#ff0080; font-weight:bold">&gt;=</span> <span style="color:#a68500">'1.8'</span> <span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// FireFox 2 以上</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 字符串替换</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> el <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#id'</span><span style="color:#ff0080; font-weight:bold">);</span>
el<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>el<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">().</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(/</span>word<span style="color:#ff0080; font-weight:bold">/</span>ig<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">));</span>
</pre>
<h3>jQuery 禁用鼠标右键菜单</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">bind</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'contextmenu'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">return false</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 检测某元素是否存在</h3>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#someDiv'</span><span style="color:#ff0080; font-weight:bold">).</span>length<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// 存在</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 侦测鼠标左击和右击事件</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#someelement&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">live</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'click'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">( (!</span>$<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>msie <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> e<span style="color:#ff0080; font-weight:bold">.</span>button <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">)</span> || <span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">.</span>browser<span style="color:#ff0080; font-weight:bold">.</span>msie <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> e<span style="color:#ff0080; font-weight:bold">.</span>button <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">1</span><span style="color:#ff0080; font-weight:bold">) ) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;左击了&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span> <span style="color:#bb7977; font-weight:bold">else if</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">.</span>button <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;右击了&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 自动显示、隐藏文本框的默认值</h3>
<pre>swap_val <span style="color:#ff0080; font-weight:bold">= [];</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#s&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>i<span style="color:#ff0080; font-weight:bold">) {</span>
	swap_val<span style="color:#0080c0">[i]</span> <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">();</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">focusin</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">() ==</span> swap_val<span style="color:#0080c0">[i]</span><span style="color:#ff0080; font-weight:bold">) {</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">}).</span><span style="color:#004466">focusout</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		<span style="color:#bb7977; font-weight:bold">if</span> <span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">trim</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">()) ==</span> <span style="color:#a68500">&quot;&quot;</span><span style="color:#ff0080; font-weight:bold">) {</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">(</span>swap_val<span style="color:#0080c0">[i]</span><span style="color:#ff0080; font-weight:bold">);</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p>假如文本框 HTML 代码如下的话</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;Enter the keyword to search...&quot;</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;s&quot;</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
</pre>
<h3>jQuery 延时执行 JavaScript 代码</h3>
<pre><span style="color:#f27900">// 1.4 之前版本</span>
<span style="color:#004466">setTimeout</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'.mydiv'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">hide</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blind'</span><span style="color:#ff0080; font-weight:bold">, {},</span> <span style="color:#800080; font-weight:bold">500</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#800080; font-weight:bold">5000</span><span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">// 1.4 及之后版本</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;.mydiv&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">delay</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">5000</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">hide</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blind'</span><span style="color:#ff0080; font-weight:bold">, {},</span> <span style="color:#800080; font-weight:bold">500</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 创建新元素并添加到页面中</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> $newDiv <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;div&gt;'</span><span style="color:#ff0080; font-weight:bold">);</span>
$newDiv<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'id'</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#a68500">'myNewDiv'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'body'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 限制文本框中字符数</h3>
<pre><span style="color:#f27900">// 插件代码</span>
jQuery<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>maxLength <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>max<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		<span style="color:#bb7977; font-weight:bold">var</span> type <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>tagName<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">toLowerCase</span><span style="color:#ff0080; font-weight:bold">();</span>
		<span style="color:#bb7977; font-weight:bold">var</span> inputType <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>type ? <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>type<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">toLowerCase</span><span style="color:#ff0080; font-weight:bold">() :</span> <span style="color:#bb7977; font-weight:bold">null</span><span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span>type <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">&quot;input&quot;</span> <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> inputType <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">&quot;text&quot;</span> || inputType <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">&quot;password&quot;</span><span style="color:#ff0080; font-weight:bold">) {</span>
			<span style="color:#f27900">// 最大字符数</span>
			<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>maxLength <span style="color:#ff0080; font-weight:bold">=</span> max<span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#ff0080; font-weight:bold">}</span> <span style="color:#bb7977; font-weight:bold">else if</span><span style="color:#ff0080; font-weight:bold">(</span>type <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">&quot;textarea&quot;</span><span style="color:#ff0080; font-weight:bold">) {</span>
			<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>onkeypress <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#bb7977; font-weight:bold">var</span> ob <span style="color:#ff0080; font-weight:bold">=</span> e || event<span style="color:#ff0080; font-weight:bold">;</span>
				<span style="color:#bb7977; font-weight:bold">var</span> keyCode <span style="color:#ff0080; font-weight:bold">=</span> ob<span style="color:#ff0080; font-weight:bold">.</span>keyCode<span style="color:#ff0080; font-weight:bold">;</span>
				<span style="color:#bb7977; font-weight:bold">var</span> hasSelection <span style="color:#ff0080; font-weight:bold">=</span> document<span style="color:#ff0080; font-weight:bold">.</span>selection ? document<span style="color:#ff0080; font-weight:bold">.</span>selection<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">createRange</span><span style="color:#ff0080; font-weight:bold">().</span>text<span style="color:#ff0080; font-weight:bold">.</span>length <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#800080; font-weight:bold">0</span> <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>selectionStart <span style="color:#ff0080; font-weight:bold">!=</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>selectionEnd<span style="color:#ff0080; font-weight:bold">;</span>
				<span style="color:#bb7977; font-weight:bold">return</span> <span style="color:#ff0080; font-weight:bold">!(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>value<span style="color:#ff0080; font-weight:bold">.</span>length <span style="color:#ff0080; font-weight:bold">&gt;=</span> max <span style="color:#ff0080; font-weight:bold">&amp;&amp; (</span>keyCode <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#800080; font-weight:bold">50</span> || keyCode <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">32</span> || keyCode <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">0</span> || keyCode <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">13</span><span style="color:#ff0080; font-weight:bold">) &amp;&amp; !</span>ob<span style="color:#ff0080; font-weight:bold">.</span>ctrlKey <span style="color:#ff0080; font-weight:bold">&amp;&amp; !</span>ob<span style="color:#ff0080; font-weight:bold">.</span>altKey <span style="color:#ff0080; font-weight:bold">&amp;&amp; !</span>hasSelection<span style="color:#ff0080; font-weight:bold">);</span>
			<span style="color:#ff0080; font-weight:bold">};</span>
			<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>onkeyup <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(){</span>
				<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>value<span style="color:#ff0080; font-weight:bold">.</span>length <span style="color:#ff0080; font-weight:bold">&gt;</span> max<span style="color:#ff0080; font-weight:bold">) {</span>
					<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>value <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>value<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">substring</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">,</span>max<span style="color:#ff0080; font-weight:bold">);</span>
				<span style="color:#ff0080; font-weight:bold">}</span>
			<span style="color:#ff0080; font-weight:bold">};</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 使用方法</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#comment'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">maxLength</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">20</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 如何克隆一个元素</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> $cloned <span style="color:#ff0080; font-weight:bold">=</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#somediv'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">clone</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 检测某元素是否处于可见状态</h3>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span>element<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">is</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">':visible'</span><span style="color:#ff0080; font-weight:bold">) ==</span> <span style="color:#a68500">'true'</span><span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// 可见</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 让某元素居中显示</h3>
<pre>jQuery<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>center <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'position'</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#a68500">'absolute'</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'top'</span><span style="color:#ff0080; font-weight:bold">, (</span> $<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">height</span><span style="color:#ff0080; font-weight:bold">() -</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">height</span><span style="color:#ff0080; font-weight:bold">() ) / +</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">scrollTop</span><span style="color:#ff0080; font-weight:bold">() +</span> <span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'left'</span><span style="color:#ff0080; font-weight:bold">, (</span> $<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">width</span><span style="color:#ff0080; font-weight:bold">() -</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">width</span><span style="color:#ff0080; font-weight:bold">() ) /</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">+</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">scrollLeft</span><span style="color:#ff0080; font-weight:bold">() +</span> <span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#bb7977; font-weight:bold">return this</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 使用方法</span>
$<span style="color:#ff0080; font-weight:bold">(</span>element<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">center</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 将一批元素的值存到一个数组中</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> arrInputValues <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">Array</span><span style="color:#ff0080; font-weight:bold">();</span>

$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;input.someclass&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
     arrInputValues<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">push</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">());</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 剥离 HTML 代码</h3>
<pre><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">) {</span>
    $<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>stripHtml <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
        <span style="color:#bb7977; font-weight:bold">var</span> regexp <span style="color:#ff0080; font-weight:bold">= /&lt;(</span><span style="color:#a68500">&quot;[^&quot;</span><span style="color:#ff0080; font-weight:bold">]*</span><span style="color:#a68500">&quot;|'[^']*'|[^'&quot;</span><span style="color:#ff0080; font-weight:bold">&gt;])*&gt;/</span>gi<span style="color:#ff0080; font-weight:bold">;</span>
        <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
            $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>
                $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">().</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span>regexp<span style="color:#ff0080; font-weight:bold">,</span><span style="color:#a68500">&quot;&quot;</span><span style="color:#ff0080; font-weight:bold">)</span>
            <span style="color:#ff0080; font-weight:bold">);</span>
        <span style="color:#ff0080; font-weight:bold">});</span>
        <span style="color:#bb7977; font-weight:bold">return</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">})(</span>jQuery<span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">//用法</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'p'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">stripHtml</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>jQuery 使用 closest 获取父元素</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#searchBox'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">closest</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'div'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 在新窗口中打开超链接</h3>
<pre><span style="color:#004466">jQuery</span><span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">delegate</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'a'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'click'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> root <span style="color:#ff0080; font-weight:bold">=</span> location<span style="color:#ff0080; font-weight:bold">.</span>href<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span>location<span style="color:#ff0080; font-weight:bold">.</span>pathname <span style="color:#ff0080; font-weight:bold">+</span> location<span style="color:#ff0080; font-weight:bold">.</span>search <span style="color:#ff0080; font-weight:bold">+</span> location<span style="color:#ff0080; font-weight:bold">.</span>hash<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">);</span>

	<span style="color:#bb7977; font-weight:bold">if</span> <span style="color:#ff0080; font-weight:bold">( !</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>href <span style="color:#ff0080; font-weight:bold">)</span> <span style="color:#bb7977; font-weight:bold">return</span><span style="color:#ff0080; font-weight:bold">;</span>

	<span style="color:#bb7977; font-weight:bold">if</span> <span style="color:#ff0080; font-weight:bold">(</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>href<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">indexOf</span><span style="color:#ff0080; font-weight:bold">(</span>root<span style="color:#ff0080; font-weight:bold">) !=</span> <span style="color:#800080; font-weight:bold">0</span> <span style="color:#ff0080; font-weight:bold">) {</span>
		window<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">open</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>href<span style="color:#ff0080; font-weight:bold">);</span>
		<span style="color:#bb7977; font-weight:bold">return false</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 使用 .siblings() 获取姊妹元素</h3>
<pre><span style="color:#f27900">// 这样可以</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#nav li'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#nav li'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">removeClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'active'</span><span style="color:#ff0080; font-weight:bold">);</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">addClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'active'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>

<span style="color:#f27900">// 这样更好</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#nav li'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">addClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'active'</span><span style="color:#ff0080; font-weight:bold">)</span>
		<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">siblings</span><span style="color:#ff0080; font-weight:bold">().</span><span style="color:#004466">removeClass</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'active'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 让页面中所有复选框选中或者非选中</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> tog <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">false</span><span style="color:#ff0080; font-weight:bold">;</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'a'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;input[type=checkbox]&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;checked&quot;</span><span style="color:#ff0080; font-weight:bold">, !</span>tog<span style="color:#ff0080; font-weight:bold">);</span>
	tog <span style="color:#ff0080; font-weight:bold">= !</span>tog<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 根据特定元素值过滤的过滤器</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'.someClass'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">filter</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">return</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'value'</span><span style="color:#ff0080; font-weight:bold">) ==</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'input#someId'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 获取鼠标指针的坐标</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">ready</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">mousemove</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">) {</span>
		$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#XY'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'X 坐标 ： '</span> <span style="color:#ff0080; font-weight:bold">+</span> e<span style="color:#ff0080; font-weight:bold">.</span>pageX <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">' | Y 坐标 ： '</span> <span style="color:#ff0080; font-weight:bold">+</span> e<span style="color:#ff0080; font-weight:bold">.</span>pageY<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 让整个 List 元素可点击</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;ul li&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	window<span style="color:#ff0080; font-weight:bold">.</span>location<span style="color:#ff0080; font-weight:bold">=</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">find</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;a&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;href&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#bb7977; font-weight:bold">return false</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p>示例 HTML 代码</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Link <span style="color:#800080; font-weight:bold">1</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Link <span style="color:#800080; font-weight:bold">2</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Link <span style="color:#800080; font-weight:bold">3</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;#&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>Link <span style="color:#800080; font-weight:bold">4</span><span style="color:#bb7977; font-weight:bold">&lt;/a&gt;&lt;/li&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/ul&gt;</span>
</pre>
<h3>jQuery 解析 XML 的简单示例</h3>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">parseXml</span><span style="color:#ff0080; font-weight:bold">(</span>xml<span style="color:#ff0080; font-weight:bold">) {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span>xml<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">find</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;Tutorial&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#output&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">append</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;author&quot;</span><span style="color:#ff0080; font-weight:bold">) +</span> <span style="color:#a68500">&quot; &quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 检测图片是否加载完毕</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#theImage'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">attr</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'src'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'image.jpg'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">load</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'图片加载完毕！'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 事件及方法的命名空间</h3>
<pre><span style="color:#f27900">// 事件</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'input'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">bind</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'blur.validation'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// ...</span>
<span style="color:#ff0080; font-weight:bold">});</span>

<span style="color:#f27900">// 方法</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'input'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">data</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'validation.isValid'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">true</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<h3>jQuery 检测浏览器是否启用了 cookie</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> dt <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">Date</span><span style="color:#ff0080; font-weight:bold">();</span>
dt<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">setSeconds</span><span style="color:#ff0080; font-weight:bold">(</span>dt<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getSeconds</span><span style="color:#ff0080; font-weight:bold">() +</span> <span style="color:#800080; font-weight:bold">60</span><span style="color:#ff0080; font-weight:bold">);</span>
document<span style="color:#ff0080; font-weight:bold">.</span>cookie <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;cookietest=1; expires=&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> dt<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">toGMTString</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#bb7977; font-weight:bold">var</span> cookiesEnabled <span style="color:#ff0080; font-weight:bold">=</span> document<span style="color:#ff0080; font-weight:bold">.</span>cookie<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">indexOf</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;cookietest=&quot;</span><span style="color:#ff0080; font-weight:bold">) != -</span><span style="color:#800080; font-weight:bold">1</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(!</span>cookiesEnabled<span style="color:#ff0080; font-weight:bold">) {</span>
        <span style="color:#f27900">// 未启用</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>jQuery 让 cookie 过期</h3>
<pre><span style="color:#bb7977; font-weight:bold">var</span> date <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">Date</span><span style="color:#ff0080; font-weight:bold">();</span>
date<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">setTime</span><span style="color:#ff0080; font-weight:bold">(</span>date<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getTime</span><span style="color:#ff0080; font-weight:bold">() + (</span>x <span style="color:#ff0080; font-weight:bold">*</span> <span style="color:#800080; font-weight:bold">60</span> <span style="color:#ff0080; font-weight:bold">*</span> <span style="color:#800080; font-weight:bold">1000</span><span style="color:#ff0080; font-weight:bold">));</span>
$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">cookie</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'example'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'foo'</span><span style="color:#ff0080; font-weight:bold">, {</span> expires<span style="color:#ff0080; font-weight:bold">:</span> date <span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>jQuery 自动为网址加上超链接</h3>
<pre>$<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>replaceUrl <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
        <span style="color:#bb7977; font-weight:bold">var</span> regexp <span style="color:#ff0080; font-weight:bold">= /((</span>ftp|http|https<span style="color:#ff0080; font-weight:bold">):</span>\<span style="color:#ff0080; font-weight:bold">/</span>\<span style="color:#ff0080; font-weight:bold">/(</span>\w<span style="color:#ff0080; font-weight:bold">+:{</span><span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#800080; font-weight:bold">1</span><span style="color:#ff0080; font-weight:bold">}</span>\w<span style="color:#ff0080; font-weight:bold">*</span>&#64;<span style="color:#ff0080; font-weight:bold">)</span>?<span style="color:#ff0080; font-weight:bold">(</span>\S<span style="color:#ff0080; font-weight:bold">+)(:[</span><span style="color:#800080; font-weight:bold">0</span><span style="color:#ff0080; font-weight:bold">-</span><span style="color:#800080; font-weight:bold">9</span><span style="color:#ff0080; font-weight:bold">]+)</span>?<span style="color:#ff0080; font-weight:bold">(</span>\<span style="color:#ff0080; font-weight:bold">/</span>|\<span style="color:#ff0080; font-weight:bold">/([</span>\w#<span style="color:#ff0080; font-weight:bold">!:.</span>?<span style="color:#ff0080; font-weight:bold">+=&amp;%</span>&#64;<span style="color:#ff0080; font-weight:bold">!</span>\<span style="color:#ff0080; font-weight:bold">-</span>\<span style="color:#ff0080; font-weight:bold">/]))</span>?<span style="color:#ff0080; font-weight:bold">)/</span>gi<span style="color:#ff0080; font-weight:bold">;</span>
        <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
            $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>
                $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">().</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span>regexp<span style="color:#ff0080; font-weight:bold">,</span><span style="color:#a68500">'&lt;a href=&quot;$1&quot;&gt;$1&lt;/a&gt;'</span><span style="color:#ff0080; font-weight:bold">)</span>
            <span style="color:#ff0080; font-weight:bold">);</span>
        <span style="color:#ff0080; font-weight:bold">});</span>
        <span style="color:#bb7977; font-weight:bold">return</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 用法</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'p'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">replaceUrl</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<p>via <a href="http://addyosmani.com/blog/50-jquery-snippets-for-developers/" title="50 jQuery Snippets That Will Help You Become A Better JavaScript Developer">http://addyosmani.com/blog/50-jquery-snippets-for-developers/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/05/08/jquery-commonly-code-snippets/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>学习 jQuery 插件开发 2</title>
		<link>http://www.akasuna.com/2012/04/26/learning-jquery-plug-in-development-2/</link>
		<comments>http://www.akasuna.com/2012/04/26/learning-jquery-plug-in-development-2/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 04:20:18 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=596</guid>
		<description><![CDATA[大多数插件开发都是在 $.fn 命名空间下添加方法，这种插件是基于选择器的。也就是说，用 jQuery 选择器选择一些元素后，然后紧接着调用插件下的方法。但是有些时候，我们需要的插件无须基于选择器。 例如，我想在页面上弹出一个信息提示框（不是 alert 那种），就不需要基于选择器吧。 其实，如果要开发不基于选择器的插件，只要在 $ 下添添加对象或方法即可。例如，我要开发的插件名称为 KBox，我想要的调用方法是 $.KBox.show('Hello World!');，那么插件的代码结构就可能是这样的： (function( $ ){ $.KBox = { show: function( option ) { // do something here } }; })( jQuery ); 顺这这个思路，开始编码。其实就是用 jQuery 在页面上添加几个 div，然后按照自己的需求显示出来。而且还要支持各种自定义选项，例如宽度、高度、字体、背景色等。 Demo：http://jsfiddle.net/akasuna/rasEv/2/embedded/result/ 最终效果图如下： 显示效果勉强说得过去，可以点击右上角“X”关闭，也支持 ESC 键关闭。 源码及使用方法：https://github.com/libuchao/KBox (function( $, window, document ){ $.KBox = { // Default setting [...]]]></description>
			<content:encoded><![CDATA[<p>大多数插件开发都是在 <code>$.fn</code> 命名空间下添加方法，这种插件是基于选择器的。也就是说，用 jQuery 选择器选择一些元素后，然后紧接着调用插件下的方法。但是有些时候，我们需要的插件无须基于选择器。</p>
<p>例如，我想在页面上弹出一个信息提示框（不是 alert 那种），就不需要基于选择器吧。</p>
<p>其实，如果要开发不基于选择器的插件，只要在 <code>$</code> 下添添加对象或方法即可。例如，我要开发的插件名称为 <span style="color:red">KBox</span>，我想要的调用方法是 <code>$.KBox.show('Hello World!');</code>，那么插件的代码结构就可能是这样的：<br />
<span id="more-596"></span></p>
<pre><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> $ <span style="color:#ff0080; font-weight:bold">){</span>
	$<span style="color:#ff0080; font-weight:bold">.</span>KBox <span style="color:#ff0080; font-weight:bold">= {</span>
		show<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> option <span style="color:#ff0080; font-weight:bold">) {</span>
			<span style="color:#f27900">// do something here</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">})(</span> jQuery <span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>顺这这个思路，开始编码。其实就是用 jQuery 在页面上添加几个 <code>div</code>，然后按照自己的需求显示出来。而且还要支持各种自定义选项，例如宽度、高度、字体、背景色等。</p>
<p>Demo：<a href="http://jsfiddle.net/akasuna/rasEv/2/embedded/result/" title="jQuery KBox plugin">http://jsfiddle.net/akasuna/rasEv/2/embedded/result/</a></p>
<p>最终效果图如下：</p>
<p><img alt="jQuery KBox plugin" src="https://github.com/libuchao/KBox/raw/master/screenshop.jpg" title="jQuery KBox plugin" width="790" height="601" /></p>
<p>显示效果勉强说得过去，可以点击右上角“X”关闭，也支持 ESC 键关闭。</p>
<p>源码及使用方法：<a href="https://github.com/libuchao/KBox" title="jQuery KBox plugin">https://github.com/libuchao/KBox</a></p>
<pre><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> $<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">,</span> document <span style="color:#ff0080; font-weight:bold">){</span>
	$<span style="color:#ff0080; font-weight:bold">.</span>KBox <span style="color:#ff0080; font-weight:bold">= {</span>
		<span style="color:#f27900">// Default setting of this plugin.</span>
		opts<span style="color:#ff0080; font-weight:bold">: {</span>
			boxContent   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'Hello KBox!'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxWidth     <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'400px'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxHeight    <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'200px'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxBgColor   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'#fff'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxSdColor   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'#666'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxFontFamily<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'Arial'</span><span style="color:#ff0080; font-weight:bold">,</span>
			boxFontColor <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'#000'</span>
		<span style="color:#ff0080; font-weight:bold">},</span>

		<span style="color:#f27900">// Show the box</span>
		show<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> options <span style="color:#ff0080; font-weight:bold">) {</span>
			<span style="color:#bb7977; font-weight:bold">if</span> <span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">typeof</span> options <span style="color:#ff0080; font-weight:bold">===</span> <span style="color:#a68500">'string'</span><span style="color:#ff0080; font-weight:bold">) {</span>
				$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">extend</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">, {</span>
					boxContent<span style="color:#ff0080; font-weight:bold">:</span> options
				<span style="color:#ff0080; font-weight:bold">});</span>
			<span style="color:#ff0080; font-weight:bold">}</span> <span style="color:#bb7977; font-weight:bold">else</span> <span style="color:#ff0080; font-weight:bold">{</span>
				$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">extend</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">,</span> options<span style="color:#ff0080; font-weight:bold">);</span>
			<span style="color:#ff0080; font-weight:bold">}</span>

			<span style="color:#f27900">// Make a background for page</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;div id=&quot;kboxback&quot;&gt;&lt;/div&gt;'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">({</span>
				<span style="color:#a68500">'position'</span>      <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'fixed'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'top'</span>           <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'0px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'left'</span>          <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'0px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'width'</span>         <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'100%'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'height'</span>        <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'100%'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'background'</span>    <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'#000'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'z-index'</span>       <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'9999'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'opacity'</span>       <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'0'</span>
			<span style="color:#ff0080; font-weight:bold">}).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'body'</span><span style="color:#ff0080; font-weight:bold">)).</span><span style="color:#004466">animate</span><span style="color:#ff0080; font-weight:bold">({</span><span style="color:#a68500">'opacity'</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'.5'</span><span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#800080; font-weight:bold">300</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'linear'</span><span style="color:#ff0080; font-weight:bold">);</span>

			<span style="color:#f27900">// The box we want to show</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;div id=&quot;kboxfront&quot;&gt;&lt;/div&gt;'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">({</span>
				<span style="color:#a68500">'position'</span>      <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'fixed'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'top'</span>           <span style="color:#ff0080; font-weight:bold">: ((</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">height</span><span style="color:#ff0080; font-weight:bold">() -</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxHeight<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">)) /</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">) +</span> <span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'left'</span>          <span style="color:#ff0080; font-weight:bold">: ((</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">width</span><span style="color:#ff0080; font-weight:bold">()  -</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxWidth<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">)) /</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">) +</span> <span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'width'</span>         <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxWidth<span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'height'</span>        <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxHeight<span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'background'</span>    <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxBgColor<span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'margin'</span>        <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'0px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'padding'</span>       <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'13px 10px 10px 10px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'border-radius'</span> <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'9px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'box-shadow'</span>    <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'10px 10px 5px '</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxSdColor<span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'z-index'</span>       <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'10000'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'opacity'</span>       <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'0'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'word-wrap'</span>     <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'break-all'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'font-family'</span>   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxFontFamily<span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'color'</span>         <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxFontColor
			<span style="color:#ff0080; font-weight:bold">}).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;p style=&quot;line-height:1.4&quot;&gt;'</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxContent <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">'&lt;/p&gt;'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'body'</span><span style="color:#ff0080; font-weight:bold">)).</span><span style="color:#004466">animate</span><span style="color:#ff0080; font-weight:bold">({</span><span style="color:#a68500">'opacity'</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'1'</span><span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#800080; font-weight:bold">300</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'linear'</span><span style="color:#ff0080; font-weight:bold">);;</span>

			<span style="color:#f27900">// CLose button</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;div id=&quot;kboxclose&quot;&gt;&lt;/div&gt;'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">({</span>
				<span style="color:#a68500">'position'</span>      <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'absolute'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'right'</span>         <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'10px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'top'</span>           <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'7px'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'cursor'</span>        <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'pointer'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'font-family'</span>   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'Arial'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'font-weight'</span>   <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'bold'</span><span style="color:#ff0080; font-weight:bold">,</span>
				<span style="color:#a68500">'color'</span>         <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'#000'</span>
			<span style="color:#ff0080; font-weight:bold">}).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'X'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#kboxfront'</span><span style="color:#ff0080; font-weight:bold">)).</span><span style="color:#004466">click</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#kboxfront, #kboxback'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">animate</span><span style="color:#ff0080; font-weight:bold">({</span><span style="color:#a68500">'opacity'</span><span style="color:#ff0080; font-weight:bold">:</span><span style="color:#a68500">'0'</span><span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#800080; font-weight:bold">300</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'linear'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
					$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">remove</span><span style="color:#ff0080; font-weight:bold">();</span>
				<span style="color:#ff0080; font-weight:bold">});</span>
			<span style="color:#ff0080; font-weight:bold">});</span>

			<span style="color:#f27900">// Handle the 'ESC' key</span>
			$<span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">keyup</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> e <span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#bb7977; font-weight:bold">if</span> <span style="color:#ff0080; font-weight:bold">(</span>e<span style="color:#ff0080; font-weight:bold">.</span>keyCode <span style="color:#ff0080; font-weight:bold">===</span> <span style="color:#800080; font-weight:bold">27</span><span style="color:#ff0080; font-weight:bold">) {</span>
					$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#kboxfront, #kboxback'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">animate</span><span style="color:#ff0080; font-weight:bold">({</span><span style="color:#a68500">'opacity'</span><span style="color:#ff0080; font-weight:bold">:</span><span style="color:#a68500">'0'</span><span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#800080; font-weight:bold">300</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">'linear'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
						$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">remove</span><span style="color:#ff0080; font-weight:bold">();</span>
					<span style="color:#ff0080; font-weight:bold">});</span>
				<span style="color:#ff0080; font-weight:bold">}</span>
			<span style="color:#ff0080; font-weight:bold">});</span>

			<span style="color:#f27900">// Retset the #kboxfront's position when window is resizing...</span>
			$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">resize</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#kboxfront'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">css</span><span style="color:#ff0080; font-weight:bold">({</span>
					<span style="color:#a68500">'top'</span>       <span style="color:#ff0080; font-weight:bold">: ((</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">height</span><span style="color:#ff0080; font-weight:bold">() -</span> $<span style="color:#ff0080; font-weight:bold">.</span>KBox<span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxHeight<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">)) /</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">) +</span> <span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span>
					<span style="color:#a68500">'left'</span>      <span style="color:#ff0080; font-weight:bold">: ((</span>$<span style="color:#ff0080; font-weight:bold">(</span>window<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">width</span><span style="color:#ff0080; font-weight:bold">()  -</span> $<span style="color:#ff0080; font-weight:bold">.</span>KBox<span style="color:#ff0080; font-weight:bold">.</span>opts<span style="color:#ff0080; font-weight:bold">.</span>boxWidth<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">replace</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'px'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">''</span><span style="color:#ff0080; font-weight:bold">)) /</span> <span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">) +</span> <span style="color:#a68500">'px'</span>
				<span style="color:#ff0080; font-weight:bold">});</span>
			<span style="color:#ff0080; font-weight:bold">});</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">})(</span> jQuery<span style="color:#ff0080; font-weight:bold">,</span> window<span style="color:#ff0080; font-weight:bold">,</span> document <span style="color:#ff0080; font-weight:bold">);</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/04/26/learning-jquery-plug-in-development-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>学习 jQuery 插件开发</title>
		<link>http://www.akasuna.com/2012/04/24/learning-jquery-plug-in-development/</link>
		<comments>http://www.akasuna.com/2012/04/24/learning-jquery-plug-in-development/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 06:01:25 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=591</guid>
		<description><![CDATA[最近学习了一下 jQuery 插件开发，做了个简单的插件来练练手。 就像我之前一篇文章 《所谓 jQuery 插件，怎样开发一个 jQuery 插件》 写得那样，了解了插件的原理后，完全可以很容易的写个自己的插件。 源码？ https://github.com/libuchao/KTwitter 这次写的插件是个 widget，用以显示最新微博（不是新浪、腾讯、搜狐、网易）正文，支持各种自定义选项，界面尚可，截图如下：]]></description>
			<content:encoded><![CDATA[<p>最近学习了一下 jQuery 插件开发，做了个简单的插件来练练手。</p>
<p>就像我之前一篇文章 <a title="所谓 jQuery 插件，怎样开发一个 jQuery 插件" href="http://www.akasuna.com/2012/03/12/what-is-a-jquery-plugin-and-how-to-develop-a-jquery-plugin/">《所谓 jQuery 插件，怎样开发一个 jQuery 插件》</a> 写得那样，了解了插件的原理后，完全可以很容易的写个自己的插件。</p>
<p>源码？</p>
<p><a href="https://github.com/libuchao/KTwitter" title="jQuery KTwitter plugin">https://github.com/libuchao/KTwitter</a></p>
<p>这次写的插件是个 widget，用以显示最新微博（不是新浪、腾讯、搜狐、网易）正文，支持各种自定义选项，界面尚可，截图如下：<br />
<span id="more-591"></span><br />
<img class="alignnone" title="jQuery KTwitter plugin" src="https://github.com/libuchao/KTwitter/raw/master/screenshot.png" alt="jQuery KTwitter plugin" width="377" height="1280" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/04/24/learning-jquery-plug-in-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips：JavaScript、jQuery 检测某 function 是否存在</title>
		<link>http://www.akasuna.com/2012/03/31/javascript-jquery-does-function-exist/</link>
		<comments>http://www.akasuna.com/2012/03/31/javascript-jquery-does-function-exist/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 00:45:34 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=583</guid>
		<description><![CDATA[JavaScript 中检测某 function 是否存在的方法为： if(typeof $form.validate == 'function') { console.log('该 function 存在'); } else { console.log('该 function 不存在'); } 例如： 需要检测一个 MD5 方法是否存在： if(typeof window.md5 == 'function') { // 如果纯在该方法，才去调用 md5(286); } 而检测一个 jQuery 方法是否存在，可用一下方法： if( jQuery.isFunction(jQuery.fn.rtFunction) ) { // 如果该方法存在，才去调用 jQuery(document).rtFunction(); } via http://www.jquery4u.com/jquery-functions/jquery-function-exist/]]></description>
			<content:encoded><![CDATA[<p>JavaScript 中检测某 function 是否存在的方法为：</p>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">typeof</span> $form<span style="color:#ff0080; font-weight:bold">.</span>validate <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">'function'</span><span style="color:#ff0080; font-weight:bold">) {</span>
	console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'该 function 存在'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">}</span> <span style="color:#bb7977; font-weight:bold">else</span> <span style="color:#ff0080; font-weight:bold">{</span>
	console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'该 function 不存在'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p><strong>例如：</strong> 需要检测一个 MD5 方法是否存在：</p>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">typeof</span> window<span style="color:#ff0080; font-weight:bold">.</span>md5 <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#a68500">'function'</span><span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#f27900">// 如果纯在该方法，才去调用</span>
	<span style="color:#004466">md5</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">286</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>而检测一个 jQuery 方法是否存在，可用一下方法：</p>
<pre><span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span> jQuery<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">isFunction</span><span style="color:#ff0080; font-weight:bold">(</span>jQuery<span style="color:#ff0080; font-weight:bold">.</span>fn<span style="color:#ff0080; font-weight:bold">.</span>rtFunction<span style="color:#ff0080; font-weight:bold">) ) {</span>
	<span style="color:#f27900">// 如果该方法存在，才去调用</span>
	<span style="color:#004466">jQuery</span><span style="color:#ff0080; font-weight:bold">(</span>document<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">rtFunction</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>via <a href="http://www.jquery4u.com/jquery-functions/jquery-function-exist/" title="jQuery does function exist">http://www.jquery4u.com/jquery-functions/jquery-function-exist/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/03/31/javascript-jquery-does-function-exist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaScript 面向对象基础知识</title>
		<link>http://www.akasuna.com/2012/03/20/the-basics-of-object-oriented-javascript/</link>
		<comments>http://www.akasuna.com/2012/03/20/the-basics-of-object-oriented-javascript/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 06:27:59 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=576</guid>
		<description><![CDATA[虽然 JavaScript 本身是没有类的概念，但它仍然有面向对象的特性，虽然和一般常见的面向对象语言有所差异。 简单的创建一个对象的方法如下： function myObject() { }; JavaScript 中创建对象的方法一般来说有两种：函数构造法和字面量法，上面这种属函数构造法。下面是一个字面量法的例子： var myObject = { }; 如果仅仅需要一个对象，而不需要对象的其它实例的情况下，推荐用字面量法。如果需要对象的多个实例，则推荐函数构造法。 定义属性和方法 函数构造法： function myObject() { this.iAm = 'an object'; this.whatAmI = function() { console.log('I am ' + this.iAm); }; }; 字面量法： var myObject = { iAm : 'an object', whatAmI : function() { console.log('I am ' + this.iAm); } [...]]]></description>
			<content:encoded><![CDATA[<p>虽然 JavaScript 本身是没有<code>类</code>的概念，但它仍然有面向对象的特性，虽然和一般常见的面向对象语言有所差异。</p>
<p>简单的创建一个对象的方法如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">() {</span>

<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>JavaScript 中创建对象的方法一般来说有两种：函数构造法和字面量法，上面这种属函数构造法。下面是一个字面量法的例子：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myObject <span style="color:#ff0080; font-weight:bold">= {</span>

<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>如果仅仅需要一个对象，而不需要对象的其它实例的情况下，推荐用字面量法。如果需要对象的多个实例，则推荐函数构造法。<br />
<span id="more-576"></span></p>
<h3>定义属性和方法</h3>
<p>函数构造法：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'an object'</span><span style="color:#ff0080; font-weight:bold">;</span>

	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>whatAmI <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'I am '</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>字面量法：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myObject <span style="color:#ff0080; font-weight:bold">= {</span>
	iAm <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'an object'</span><span style="color:#ff0080; font-weight:bold">,</span>

	whatAmI <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'I am '</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>以上两种方法创建的对象中，都有一个名为 “iAm” 的属性，还有一个名为 “whatAmI” 的方法。属性是对象中的变量，方法则是对象中的函数。</p>
<p>如何获取属性及调用方法：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> w <span style="color:#ff0080; font-weight:bold">=</span> myObject<span style="color:#ff0080; font-weight:bold">.</span>iAm<span style="color:#ff0080; font-weight:bold">;</span>

myObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">whatAmI</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<p>调用方法的时候后面一定要加上括号，如果不加括号，那么它只是返回方法的引用而已。</p>
<h3>两种创建对象方法的区别</h3>
<ul>
<li>函数构造法里面定义属性和方法的时候，都要用前缀 <code>this</code>，字面量法不需要。</li>
<li>函数构造法给属性和方法赋值的时候用的是 <code>=</code>，字面量法用的是 <code>:</code> 。</li>
<li>如果有多个属性或方法，函数构造法里面用 <code>;</code> 隔开，字面量法用 <code>,</code> 隔开。</li>
<li></li>
<li></li>
</ul>
<p>对于字面量法创建的对象，可以直接用对象的引用调用其属性或方法：</p>
<pre>myObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">whatAmI</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<p>而对于函数构造法而言，需要创建对象的实例，才能调用其属性或方法：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myNewObject <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">();</span>
myNewObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">whatAmI</span><span style="color:#ff0080; font-weight:bold">();</span>
</pre>
<h3>使用构造函数</h3>
<p>现在再来回归一下之前的函数构造法：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'an object'</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>whatAmI <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
		console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'I am '</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>其实它看起来就是个函数，既然是函数，能不能给它传参数呢？将代码再稍作修改：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">(</span>what<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm <span style="color:#ff0080; font-weight:bold">=</span> what<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>whatAmI <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>language<span style="color:#ff0080; font-weight:bold">) {</span>
		console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'I am '</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>iAm <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">' of the '</span> <span style="color:#ff0080; font-weight:bold">+</span> language <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">' language'</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">};</span>
<span style="color:#ff0080; font-weight:bold">};</span>
</pre>
<p>再将对象实例化，并传入参数：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myNewObject <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObject</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'an object'</span><span style="color:#ff0080; font-weight:bold">);</span>
myNewObject<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">whatAmI</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'JavaScript'</span><span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>程序最终输出 <code>I am an object of the JavaScript language</code>。</p>
<h3>两种创建对象的方法，我该用哪种？</h3>
<p>对于字面量方法而言，因为它不需要实例化，所以如果修改了某对象的值，那么这个对象的值就永久地被修改了，其它任何地方再访问，都是修改后的值。而对于函数构造法而言，修改值的时候是修改其实例的值，它可以实例化 N 个对象出来，每个对象都可以拥有自己不同的值，而且互不干扰。比较以下几段代码。</p>
<p>先看字面量法：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myObjectLiteral <span style="color:#ff0080; font-weight:bold">= {</span>
	myProperty <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'this is a property'</span>
<span style="color:#ff0080; font-weight:bold">};</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObjectLiteral<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a property'</span>

myObjectLiteral<span style="color:#ff0080; font-weight:bold">.</span>myProperty <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'this is a new property'</span><span style="color:#ff0080; font-weight:bold">;</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObjectLiteral<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span>  <span style="color:#f27900">// log 'this is a new property'</span>
</pre>
<p>即便创建了一个新的变量指向这个对象，结果还是一样的：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> myObjectLiteral <span style="color:#ff0080; font-weight:bold">= {</span>
	myProperty <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'this is a property'</span>
<span style="color:#ff0080; font-weight:bold">};</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>myObjectLiteral<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a property'</span>

<span style="color:#bb7977; font-weight:bold">var</span> sameObject <span style="color:#ff0080; font-weight:bold">=</span> myObjectLiteral<span style="color:#ff0080; font-weight:bold">;</span>

myObjectLiteral<span style="color:#ff0080; font-weight:bold">.</span>myProperty <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'this is a new property'</span><span style="color:#ff0080; font-weight:bold">;</span>

console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>sameObject<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a new property'</span>
</pre>
<p>再看函数构造法：</p>
<pre><span style="color:#f27900">// 用函数构造法</span>
<span style="color:#bb7977; font-weight:bold">var</span> myObjectConstructor <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
    	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>myProperty <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'this is a property'</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 实例化一个对象</span>
<span style="color:#bb7977; font-weight:bold">var</span> constructorOne <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObjectConstructor</span><span style="color:#ff0080; font-weight:bold">();</span>

<span style="color:#f27900">// 实例化第二个对象</span>
<span style="color:#bb7977; font-weight:bold">var</span> constructorTwo <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObjectConstructor</span><span style="color:#ff0080; font-weight:bold">();</span>

<span style="color:#f27900">// 输出</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>constructorOne<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a property'</span>

<span style="color:#f27900">// 输出</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>constructorTwo<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a property'</span>
</pre>
<p>和预期一样，两个对象的属性值是一样的。如果修个其中一个对象的值呢？</p>
<pre><span style="color:#f27900">// 用函数构造法</span>
<span style="color:#bb7977; font-weight:bold">var</span> myObjectConstructor <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">.</span>myProperty <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'this is a property'</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">};</span>

<span style="color:#f27900">// 实例化一个对象</span>
<span style="color:#bb7977; font-weight:bold">var</span> constructorOne <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObjectConstructor</span><span style="color:#ff0080; font-weight:bold">();</span>

<span style="color:#f27900">// 修改对象的属性</span>
constructorOne<span style="color:#ff0080; font-weight:bold">.</span>myProperty <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'this is a new property'</span><span style="color:#ff0080; font-weight:bold">;</span>

<span style="color:#f27900">// 实例化第二个对象</span>
<span style="color:#bb7977; font-weight:bold">var</span> constructorTwo <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">myObjectConstructor</span><span style="color:#ff0080; font-weight:bold">();</span>

<span style="color:#f27900">// 输出</span>
<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>constructorOne<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a new property'</span>

<span style="color:#f27900">// 输出</span>
<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>constructorTwo<span style="color:#ff0080; font-weight:bold">.</span>myProperty<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// log 'this is a property'</span>
</pre>
<p>可以看到，用函数构造法实例化出来的不同对象，相互是独立的，可以各自拥有不同的值。所以说，到底用哪种方法来创建对象，需取决于各自实际情况。</p>
<p>via <a href="http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-oriented-javascript/" title="The Basics of Object-Oriented JavaScript ">http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-oriented-javascript/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/03/20/the-basics-of-object-oriented-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery &amp; Ajax &amp; JSONP</title>
		<link>http://www.akasuna.com/2012/03/15/jquery-and-ajax-and-jsonp/</link>
		<comments>http://www.akasuna.com/2012/03/15/jquery-and-ajax-and-jsonp/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 10:12:48 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=567</guid>
		<description><![CDATA[借助于 XMLHttpRequest，浏览器可以在整个页面不刷新的情况下与服务端进行交互，这就是所谓的 Ajax（Asynchronous JavaScript and XML）。Ajax 可以为用户提供更为丰富的用户体验。 Ajax 请求由 JavaScript 驱动，通过 JavaScript 代码向 URL 发送一个请求，待服务端有响应时会触发一个回调函数，可以在这里回调函数里面处理服务端返回的信息。由于整个发送请求和响应的过程是异步的，所以在此期间页面中其它 Javascript 代码仍然继续执行，不会中断。 jQuery 对 Ajax 当然也提供了很好的支持，而且还抽象了各种浏览器对于 Ajax 支持方面另人痛苦的差异。它不但提供了全功能的 $.ajax() 方法，还有诸如 $.get()，$.getScript()，$.getJSON()，$.post() 和 $().load() 等更为简便的方法。 尽管被命名为 Ajax，但是很多 Ajax 应用并没有使用 XML，特别是 jQuery 方面的 Ajax 应用，大多数都没有使用 XML；反而用得比较多的情况是：纯文本、HTML 以及 JSON（JavaScript Object Notation）。 一般情况下，由于同源策略（同协议，同域名，同端口）的限制，Ajax 并不能跨域执行请求，除非使用诸如 JSONP（JSON with Padding） 之类的方案，才能实现一些受限的跨域功能。 关于 Ajax 的一些重要概念 GET vs POST，这是两种最常用的向服务端发送请求的方法，正确理解这两种方法的区别对于 [...]]]></description>
			<content:encoded><![CDATA[<p>借助于 <a href="http://zh.wikipedia.org/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a>，浏览器可以在整个页面不刷新的情况下与服务端进行交互，这就是所谓的 <a href="http://zh.wikipedia.org/wiki/Ajax" title="Asynchronous JavaScript and XML">Ajax</a>（<strong style='color:red;'>A</strong>synchronous <strong style='color:red;'>J</strong>avaScript <strong style='color:red;'>a</strong>nd <strong style='color:red;'>X</strong>ML）。Ajax 可以为用户提供更为丰富的用户体验。</p>
<p>Ajax 请求由 JavaScript 驱动，通过 JavaScript 代码向 URL 发送一个请求，待服务端有响应时会触发一个回调函数，可以在这里回调函数里面处理服务端返回的信息。由于整个发送请求和响应的过程是异步的，所以在此期间页面中其它 Javascript 代码仍然继续执行，不会中断。</p>
<p>jQuery 对 Ajax 当然也提供了很好的支持，而且还抽象了各种浏览器对于 Ajax 支持方面另人痛苦的差异。它不但提供了全功能的 <code>$.ajax()</code> 方法，还有诸如 <code>$.get()</code>，<code>$.getScript()</code>，<code>$.getJSON()</code>，<code>$.post()</code> 和 <code>$().load()</code> 等更为简便的方法。</p>
<p>尽管被命名为 Aja<strong style='color:red;'>x</strong>，但是很多 Ajax 应用并没有使用 <a href="http://zh.wikipedia.org/wiki/XML" title="eXtensible Markup Language">XML</a>，特别是 jQuery 方面的 Ajax 应用，大多数都没有使用 XML；反而用得比较多的情况是：纯文本、HTML 以及 <a href="http://zh.wikipedia.org/wiki/JSON" title="Javascript Object Notation">JSON</a>（JavaScript Object Notation）。</p>
<p>一般情况下，由于<strong style='color:red;'>同源策略</strong>（同协议，同域名，同端口）的限制，Ajax 并不能跨域执行请求，除非使用诸如 <a href="http://zh.wikipedia.org/wiki/JSONP" title="JSON with Padding">JSONP</a>（JSON with Padding） 之类的方案，才能实现一些受限的跨域功能。<br />
<span id="more-567"></span></p>
<h3>关于 Ajax 的一些重要概念</h3>
<p><strong style='color:red;'>GET vs POST</strong>，这是两种最常用的向服务端发送请求的方法，正确理解这两种方法的区别对于 Ajax 开发非常重要。</p>
<p>GET 方法通常用于执行一些非破坏性的操作（就是说，只从服务端获取信息，不修改服务端上的信息）。例如，搜索查询服务一般会使用 GET 请求。另外，GET 请求还可能会被浏览器缓存，这可能会导致一些不可预知的问题。一般情况下 GET 请求只能通过查询字符串的方式向服务端发送数据。</p>
<p>POST 方法通常用于在服务端上执行一些破坏性的操作（就是说，会修改服务端上的数据）。例如，当你发表一篇博客的时候，用的应该就是 POST 请求。和 GET 请求不一样，POST 请求不存在缓存问题。POST 请求中，查询字符串作为 URL 的一部分也能向服务端提交数据，但不推荐这种方法，所有数据应该跟 URL 分开单独发送。</p>
<p><strong style='color:red'>数据类型</strong>，jQuery 通常要求指明服务端返回的数据类型，某些情况写数据类型可能已经包含在方法名称中了，如 <code>$.getJSON()</code>，除此之外，它都会被作为一个可配置的对象的一部分，该对象最终会作为 <code>$.ajax()</code> 方法的参数。数据类型通常有以下几种：</p>
<ul>
<li><strong>text </strong> ：纯文本，用于传输简单的字符串。</li>
<li><strong>html </strong> ：用于传输一段 HTML。</li>
<li><strong>script </strong> ：向页面中添加脚本。</li>
<li><strong>json </strong> ：传输已格式化的 JSON 对象，它可以包含字符串、数组或对象。</li>
<li><strong>jsonp </strong> ：用于传输从其他域下返回的 JSON 数据。</li>
<li><strong>xml </strong> ：用于传输自定义的 XML 格式数据。</li>
</ul>
<p><strong style='color:red;'>异步执行</strong>，<strong style='color:red;'>A</strong>jax 中的 <strong>A</strong> 指的是异步（Asynchronous）。说到这里可能很多 jQuery 初学者一下子很难理解什么叫异步，因为默认情况下 Ajax 请求就是异步的，服务端返回的信息并非马上就能获取到。所有服务端返回的信息只能在一个回调函数中处理。例如以下这段代码，是错误的：</p>
<pre><span style="color:#bb7977; font-weight:bold">var</span> response<span style="color:#ff0080; font-weight:bold">;</span>
$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'foo.php'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>r<span style="color:#ff0080; font-weight:bold">) {</span> response <span style="color:#ff0080; font-weight:bold">=</span> r<span style="color:#ff0080; font-weight:bold">; });</span>
console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>response<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// undefined!</span>
</pre>
<p>正确的做法应该是在回调函数中处理服务端返回的数据，回调函数在 Ajax 请求成功完成时才被执行，这个时候才能获取到来自服务端的数据：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'foo.php'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>response<span style="color:#ff0080; font-weight:bold">) {</span> console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>response<span style="color:#ff0080; font-weight:bold">); });</span>
</pre>
<p><strong style='color:red;'>同源策略及 JSONP</strong>，前面已经说过，一般情况下 Ajax 的请求会被限制在相同协议（http 或 https）、相同端口、相同域名下才能正确执行，但是 HTML 的 <code>&lt;script&gt;</code> 标签却无此限制，它可以载入任何域下的脚本，jQuery 正是利用了这一点才得以拥有跨域执行 Ajax 的能力。</p>
<p>所谓 JSONP，就是其它域的服务端返回给我们的是 JavaScript 代码，这段代码可以被加载到 HTML 中的 <code>&lt;script&gt;</code> 标签中，这段 JavaScript 代码中包含有从其它域下的服务端返回的 JSON 数据，并以回调函数的形式提供。这样一来 jQuery 就回避了同源策略的限制，曲线拥有了跨域执行 Ajax 的能力。</p>
<p><strong style='color:red;'>Ajax 调试工具</strong>，现在比较新的浏览器如 Chrome 和 Safari，甚至 IE 都内置了调试工具，Firefox 也有无比强大 FireBug 插件，借助于这些调试工具，可以非常详细的查看 Ajax 的执行过程。</p>
<h3>和 Ajax 相关的一些方法</h3>
<p>jQuery 提供了好多种简便的 Ajax 方法，但是它们的核心都是 <code>$.ajax</code>，所以必须正确理解 <code>$.ajax</code>。</p>
<p>jQuery 的 <code>$.ajax</code> 是创建 Ajax 请求中最直接也是最有效的方法，它的参数是一个 JavaScript 对象，我们可以在这个对象中对 Ajax 作非常详细的配置。另外，<code>$.ajax</code> 方法还可以分别定义 Ajax 请求成功和失败时的回调函数；而且它以一个可配置的对象作为参数的特性，使得我们可以在 Ajax 方法外配置这个对象，然后再传进来，这非常有助于实现代码复用。关于这个方法的详细文档：<a href="http://api.jquery.com/jQuery.ajax/" title="jQuery.ajax">http://api.jquery.com/jQuery.ajax/</a></p>
<p>一个典型的示例如下：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
    <span style="color:#f27900">// 要请求的 URL</span>
    url <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'post.php'</span><span style="color:#ff0080; font-weight:bold">,</span>

    <span style="color:#f27900">// 要发给服务端的数据</span>
    <span style="color:#f27900">// （将会转化为查询字符串，如：?id=123）</span>
    data <span style="color:#ff0080; font-weight:bold">: {</span> id <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">123</span> <span style="color:#ff0080; font-weight:bold">},</span>

    <span style="color:#f27900">// 定义此 Ajax 请求是 POST 还是 GET</span>
    type <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'GET'</span><span style="color:#ff0080; font-weight:bold">,</span>

    <span style="color:#f27900">// 服务端返回的数据类型</span>
    dataType <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'json'</span><span style="color:#ff0080; font-weight:bold">,</span>

    <span style="color:#f27900">// Ajax 成功执行时的回调函数；</span>
    <span style="color:#f27900">// 回调函数的参数即为服务端返回的数据</span>
    success <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>json<span style="color:#ff0080; font-weight:bold">) {</span>
        $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;h1/&gt;'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">text</span><span style="color:#ff0080; font-weight:bold">(</span>json<span style="color:#ff0080; font-weight:bold">.</span>title<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'body'</span><span style="color:#ff0080; font-weight:bold">);</span>
        $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'&lt;div class=&quot;content&quot;/&gt;'</span><span style="color:#ff0080; font-weight:bold">)</span>
            <span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>json<span style="color:#ff0080; font-weight:bold">.</span>html<span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">appendTo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'body'</span><span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">},</span>

    <span style="color:#f27900">// 如果 Ajax 执行失败；</span>
    <span style="color:#f27900">// 将返回原始错误信息以及状态码</span>
    <span style="color:#f27900">// 传入这个回调函数中</span>
    error <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>xhr<span style="color:#ff0080; font-weight:bold">,</span> status<span style="color:#ff0080; font-weight:bold">) {</span>
        <span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'Sorry, there was a problem!'</span><span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">},</span>

    <span style="color:#f27900">// 这里是无论 Ajax 是否成功执行都会触发的回调函数</span>
    complete <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>xhr<span style="color:#ff0080; font-weight:bold">,</span> status<span style="color:#ff0080; font-weight:bold">) {</span>
        <span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'The request is complete!'</span><span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<blockquote><p><strong>备注：</strong></p>
<p>关于 <code>dataType</code> ：如果这里定义的 <code>dataType</code> 跟服务端返回的数据格式不一样，我们的代码就可能会执行失败，并且很难查出原因，因为 HTTP 返回的状态码并没有显示出错。所以在执行 Ajax 请求的时候，一定要确保服务端返回的数据格式跟事先定义定义的一致。通常情况下验证 HTTP 头信息中的 <code>Content-type</code> 是行之有效的办法，对于 JSON 而言，对应的 <code>Content-type</code> 应该是 <code>application/json</code>。</p></blockquote>
<h3>$.ajax 的一些自定义选项</h3>
<p><code>$.ajax</code> 方法的自定义选项非常多，这也是此方法功能强大的原因所在。若要查阅所有自定义选项，可参考官方文档：<a href="http://api.jquery.com/jQuery.ajax/" title="jQuery.ajax">http://api.jquery.com/jQuery.ajax/</a>，下面只列出一些常用的选项：</p>
<ul>
<li><strong style='color:red;'>async </strong> ：默认值是 <code>true</code>，如果需要 Ajax 的执行方式为同步，可将其设为 <code>false</code>。请注意，如果把这个值设为 <code>false</code> 了，那么你的其它 JavaScript 代码将会被中断执行，直到此次 Ajax 请求完毕，接受到服务端返回的数据为止才会恢复。所以，请慎用此选项。</li>
<li><strong style='color:red;'>cache</strong> ：设定是否缓存服务端发回的数据。对于 &#8220;script&#8221; 和 &#8220;jsonp&#8221; 之外的其它格式的数据而言，默认值是 <code>true</code>。如果被设置为 <code>false</code>，向服务器发送请求的时候，URL 中会被加入一个查询字符串，字符串的值是当前的时间戳，以确保每次请求的 URL 都是不同的，当然也就不存在缓存问题了。JavaScript 中获取时间戳的方法为 <code>new Date().getTime()</code>。</li>
<li><strong style='color:red;'>complete</strong> ：Ajax 请求执行完成时触发的回调函数，无论此次执行成功与否，该回调函数都会被触发。该回调函数可以接受服务端返回的原始信息及状态码。</li>
<li><strong style='color:red;'>context</strong> ：定义回调函数执行时的作用域（回调函数 <code>function(s) {alert(this)}</code> 中的 <code>this</code> 指向谁？）。默认情况下，回调函数中的 <code>this</code> 指向传递给 <code>$.ajax</code> 方法的参数，也就是那个大对象。</li>
<li><strong style='color:red;'>data</strong> ：要发送给服务端的数据，其值可以是一个对象或者查询字符串，如 <code>foo=bar&#038;baz=bim</code>。</li>
<li><strong style='color:red;'>dataType</strong> ：服务端返回数据的类型。如果不设置这个选项，jQuery 会根据服务端返回数据的 MIME 类型自行判断。</li>
<li><strong style='color:red;'>error</strong> ：当 Ajax 执行错误时将会触发的回调函数，该函数接受原始的请求信息及状态码。</li>
<li><strong style='color:red;'>jsonp</strong> ：执行 JSONP 请求时需要制定的回调函数名称，默认值是“callback”。</li>
<li><strong style='color:red;'>success</strong> ：Ajax 成功执行时将会触发的回调函数。在函数中可获取服务端返回的信息（如果 dataType 被设置成 JSON，返回的数据应该是一个 JavaScript 对象），当然也可获取服务端返回的原始数据信息及状态码。</li>
<li><strong style='color:red;'>timeout</strong> ：给 Ajax 请求设置一个超时是时间，单位是毫秒。</li>
<li><strong style='color:red;'>type</strong> ：指定请求的方式，GET 或者 POST，默认值是 GET。其它如 PUT 和 DELETE 方式也可以用，但并不是所有浏览器都支持。</li>
<li><strong style='color:red;'>url</strong> ：要请求的 URL。</li>
</ul>
<p>其中 <code>url</code> 选项是所有选项中唯一的一个必选项，其它选项都是可选的。</p>
<h3>一些简便方法</h3>
<p>如果你不需要那么多可配置的选项，也不关心 Ajax 执行错误时候的相关处理，jQuery 同样提供了一些非常有用的简便方法，以更简洁的方式完成 Ajax 请求。其实这些简便写法只是封装了 <code>$.ajax</code>，并把某些选项预先设定好。</p>
<p>jQuery 提供的简便方法如下：</p>
<ul>
<li><strong style='color:red;'>$.get</strong> ：对给定的 URL 执行 GET 请求。</li>
<li><strong style='color:red;'>$.post</strong> ：对给定的 URL 执行 POST 请求。</li>
<li><strong style='color:red;'>$.getScript</strong> ：向页面中添加脚本。</li>
<li><strong style='color:red;'>$.getJSON</strong> ：执行一个 GET 请求，服务端返回的信息应为 JSON。</li>
</ul>
<p>以上每种简便方法中都可传递如下参数：</p>
<ul>
<li><strong style='color:red;'>url</strong> ：所请求的 URL，必须提供。</li>
<li><strong style='color:red;'>data</strong> ：向服务端发送的数据，可选。可以是一个对象，亦或查询字符串，如 <code>foo=bar&#038;baz=bim</code>。<br />
<blockquote><p><strong>备注</strong>：此选项不适用于 <code>$.getScript</code>。</p></blockquote>
</li>
<li><strong style='color:red;'>一个回调函数</strong> ：此回调函数在请求成功执行后被触发。可选。该回调函数接受服务端返回的数据，也包括请求的状态码及原始对象。</li>
<li><strong style='color:red;'>数据类型</strong> ：服务端返回数据的类型。可选。<br />
<blockquote><p><strong>备注</strong>：此选项只适用于那些在其名称中没指定数据类型的方法。</p></blockquote>
</li>
</ul>
<p>下面是三个简便方法的示例：</p>
<pre><span style="color:#f27900">// 获取纯文本或者 html</span>
$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'/users.php'</span><span style="color:#ff0080; font-weight:bold">, {</span> userId <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1234</span> <span style="color:#ff0080; font-weight:bold">},</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>resp<span style="color:#ff0080; font-weight:bold">) {</span>
    console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>resp<span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>

<span style="color:#f27900">// 向页面中添加脚本，然后执行脚本中定义的函数。</span>
$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getScript</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'/static/js/myScript.js'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span>
    <span style="color:#004466">functionFromMyScript</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#ff0080; font-weight:bold">});</span>

<span style="color:#f27900">// 从服务端获取 JSON 格式的数据。</span>
$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getJSON</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'/details.php'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>resp<span style="color:#ff0080; font-weight:bold">) {</span>
    $<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">each</span><span style="color:#ff0080; font-weight:bold">(</span>resp<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>k<span style="color:#ff0080; font-weight:bold">,</span> v<span style="color:#ff0080; font-weight:bold">) {</span>
        console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span>k <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">' : '</span> <span style="color:#ff0080; font-weight:bold">+</span> v<span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">});</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>$.fn.load</h3>
<p><code>$.fn.load</code> 方法是 jQuery 所有 Ajax 方法中唯一在选择器结果集上调用的方法。<code>$.fn.load</code> 方法从给定的 URL 上获取信息，然后填充到选择器结果集包含的元素中。另外，在 URL 后面还可以附加一些选择器，jQuery 最终只会把跟选择器相匹配的内容填充到对应的 HTML 元素中。</p>
<p>下面是示例：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#newContent'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">load</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'/foo.html'</span><span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">// 或</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#newContent'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">load</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'/foo.html #myDiv h1:first'</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>html<span style="color:#ff0080; font-weight:bold">) {</span>
  <span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'加载完毕！'</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<h3>Ajax 和 表单</h3>
<p>在跟表单打交道方面，jQuery 的 Ajax 更显神威。最为有用的两个方法就是 <code>$.fn.serialize</code> 和 <code>$.fn.serializeArray</code>，下面是它们的用法：</p>
<pre><span style="color:#f27900">// 将表单中数据转化为查询字符串</span>
$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#myForm'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">serialize</span><span style="color:#ff0080; font-weight:bold">();</span>

$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#myForm'</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">serializeArray</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#f27900">// 将表单中数据转化为对象数组，如：</span>
<span style="color:#ff0080; font-weight:bold">[</span>
    <span style="color:#ff0080; font-weight:bold">{</span> name <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'field1'</span><span style="color:#ff0080; font-weight:bold">,</span> value <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">123</span> <span style="color:#ff0080; font-weight:bold">},</span>
    <span style="color:#ff0080; font-weight:bold">{</span> name <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'field2'</span><span style="color:#ff0080; font-weight:bold">,</span> value <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'hello world'</span> <span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">]</span>
</pre>
<h3>使用 JSONP</h3>
<p>JSON 的本质其实是一种跨站点脚本注入。现在有很多比较好的网站都提供了 JSONP 服务，允许我们用他们预先定义好的 API 获取他们的数据。下面是一个示例，来源于 <a href="http://www.giantflyingsaucer.com/blog/?p=2682" title="Using JQuery, AJAX and JSONP to do cross-domain calls with PHP">http://www.giantflyingsaucer.com/blog/?p=2682</a></p>
<p>服务端代码：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>?php
    <span style="color:#004466">header</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;content-type: text/javascript&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>

    <span style="color:#bb7977; font-weight:bold">if</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">isset</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#0080c0">$_GET</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#a68500">'name'</span><span style="color:#ff0080; font-weight:bold">]) &amp;&amp;</span> <span style="color:#bb7977; font-weight:bold">isset</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#0080c0">$_GET</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#a68500">'callback'</span><span style="color:#ff0080; font-weight:bold">])) {</span>
        <span style="color:#0080c0">$obj</span><span style="color:#ff0080; font-weight:bold">-&gt;</span>name <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#0080c0">$_GET</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#a68500">'name'</span><span style="color:#ff0080; font-weight:bold">];</span>
        <span style="color:#0080c0">$obj</span><span style="color:#ff0080; font-weight:bold">-&gt;</span>message <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;Hello &quot;</span> <span style="color:#ff0080; font-weight:bold">.</span> <span style="color:#0080c0">$obj</span><span style="color:#ff0080; font-weight:bold">-&gt;</span>name<span style="color:#ff0080; font-weight:bold">;</span>

        <span style="color:#bb7977; font-weight:bold">echo</span> <span style="color:#0080c0">$_GET</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#a68500">'callback'</span><span style="color:#ff0080; font-weight:bold">].</span> <span style="color:#a68500">'('</span> <span style="color:#ff0080; font-weight:bold">.</span> <span style="color:#004466">json_encode</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#0080c0">$obj</span><span style="color:#ff0080; font-weight:bold">) .</span> <span style="color:#a68500">');'</span><span style="color:#ff0080; font-weight:bold">;</span>
    <span style="color:#ff0080; font-weight:bold">}</span>
?<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>客户端代码：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
    url<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'http://otherDomail.com:8080/JSONP/jsonp-demo.php'</span><span style="color:#ff0080; font-weight:bold">,</span>
    data<span style="color:#ff0080; font-weight:bold">: {</span>name<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'Super man'</span><span style="color:#ff0080; font-weight:bold">},</span>
    dataType<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'jsonp'</span><span style="color:#ff0080; font-weight:bold">,</span>
    jsonp<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">'callback'</span><span style="color:#ff0080; font-weight:bold">,</span>
    success<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span> response <span style="color:#ff0080; font-weight:bold">) {</span>
        console<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">log</span><span style="color:#ff0080; font-weight:bold">(</span> response<span style="color:#ff0080; font-weight:bold">.</span>message <span style="color:#ff0080; font-weight:bold">);</span>
    <span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p>jQuery 把 JSONP 的实现细节隐藏在幕后，我们要做的就是告诉 jQuery 服务端定义好的函数名以及我们请求的数据类型是 JSONP，其它方面和普通的 Ajax 请求没什么区别。</p>
<h3>Ajax 事件</h3>
<p>很多时候我们都需要在 Ajax 请求开始或结束时做一些操作，例如显示或隐藏一个 loading&#8230; 图片。这些工作本可以在每个 Ajax 请求中各自实现，但是 jQuery 提供了更好的方法，你可以像绑定普通事件一样绑定 Ajax 事件。若要参阅全部事件列表，可访问 <a href="http://docs.jquery.com/Ajax_Events" title="Ajax Events ">http://docs.jquery.com/Ajax_Events</a>。下面是简单示例：</p>
<pre>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">'#loading_indicator'</span><span style="color:#ff0080; font-weight:bold">)</span>
    <span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajaxStart</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">show</span><span style="color:#ff0080; font-weight:bold">(); })</span>
    <span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajaxStop</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">() {</span> $<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#bb7977; font-weight:bold">this</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">hide</span><span style="color:#ff0080; font-weight:bold">(); });</span>
</pre>
<h3>总结</h3>
<p>可以看到，jQuery 隐藏了底层的 Ajax 实现，向用户提供了统一且简单的调用接口，极大的简化了 Ajax 开发，让 Ajax 开发成为一种乐趣。</p>
<p>本文只是简单介绍了一些常用的 jQuery Ajax 的使用方法，若要了解更为详细的内容请访问 <a href="http://api.jquery.com/jQuery.ajax/" title="jQuery Ajax">http://api.jquery.com/jQuery.ajax/</a></p>
<p>本文翻译自 <a href="http://jqfundamentals.com/#chapter-7" title="jQuery Fundamentals">http://jqfundamentals.com/#chapter-7</a> 并略作加工以使其符合中文习惯。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/03/15/jquery-and-ajax-and-jsonp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript 中的闭包是怎么回事</title>
		<link>http://www.akasuna.com/2012/03/12/how-do-javascript-closures-work/</link>
		<comments>http://www.akasuna.com/2012/03/12/how-do-javascript-closures-work/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 10:45:08 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=563</guid>
		<description><![CDATA[伟大的爱因斯坦同志说过：“如果你无法向一个 6 岁小孩解释清楚某问题，那说明你自己都没整明白”。然而，当我向一个 27 岁的朋友解释什么是闭包时，却彻底失败了。 这原本是国外某哥们儿在 Stack Overflow 上对 JavaScript 闭包所提出的问题。不过既然此问题是在 Stack Overflow 提出的，当然也会有很多高手出来解答，其中有些回答确实是经典，如下面这个： 如果在一个外部函数中再定义一个内部函数，即函数嵌套函数，那么内部函数也可以访问外部函数中的变量： function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2); // alert 16 foo(2); // alert 16 foo(2); // alert 16 此段代码可以正确执行，并返回结果：16，因为 bar 能访问外部函数的变量 tmp， 同时也能访问外部函数 foo 的参数 x。但以上示例不是闭包！ 要实现闭包的话，需要将内部函数作为外部函数的返回值返回，内部函数在返回前，会将所有已访问过的外部函数中的变量在内存中锁定，也就是说，这些变量将常驻 bar [...]]]></description>
			<content:encoded><![CDATA[<p>伟大的爱因斯坦同志说过：“如果你无法向一个 6 岁小孩解释清楚某问题，那说明你自己都没整明白”。然而，当我向一个 27 岁的朋友解释什么是闭包时，却彻底失败了。</p>
<p>这原本是国外某哥们儿在 Stack Overflow 上对 JavaScript 闭包所提出的问题。不过既然此问题是在 Stack Overflow 提出的，当然也会有很多高手出来解答，其中有些回答确实是经典，如下面这个：</p>
<p>如果在一个外部函数中再定义一个内部函数，即函数嵌套函数，那么内部函数也可以访问外部函数中的变量：<br />
<span id="more-563"></span></p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> tmp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#800080; font-weight:bold">3</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span>y<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x <span style="color:#ff0080; font-weight:bold">+</span> y <span style="color:#ff0080; font-weight:bold">+ (++</span>tmp<span style="color:#ff0080; font-weight:bold">));</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16</span>
<span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16</span>
<span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16</span>
</pre>
<p>此段代码可以正确执行，并返回结果：16，因为 <code>bar</code> 能访问外部函数的变量 <code>tmp</code>， 同时也能访问外部函数 <code>foo</code> 的参数 <code>x</code>。但以上示例<strong style='color:red;'>不是闭包</strong>！</p>
<p>要实现闭包的话，需要将内部函数作为外部函数的返回值返回，内部函数在返回前，会将所有已访问过的外部函数中的变量在内存中锁定，也就是说，这些变量将常驻 <code>bar</code> 的内存中，不会被垃圾回收器回收，如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> tmp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#800080; font-weight:bold">3</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">return function</span> <span style="color:#ff0080; font-weight:bold">(</span>y<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x <span style="color:#ff0080; font-weight:bold">+</span> y <span style="color:#ff0080; font-weight:bold">+ (++</span>tmp<span style="color:#ff0080; font-weight:bold">));</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#bb7977; font-weight:bold">var</span> bar <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// bar 现在是个闭包了</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 17</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 18</span>
</pre>
<p>上述代码中，第一次执行 <code><code>bar</code></code> 时，仍会返回结果：16，因为 <code>bar</code> 仍然可以访问 <code>x</code> 及 <code>tmp</code>，尽管它已经不直接存在于 <code>foo</code> 的作用域内。那么既然 <code>tmp</code> 被锁定在 <code>bar</code> 的闭包里，那么每次执行 <code>bar</code> 的时候，<code>tmp</code> 都会自增一次，所以第二次和第三次执行 <code>bar</code> 时，分别返回 17 和 18。</p>
<p>此示例中，<code>x</code> 仅仅是个纯粹的数值，当 <code>foo</code> 被调用时，数值 <code>x</code> 就会作为参数被<strong style='color:red;'>拷贝</strong>至 <code>foo</code> 内。</p>
<p>但是 JavaScript 处理对象的时候，使用的总是引用，如果用一个对象作为参数来调用 <code>foo</code>，那么 <code>foo</code> 中传入的实际上是原始对象的<strong style='color:red;'>引用</strong>，所以这个原始对象也相当于<strong style='color:red;'>被</strong>闭包了，如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> tmp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#800080; font-weight:bold">3</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">return function</span> <span style="color:#ff0080; font-weight:bold">(</span>y<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x <span style="color:#ff0080; font-weight:bold">+</span> y <span style="color:#ff0080; font-weight:bold">+</span> tmp<span style="color:#ff0080; font-weight:bold">++);</span>
		x<span style="color:#ff0080; font-weight:bold">.</span>memb <span style="color:#ff0080; font-weight:bold">=</span> x<span style="color:#ff0080; font-weight:bold">.</span>memb ? x<span style="color:#ff0080; font-weight:bold">.</span>memb <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#800080; font-weight:bold">1</span> <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1</span><span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">.</span>memb<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#bb7977; font-weight:bold">var</span> age <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">Number</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#bb7977; font-weight:bold">var</span> bar <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>age<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// bar 现在是个闭包了</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 15 1</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16 2</span>
<span style="color:#004466">bar</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 17 3</span>
</pre>
<p>和期望的一样，每次执行 <code>bar(10)</code> 时，不但 <code>tmp</code> 自增了，<code>x.memb</code> 也自增了，因为函数体内的 <code>x</code> 和函数体外的 <code>age</code> 引用的是同一个对象。</p>
<p>via <a href="http://stackoverflow.com/questions/111102/how-do-javascript-closures-work" title="How do JavaScript closures work? - Stack Overflow">http://stackoverflow.com/questions/111102/how-do-javascript-closures-work</a></p>
<p><strong style='color:red;'>补充</strong>：通过以上示例，应该能比较清楚的理解闭包了。如果觉得自己理解了，可以试着猜猜下面这段代码的执行结果：</p>
<pre><span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">) {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> tmp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#800080; font-weight:bold">3</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">return function</span> <span style="color:#ff0080; font-weight:bold">(</span>y<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x <span style="color:#ff0080; font-weight:bold">+</span> y <span style="color:#ff0080; font-weight:bold">+</span> tmp<span style="color:#ff0080; font-weight:bold">++);</span>
		x<span style="color:#ff0080; font-weight:bold">.</span>memb <span style="color:#ff0080; font-weight:bold">=</span> x<span style="color:#ff0080; font-weight:bold">.</span>memb ? x<span style="color:#ff0080; font-weight:bold">.</span>memb <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#800080; font-weight:bold">1</span> <span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1</span><span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>x<span style="color:#ff0080; font-weight:bold">.</span>memb<span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#bb7977; font-weight:bold">var</span> age <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">Number</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">2</span><span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#bb7977; font-weight:bold">var</span> bar1 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>age<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// bar1 现在是个闭包了</span>
<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 15 1</span>
<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 16 2</span>
<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert 17 3</span>

<span style="color:#bb7977; font-weight:bold">var</span> bar2 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#004466">foo</span><span style="color:#ff0080; font-weight:bold">(</span>age<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// bar2 现在也是个闭包了</span>
<span style="color:#004466">bar2</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>
<span style="color:#004466">bar2</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>
<span style="color:#004466">bar2</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>

<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>
<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>
<span style="color:#004466">bar1</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#800080; font-weight:bold">10</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// alert ? ?</span>
</pre>
<p>试着猜猜代码注释中 <strong style='color:red;'>?</strong> 的值。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2012/03/12/how-do-javascript-closures-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

