<?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.com</title>
	<atom:link href="http://www.akasuna.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.akasuna.com</link>
	<description>If It&#039;s Not Fun, Why Do It?</description>
	<lastBuildDate>Mon, 12 Dec 2011 02:55:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>让开发也懂前端 &#8211; 某淘宝员工前端技术分享</title>
		<link>http://www.akasuna.com/2011/07/08/guide-from-taobao/</link>
		<comments>http://www.akasuna.com/2011/07/08/guide-from-taobao/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 00:23:32 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=485</guid>
		<description><![CDATA[资料来自淘宝内部员工，主要面向后端开发人员，如何对前端产生兴趣，对前端技能有一个概要印象，并知晓如何找到好资料进一步学习。 个人觉得无论是前端工程师还是后端工程师都值得一看。 via http://lifesinger.wordpress.com/2011/07/07/guide-to-fed/]]></description>
			<content:encoded><![CDATA[<p>资料来自淘宝内部员工，主要面向后端开发人员，如何对前端产生兴趣，对前端技能有一个概要印象，并知晓如何找到好资料进一步学习。</p>
<p>个人觉得无论是前端工程师还是后端工程师都值得一看。</p>
<p>via <a href="http://lifesinger.wordpress.com/2011/07/07/guide-to-fed/" title="让开发也懂前端">http://lifesinger.wordpress.com/2011/07/07/guide-to-fed/</a></p>
<p><span id="more-485"></span><br />
<iframe src='http://www.slideshare.net/slideshow/embed_code/8533438' width='700' height='574'></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/07/08/guide-from-taobao/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CSS 选择器的优先级问题</title>
		<link>http://www.akasuna.com/2011/04/25/css-specificity/</link>
		<comments>http://www.akasuna.com/2011/04/25/css-specificity/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 02:18:11 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=482</guid>
		<description><![CDATA[CSS 意为层叠样式表。所谓层叠，就是说，可以用多个 CSS 声明来作用于同一元素，例如用一段 CSS 来定义文字的颜色，用另外一段 CSS 来定义文字的大小，最终达到样式叠加的效果。 这种特性一定程度上使 CSS 可以更为方便的定义样式，但同时也带来了一定的复杂性。例如，当多个样式作用于同一个元素，而且还是作用于同一个属性，元素最终会以何种方式来呈现样式呢？ 参考下面这个例子： p { color: black; background-color: white; } div.warning p { color: red; } div#caution p { color: yellow; } body#home div p { color: white; } 此样式表中有 4 组选择器，且最终都指向 p 元素，并且每组样式中都有 color 属性。这样一来，可能的情况就是会有多个颜色属性，被施加于同一个 p 元素。问题来了，浏览器最终会以什么样的方式来渲染 p 的颜色呢？后定义的颜色会覆盖掉先定义的颜色吗？ 这里就涉及到一个 CSS 选择器优先级的问题，如果有多个选择器作用于某元素的同一个属性，那么浏览器会去计算其对应选择器的优先级，并最终将优先级最高的那个选择器的样式作用于元素。 如何计算优先级呢？ 优先级的计算通常遵循如下规则： 如果某元素被设置了 [...]]]></description>
			<content:encoded><![CDATA[<p><acronym title="Cascading Style Sheets">CSS</acronym> 意为层叠样式表。所谓层叠，就是说，可以用多个 <acronym title="Cascading Style Sheets">CSS</acronym> 声明来作用于同一元素，例如用一段 <acronym title="Cascading Style Sheets">CSS</acronym> 来定义文字的颜色，用另外一段 <acronym title="Cascading Style Sheets">CSS</acronym> 来定义文字的大小，最终达到样式叠加的效果。</p>
<p>这种特性一定程度上使 <acronym title="Cascading Style Sheets">CSS</acronym> 可以更为方便的定义样式，但同时也带来了一定的复杂性。例如，当多个样式作用于同一个元素，而且还是作用于同一个属性，元素最终会以何种方式来呈现样式呢？</p>
<p><span id="more-482"></span><br />
参考下面这个例子：</p>
<pre><span style="color:#0000ff">p</span> <span style="color:#000000">{</span>
	<span style="color:#0000ff">color</span><span style="color:#000000">:</span> black<span style="color:#000000">;</span>
	<span style="color:#0000ff">background-color</span><span style="color:#000000">:</span> white<span style="color:#000000">;</span>
<span style="color:#000000">}</span>
<span style="color:#0000ff">div</span><span style="color:#000000">.</span>warning <span style="color:#0000ff">p</span> <span style="color:#000000">{</span>
	<span style="color:#0000ff">color</span><span style="color:#000000">:</span> red<span style="color:#000000">;</span>
<span style="color:#000000">}</span>
<span style="color:#0000ff">div</span>#caution <span style="color:#0000ff">p</span> <span style="color:#000000">{</span>
	<span style="color:#0000ff">color</span><span style="color:#000000">:</span> yellow<span style="color:#000000">;</span>
<span style="color:#000000">}</span>
<span style="color:#0000ff">body</span>#home <span style="color:#0000ff">div p</span> <span style="color:#000000">{</span>
	<span style="color:#0000ff">color</span><span style="color:#000000">:</span> white<span style="color:#000000">;</span>
<span style="color:#000000">}</span>
</pre>
<p>此样式表中有 4 组选择器，且最终都指向 <code>p</code> 元素，并且每组样式中都有 <code>color</code> 属性。这样一来，可能的情况就是会有多个颜色属性，被施加于同一个 <code>p</code> 元素。问题来了，浏览器最终会以什么样的方式来渲染 <code>p</code> 的颜色呢？后定义的颜色会覆盖掉先定义的颜色吗？</p>
<p>这里就涉及到一个 <acronym title="Cascading Style Sheets">CSS</acronym> 选择器优先级的问题，如果有多个选择器作用于某元素的同一个属性，那么浏览器会去计算其对应选择器的优先级，并最终将优先级最高的那个选择器的样式作用于元素。</p>
<h3>如何计算优先级呢？</h3>
<p>优先级的计算通常遵循如下规则：</p>
<ol>
<li>如果某元素被设置了 <code>style</code> 属性，也就是说被设置了行内样式，那么此行内样式将拥有最高的优先级，任何其它外部样式都不能将其覆盖。如果没有被设置行内样式，那么参照下面的第 2 条规则。</li>
<li>数一下选择器中 ID 选择器的个数，个数最多的，优先级就最高。如果 ID 选择器个数相同，或者压根儿就没有 ID 选择器，那么参照下面的第 3 条规则。</li>
<li>数一下类选择器（如 <code>.test</code>）的个数，属性选择器（如 <code>[type="submit"]</code>）的个数，还有伪类选择器（如 <code>:hover</code>）的个数，然后将个数加起来，总数最多的，这组选择器的优先级就最高。如果总是一样多，或者都为 0，那么参照下面的第 4 条规则。</li>
<li>数一下标签选择器（如 <code>p</code>）的个数，另外还有伪元素选择器（如 <code>:first-letter</code>）的个数，加起来，总数最多的，优先级就最高。</li>
</ol>
<p>如果经过上面的计算，优先级还是一样高，那么遵循后出现的样式覆盖先出现的样式之规则。</p>
<p>现在回过头来看先前的例子，那四组选择器的优先级分别为 0001、0012、0102、0103，之所以把优先级数字化，是因为这样更方便比较。按照自然数法则（事实上它们并非自然数）来比较，1 &lt; 12 &lt; 102 &lt; 103，这样一来，它们的优先级孰高孰低，就一目了然了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/04/25/css-specificity/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>几个常用 CSS 属性的简短写法</title>
		<link>http://www.akasuna.com/2011/04/17/css-shorthand-properties/</link>
		<comments>http://www.akasuna.com/2011/04/17/css-shorthand-properties/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 14:31:05 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=478</guid>
		<description><![CDATA[精简 CSS 代码有很多种方法，但其中最常用的方法可能就是使用属性的简短形式。 具有简短写法的 CSS 属性很多，但是常用的属性无外乎字体、列表、背景、边框、透明等几种，所以在此对这几种属性的简短写法做个归纳，备忘。 font 属性 font 属性涉及到字体、字号、行高等好几个属性，使用简短写法的时候可以节省好多代码量。虽然并非所有属性都要定义，但是一般来说 font-size 和 font-family 是必不可少的，以下是 font 的几个属性与其对应的默认值： /* font 各属性与默认值 */ font-variant: normal; line-height: normal; font-family: varies; font-weight: normal; font-style: normal; font-size: medium; 以上 6 个属性可以合并成一行，根据 W3C 规范，各属性前后排列顺序依次为： /* 字体各属性前后顺序 */ font: [font-style] [font-variant] [font-weight] [font-size]/[line-height] [font-family]; 再看以下几个示例： font: 14px Georgia, serif; font: 14px/1.4 Georgia, serif; [...]]]></description>
			<content:encoded><![CDATA[<p>精简 <acronym title="Cascading Style Sheets">CSS</acronym> 代码有很多种方法，但其中最常用的方法可能就是使用属性的简短形式。</p>
<p>具有简短写法的 <acronym title="Cascading Style Sheets">CSS</acronym> 属性很多，但是常用的属性无外乎字体、列表、背景、边框、透明等几种，所以在此对这几种属性的简短写法做个归纳，备忘。</p>
<p><span id="more-478"></span></p>
<h3>font 属性</h3>
<p><code>font</code> 属性涉及到字体、字号、行高等好几个属性，使用简短写法的时候可以节省好多代码量。虽然并非所有属性都要定义，但是一般来说 <code>font-size</code> 和 <code>font-family</code> 是必不可少的，以下是 <code>font</code> 的几个属性与其对应的默认值：</p>
<pre><span style="color:#ff8000">/* font 各属性与默认值 */</span>
<span style="color:#bb7977; font-weight:bold">font-variant</span><span style="color:#ff0080; font-weight:bold">:</span> normal<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">line-height</span><span style="color:#ff0080; font-weight:bold">:</span> normal<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> varies<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> normal<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">font-style</span><span style="color:#ff0080; font-weight:bold">:</span> normal<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> medium<span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>以上 6 个属性可以合并成一行，根据 <abbr title="World Wide Web Consortium">W3C</abbr> 规范，各属性前后排列顺序依次为：</p>
<pre><span style="color:#ff8000">/* 字体各属性前后顺序 */</span>
<span style="color:#8080c0; font-weight:bold">font</span><span style="color:#ff0080; font-weight:bold">: [</span>font-style<span style="color:#ff0080; font-weight:bold">] [</span>font-variant<span style="color:#ff0080; font-weight:bold">] [</span>font-weight<span style="color:#ff0080; font-weight:bold">] [</span>font-size<span style="color:#ff0080; font-weight:bold">]/[</span>line-height<span style="color:#ff0080; font-weight:bold">] [</span>font-family<span style="color:#ff0080; font-weight:bold">];</span>
</pre>
<p>再看以下几个示例：</p>
<pre><span style="color:#8080c0; font-weight:bold">font</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">14px</span> Georgia<span style="color:#ff0080; font-weight:bold">,</span> serif<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#8080c0; font-weight:bold">font</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:#800080; font-weight:bold">1.4</span> Georgia<span style="color:#ff0080; font-weight:bold">,</span> serif<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#8080c0; font-weight:bold">font</span><span style="color:#ff0080; font-weight:bold">:</span> italic lighter <span style="color:#800080; font-weight:bold">14px</span><span style="color:#ff0080; font-weight:bold">/</span><span style="color:#800080; font-weight:bold">1.4</span> Georgia<span style="color:#ff0080; font-weight:bold">,</span> serif<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#8080c0; font-weight:bold">font</span><span style="color:#ff0080; font-weight:bold">:</span> italic small-caps lighter <span style="color:#800080; font-weight:bold">14px</span><span style="color:#ff0080; font-weight:bold">/</span><span style="color:#800080; font-weight:bold">1.4</span> Georgia<span style="color:#ff0080; font-weight:bold">,</span> serif<span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>可以看到，一行代码就可以代替一段代码，而且看起来还更优雅一些，就是单独查找某个属性的时候有点不太方便，看着眼花。</p>
<h3>list 属性</h3>
<p><code>list</code> 有三个属性，这三个属性分别定义：<code>type</code>、<code>image</code> 和 <code>position</code>，它们的属性名和默认值分别如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">list-style-type</span><span style="color:#ff0080; font-weight:bold">:</span> disc<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">list-style-image</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">list-style-position</span><span style="color:#ff0080; font-weight:bold">:</span> outside<span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p><code>list</code> 只有三个属性，并不复杂，但是我们仍然可以将这三个属性合并为在一行中，根据 <abbr title="World Wide Web Consortium">W3C</abbr> 规范，写法如下：</p>
<pre><span style="color:#ff8000">/* list 属性简短写法 */</span>
<span style="color:#bb7977; font-weight:bold">list-style</span><span style="color:#ff0080; font-weight:bold">: [</span>list-style-type<span style="color:#ff0080; font-weight:bold">] [</span>list-style-position<span style="color:#ff0080; font-weight:bold">] [</span>list-style-image<span style="color:#ff0080; font-weight:bold">];</span>

<span style="color:#ff8000">/* 示例 */</span>
<span style="color:#bb7977; font-weight:bold">list-style</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">list-style</span><span style="color:#ff0080; font-weight:bold">:</span> disc<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">list-style</span><span style="color:#ff0080; font-weight:bold">:</span> disc outside<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">list-style</span><span style="color:#ff0080; font-weight:bold">:</span> disc outside url<span style="color:#ff0080; font-weight:bold">(</span>bg<span style="color:#ff0080; font-weight:bold">.</span>png<span style="color:#ff0080; font-weight:bold">);</span>
</pre>
<p>一如既往的简单，基本上就是简写了 <code>list</code> 属性的名称，然后按顺序排列一下属性的值即可。</p>
<h3>background 属性</h3>
<p>很多样式表中都会多次定义 <code>background</code> 属性，每次都要重复其 5 个属性的话，那代码量可会成倍的增加呢。下面是其 5 个属性名及其默认值：</p>
<pre><span style="color:#ff8000">/* background 的各属性及其默认值 */</span>
<span style="color:#bb7977; font-weight:bold">background-attachment</span><span style="color:#ff0080; font-weight:bold">:</span> scroll<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">background-color</span><span style="color:#ff0080; font-weight:bold">:</span> transparent<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">background-position</span><span style="color:#ff0080; font-weight:bold">:</span> top left<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">background-repeat</span><span style="color:#ff0080; font-weight:bold">:</span> repeat<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">background-image</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>根据 <abbr title="World Wide Web Consortium">W3C</abbr> 规范，将其 5 个属性合并起来的写法如下：</p>
<pre><span style="color:#ff8000">/* background 属性简短写法 */</span>
<span style="color:#bb7977; font-weight:bold">background</span><span style="color:#ff0080; font-weight:bold">: [</span>background-color<span style="color:#ff0080; font-weight:bold">] [</span>background-image<span style="color:#ff0080; font-weight:bold">] [</span>background-repeat<span style="color:#ff0080; font-weight:bold">] [</span>background-attachment<span style="color:#ff0080; font-weight:bold">] [</span>background-position<span style="color:#ff0080; font-weight:bold">];</span>

<span style="color:#ff8000">/* 示例 */</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">#777</span><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> url<span style="color:#ff0080; font-weight:bold">(</span>images<span style="color:#ff0080; font-weight:bold">/</span>bg<span style="color:#ff0080; font-weight:bold">.</span>png<span style="color:#ff0080; font-weight:bold">)</span> <span style="color:#800080; font-weight:bold">0 0</span><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">#777</span> url<span style="color:#ff0080; font-weight:bold">(</span>images<span style="color:#ff0080; font-weight:bold">/</span>bg<span style="color:#ff0080; font-weight:bold">.</span>png<span style="color:#ff0080; font-weight:bold">)</span> repeat-x <span style="color:#800080; font-weight:bold">0 0</span><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">#777</span> url<span style="color:#ff0080; font-weight:bold">(</span>images<span style="color:#ff0080; font-weight:bold">/</span>bg<span style="color:#ff0080; font-weight:bold">.</span>png<span style="color:#ff0080; font-weight:bold">)</span> repeat-x fixed <span style="color:#800080; font-weight:bold">0 0</span><span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>对于 <code>background</code> 简短写法而言，不同的标签的使用方法和效果都有一些细微差别，欲知详情者，请至<a href="http://www.w3.org/TR/CSS2/colors.html#background">官方文档</a>查看。</p>
<h3>border 属性</h3>
<p><code>border</code> 属性更为简单，它 3 个属性以及默认值如下：</p>
<pre><span style="color:#ff8000">/* border 各属性及其默认值 */</span>
<span style="color:#bb7977; font-weight:bold">border-width</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-style</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-color</span><span style="color:#ff0080; font-weight:bold">:</span> none<span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>根据 <abbr title="World Wide Web Consortium">W3C</abbr> 规范，其简短写法如下：</p>
<pre><span style="color:#ff8000">/* border 属性简短写法 */</span>
<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">: [</span>border-width<span style="color:#ff0080; font-weight:bold">] [</span>border-style<span style="color:#ff0080; font-weight:bold">] [</span>border-color<span style="color:#ff0080; font-weight:bold">];</span>

<span style="color:#ff8000">/* 示例 */</span>
<span style="color:#bb7977; font-weight:bold">border</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">#111</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">2px</span> dotted <span style="color:#800080; font-weight:bold">#222</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">3px</span> dashed <span style="color:#800080; font-weight:bold">#333</span><span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<p>当然也可以为 4 个边框定义不同的样式：</p>
<pre><span style="color:#bb7977; font-weight:bold">border-bottom</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">#777</span><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">2px</span> solid <span style="color:#800080; font-weight:bold">#111</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">border-left</span><span style="color:#ff0080; font-weight:bold">:</span>   <span style="color:#800080; font-weight:bold">2px</span> solid <span style="color:#800080; font-weight:bold">#111</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">#777</span><span style="color:#ff0080; font-weight:bold">;</span>
</pre>
<h3>结语</h3>
<p>使用 <acronym title="Cascading Style Sheets">CSS</acronym> 简短写法一般都可以大大节省时间和代码量，如果还没开始使用的，赶紧使用，我担保你会越用越喜欢。</p>
<p>Via <a href="http://perishablepress.com/press/2010/05/04/top-5-css-shorthand-properties/">Top 5 CSS Shorthand Properties</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/04/17/css-shorthand-properties/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>应该记住的 30 个 CSS 选择器</title>
		<link>http://www.akasuna.com/2011/04/06/the-30-css-selectors-you-must-memorize/</link>
		<comments>http://www.akasuna.com/2011/04/06/the-30-css-selectors-you-must-memorize/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 01:30:23 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=474</guid>
		<description><![CDATA[可能你已经学过了 CSS 的 ID 选择器、类选择器和后代选择器，但是这就够了吗？ 可能不太够，对于 CSS 而言，还有很多灵活的使用方法。 本文将向你介绍一些常用的 CSS 选择器方法，其中有一些是 CSS3 选择器，只有比较新的浏览器才支持，但是这些新选择器同样要记住，因为像 IE6 之类旧浏览器终将被淘汰。 OK，开始。 1. * * { margin: 0; padding: 0; } 此星号将选择当前页面内所有标签，相信很多人都使用过这招来清空浏览器默认的 margin 和 padding，如果是在测试的时候，用这招当然没什么问题，但是在正式的产品中尽量不要这样用，据说它会大大加重浏览器的负担，而且也没必要清空所有标签的 margin 和 padding。 * 同样可以作为子选择器使用： #container * { border: 1px solid black; } 以上代码将为 ID 为 container 容器内所有标签加上一个像素宽的黑色实线边框。 2. #X #container { width: 960px; margin: auto; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.akasuna.com/wp-content/uploads/2011/04/css-selecter.jpg" alt="" title="css selecter" width="279" height="153" class="alignleft size-full wp-image-338" />可能你已经学过了 CSS 的 ID 选择器、类选择器和后代选择器，但是这就够了吗？</p>
<p>可能不太够，对于 CSS 而言，还有很多灵活的使用方法。</p>
<p>本文将向你介绍一些常用的 CSS 选择器方法，其中有一些是 CSS3 选择器，只有比较新的浏览器才支持，但是这些新选择器同样要记住，因为像 IE6 之类旧浏览器终将被淘汰。</p>
<p>OK，开始。<br />
<span id="more-474"></span></p>
<h3>1. *</h3>
<pre><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>
</pre>
<p>此星号将选择当前页面内所有标签，相信很多人都使用过这招来清空浏览器默认的 <code>margin</code> 和 <code>padding</code>，如果是在测试的时候，用这招当然没什么问题，但是在正式的产品中尽量不要这样用，据说它会大大加重浏览器的负担，而且也没必要清空所有标签的 <code>margin</code> 和 <code>padding</code>。</p>
<p><code>*</code> 同样可以作为子选择器使用：</p>
<pre><span style="color:#004466">#container</span> <span style="color:#ff0080; font-weight:bold">* {</span>
	<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>以上代码将为 ID 为 <code>container</code> 容器内所有标签加上一个像素宽的黑色实线边框。</p>
<h3>2. #X</h3>
<pre><span style="color:#004466">#container</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">960px</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> auto<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>以 <code>#</code> 开头的选择器允许我们根据 ID 来选择标签，这种选择器最为常用。<code>ID</code> 选择器用法比较严格，对于一个 HTML 文档而言，不允许出现 ID 相同的标签，因此 ID 选择器只能选择一个标签。 </p>
<h3>3. .X</h3>
<pre><span style="color:#0080c0">.error</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这个是类选择器，类选择器和 ID 选择器的区别是 HTML 中的类可以重复，也就是说通过类选择器可以选择多个标签，当 HTML 中的多个标签有共同特性时，可以把他们定义为一个类，这样在 CSS 中就可以很容易的选择它们。</p>
<h3>4. X Y</h3>
<pre><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">text-decoration</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>
</pre>
<p>这个一般称为后代选择器。例如，你并不像选择所有超链接，而只想选择 <code>li</code> 标签中的超链接，就可以用后代选择器。</p>
<h3>5. X</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#8080c0; font-weight:bold">ul</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">margin-left</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>
</pre>
<p>如果你想通过标签类型来选择页面上的所有标签，可以使用这种标签选择器。例如，你想要选择页面上所有超链接，可以使用 <code>a { }</code>。</p>
<h3>6. X:visited 和 X:link</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">:</span><span style="color:#8080c0; font-weight:bold">link</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">:</span>visited <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> purple<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这是伪类选择器，我们可以使用 <code>a:link</code> 来选择所有没被点击过的超链接，也可以用 <code>:visited</code> 来选择所有被点击过或访问过的超链接。</p>
<h3>7. X + Y</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#8080c0; font-weight:bold">p</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这个可以称为邻近选择器，以上面的代码为例，它只能选择紧跟着 <code>ul</code> 的 <code>p</code> 标签，而且只有 <code>ul</code> 后面的第一个 <code>p</code> 会被选中。</p>
<h3>8. X > Y</h3>
<pre><span style="color:#8080c0; font-weight:bold">div</span>#container <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#8080c0; font-weight:bold">ul</span> <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p><code>X > Y</code> 和 <code>X Y</code> 的不同之处前者只能选择 <code>X</code> 的直接后代。例如如下标签：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;div</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;container&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item
			<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
				<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> Child <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> List Item <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <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;/div&gt;</span>
</pre>
<p>基于以上 HTML 代码，<code>#container > ul</code> 选择器只能选择 <code>id</code> 为 <code>container</code> 的 div 下面的 <code>ul</code>，而 <code>li</code> 下面的 <code>ul</code> 却选择不到。</p>
<h3>9. X ~ Y</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul</span> ~ <span style="color:#8080c0; font-weight:bold">p</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这种选择器和 <code>X + Y</code> 有相似之处，但是又没有 <code>X + Y</code> 严格，对于邻近选择器（<code>ul + p</code>）而言，只能选择紧跟着 <code>ul</code> 的第一个 <code>p</code> 标签，而 <code>ul ~ p</code> 却可以选择 <code>ul</code> 后面的所有 <code>p</code> 标签。</p>
<h3>10. X[title]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#8080c0; font-weight:bold">title</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> green<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这个称为属性选择器，例如上面的代码，只能选择出具有 <code>title</code> 属性的超链接。</p>
<h3>11. X[href="foo"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;http://akasuna.com&quot;</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">#1f6053</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>上面的 CSS 代码，只会选择链接到 <em>http://akasuna.com</em> 的超链接设置为绿色，而其它超链接则不受影响。如果你想为指向不同站点的超链接指定不同的颜色，这是个好方法。</p>
<h3>12. X[href*="akasuna"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href<span style="color:#ff0080; font-weight:bold">*=</span><span style="color:#a68500">&quot;akasuna&quot;</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">#1f6053</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这种方法更为常见，<code>*=</code> 表示指定的字符串必须出现在属性的值里面，这样一来，<em>akasuna.com</em>，<em>demo.akasuna.com</em>，<em>bbs.akasuna.com</em> 甚至是 <em>akasuna2.com</em> 都将被此选择器选择到。</p>
<h3>13. X[href^="http"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href^<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;http&quot;</span><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> url<span style="color:#ff0080; font-weight:bold">(</span>path<span style="color:#ff0080; font-weight:bold">/</span>to<span style="color:#ff0080; font-weight:bold">/</span>external<span style="color:#ff0080; font-weight:bold">/</span>icon<span style="color:#ff0080; font-weight:bold">.</span>png<span style="color:#ff0080; font-weight:bold">)</span> no-repeat<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">padding-left</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">10px</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>有些网站会在超链接的旁边显示一个图标来表示此链接为外部链接，估计大多数人都见过这样的设计，此图标用来提醒访客，点击此链接将打开另外一个完全不同的网站。</p>
<p>其实要做到这点也很容易，只要判断一下超链接地址的开头部分就行了，如果超链接的 <code>href</code> 属性是以 <code>http</code> 开头的，那么就说明它是外部链接，就像上面的代码那样。</p>
<blockquote><p>注意：我们这里判断的是 <code>http</code> 而非<code>http://</code>，一是没必要，二是为了兼顾 <code>https://</code> 之情况。</p>
<p>另外，使用这种方法的话，有一个前提，所有内部链接都用相对路径而非绝对路径，这样才能保证内部链接不是以 <code>http</code> 开头。</p></blockquote>
<p>如果我们要为那些链接向图片的超链接设置特定的样式呢，这种情况就要判断超链接地址的末尾部分了。</p>
<h3>14. X[href$=".jpg"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href$<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;.jpg&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>使用 <code>$</code>，表示的是字符串的末尾部分，这里我们要查找那些链接向图片的超链接，也就是 url 地址是以 <code>.jpg</code> 结尾的那些。注意，这里没有考虑 <code>.gif</code> 和 <code>.png</code> 的情况。</p>
<h3>15. X[data-*="foo"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-filetype<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;image&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>接着上面的第 14 条，如果我们兼顾各种图片格式，例如：<code>png</code>，<code>jpg</code>，<code>jpeg</code>，<code>gif</code>，又该怎么办呢？你可能会想到下面这种方法：</p>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href$<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;.jpg&quot;</span><span style="color:#ff0080; font-weight:bold">],</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href$<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;.jpeg&quot;</span><span style="color:#ff0080; font-weight:bold">],</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href$<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;.png&quot;</span><span style="color:#ff0080; font-weight:bold">],</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>href$<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;.gif&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>但是这样写起来稍微有点痛苦，而且低效。其实我们这里可以使用自定义属性，为所有指向图片的超链接添加一个属性 <code>data-filetype</code>，如：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;path/to/image.jpg&quot;</span> <span style="color:#8080c0; font-weight:bold">data-filetype</span>=<span style="color:#a68500">&quot;image&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span> Image Link <span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
</pre>
<p>然后就可以在 CSS 里面使用标准的选择器来选择这些超链接了。</p>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-filetype<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;image&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>16. X[foo~="bar"]</h3>
<pre><span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-info~<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;external&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-info~<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;image&quot;</span><span style="color:#ff0080; font-weight:bold">] {</span>
	<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>参照上面的第 15 条那个自定义属性，我们可以创建一个 <code>data-info</code> 属性，这个属性值可以接收多个值:</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;a</span> <span style="color:#8080c0; font-weight:bold">href</span>=<span style="color:#a68500">&quot;path/to/image.jpg&quot;</span> <span style="color:#8080c0; font-weight:bold">data-info</span>=<span style="color:#a68500">&quot;external image&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span> Click Me, Fool <span style="color:#bb7977; font-weight:bold">&lt;/a&gt;</span>
</pre>
<p>这样一来，通过一个属性就可以表达两层意思：1. 它是外部链接；2. 它是指向图片的链接。然后就可以用 CSS 分别对此超链接设置样式：</p>
<pre><span style="color:#ff8000">/* 选择 data-info 属性中包含有 &quot;external&quot; 的那些超链接 */</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-info~<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;external&quot;</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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#ff8000">/* 选择 data-info 属性中包含有 &quot;image&quot; 的那些超链接 */</span>
<span style="color:#8080c0; font-weight:bold">a</span><span style="color:#ff0080; font-weight:bold">[</span>data-info~<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;image&quot;</span><span style="color:#ff0080; font-weight:bold">] {</span>
	<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>17. X:checked</h3>
<pre><span style="color:#8080c0; font-weight:bold">input</span><span style="color:#ff0080; font-weight:bold">[</span>type<span style="color:#ff0080; font-weight:bold">=</span>radio<span style="color:#ff0080; font-weight:bold">]:</span>checked <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>又是一个伪类选择器，它能选择那些被选中的标签，例如单选框、复选框等，用起来应该很简单。</p>
<h3>18. X:after</h3>
<p>这个不是伪类，而是伪元素，对应的还有 <code>:before</code>，从字面上看，它们分别表示元素的前面和后面，实际上它们的功能是在元素的前面或后面添加内容，需要和 CSS 的 <code>content</code> 属性配合使用，如：</p>
<pre><span style="color:#8080c0; font-weight:bold">h1</span><span style="color:#ff0080; font-weight:bold">:</span>after <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">content</span><span style="color:#ff0080; font-weight:bold">:</span>url<span style="color:#ff0080; font-weight:bold">(</span>logo<span style="color:#ff0080; font-weight:bold">.</span>gif<span style="color:#ff0080; font-weight:bold">)</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>在显示时，标题内容后会插入一张图片，这就是伪元素 <code>:after</code> 的作用。</p>
<h3>19. X:hover</h3>
<pre><span style="color:#8080c0; font-weight:bold">div</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">#e3e3e3</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>拜托，这个大家都会的，它表示当鼠标在元素上悬停时的样式。</p>
<blockquote><p>注意：在老版本 IE 中，这个伪类只对超链接有效，对其它任何元素无效！</p></blockquote>
<p>常见的用法是，当鼠标悬停的找链接上的时候，给超链接设置一个底部边框：</p>
<pre><span style="color:#ff8000">/* order-bottom: 1px solid black; 的效果看起来比 text-decoration: underline; 要好一些 */</span>
<span style="color:#8080c0; font-weight:bold">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">border-bottom</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<h3>20. X:not(selector)</h3>
<pre><span style="color:#8080c0; font-weight:bold">div</span><span style="color:#ff0080; font-weight:bold">:</span>not<span style="color:#ff0080; font-weight:bold">(</span>#container<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> blue<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>嗯，这个伪类选择器比较有用。试想一下，如果你要选择页面中除了 <code>id</code> 为 <code>container</code> 之外的所有 div，这段代码应该就是你想要的。</p>
<p>或者，你想要选择页面中除了 <code>p</code> 标签外的所有标签：</p>
<pre><span style="color:#ff0080; font-weight:bold">*:</span>not<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#8080c0; font-weight:bold">p</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> green<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>但是这应该很少用到。</p>
<h3>21. X::pseudoElement</h3>
<pre><span style="color:#8080c0; font-weight:bold">p</span><span style="color:#ff0080; font-weight:bold">::</span>first-line <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<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">1.2em</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>我们可以使用伪元素（这里用的是 <code>::</code> 哦）为元素的某部分设定样式，例如段落的第一行，或者第一个字母。切忌，这种方法只对块级元素起作用。</p>
<p>为段落的第一个字母设定样式：</p>
<pre><span style="color:#8080c0; font-weight:bold">p</span><span style="color:#ff0080; font-weight:bold">::</span>first-letter <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:#bb7977; font-weight:bold">font-size</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">2em</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<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> cursive<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">padding-right</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">2px</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这段代码将为页面上所有段落设置<strong>首字下沉</strong>的效果，这种样式在报纸上经常可以看到。</p>
<h3>22. X:nth-child(n)</h3>
<pre><span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>nth-child<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">color</span><span style="color:#ff0080; font-weight:bold">:</span> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p><code>nth-child</code> 伪类选择器以一个整数作为参数，不包括 0，要从 1 开始。如果你想选择列表元素中的第 2 个，可以使用 <code>li:nth-child(2)</code>。</p>
<p>这个方法当然也可以用来选择多个元素，例如 <code>li:nth-child(4n)</code> 就可以用来选择列表元素中的第 4 个，第 8 个，第 12 个 ……（4 的倍数）。</p>
<h3>23. X:nth-last-child(n)</h3>
<pre><span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>nth-last-child<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">color</span><span style="color:#ff0080; font-weight:bold">:</span> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>如果一个 <code>ul</code> 中的有 400 个条目，而你只想选择其中的倒数第 2 个，该怎么办呢？</p>
<p>相比 <code>li:nth-child(399)</code> 而言，<code>nth-last-child(2)</code> 也许更为适合。</p>
<h3>24. X:nth-of-type(n)</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul</span><span style="color:#ff0080; font-weight:bold">:</span>nth-of-type<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">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>有时候，你不是想选择 <code>ul</code> 中的第 3 个 <code>li</code>，而是想选择第 3 个 <code>ul</code>，而这些 <code>ul</code> 又没有 <code>id</code>， 该怎么办呢？</p>
<p>此时应该使用 <code>nth-of-type(n)</code>，上述代码将为页面中的第三个 <code>ul</code> 设置一个 1 个像素的黑色边框。</p>
<h3>25. X:nth-last-of-type(n)</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul</span><span style="color:#ff0080; font-weight:bold">:</span>nth-last-of-type<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">border</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>请参照第 23 条中的 <code>nth-last-of-type</code> 自行理解。</p>
<h3>26. X:first-child</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul li</span><span style="color:#ff0080; font-weight:bold">:</span>first-child <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> none<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这个伪类用来选择父元素中的第一个子元素，对应的还有 <code>X:last-child</code>。你可以用它来删除列表中第一个元素和最后一个元素的边框。</p>
<p>例如，有一个列表，如果列表中每个元素都有一个 <code>border-top</code> 和 <code>border-bottom</code>，那么第一个元素和最后一个元素的边框看起来就有点多余了。</p>
<p>很多人都会想到为第一个元素和最后一个元素分别设置一个 <code>first</code> 和 <code>last</code> 类名称，然后通过这个类名称清楚他们的边框。这样当然也是可以的，但是用伪类同样也可以达到效果，具体请看下面的第 27 条。</p>
<h3>27. X:last-child</h3>
<pre><span style="color:#8080c0; font-weight:bold">ul</span> <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>last-child <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> green<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>和 <code>first-child</code> 对应，<code>last-child</code> 用来选择父元素中的最后一个子元素。结合上面的第 26 条，有如下示例：</p>
<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;</span> List Item <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <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:#8080c0; font-weight:bold">ul</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">200px</span><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">#292929</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> white<span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">list-style</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">padding-left</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:#8080c0; font-weight:bold">li</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">10px</span><span style="color:#ff0080; font-weight:bold">;</span>
	<span style="color:#bb7977; font-weight:bold">border-bottom</span><span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">1px</span> solid black<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">#3c3c3c</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这段 CSS 代码为列表设置了背景色，消除了 <code>ul</code> 默认的内边距，并对每个 <code>li</code> 设置了边框，边框颜色深于 <code>ul</code> 的背景色。<br />
<img alt="" src="http://d2o0t5hpnwv4c1.cloudfront.net/840_cssSelectors/extraBorders.png" title="ul list" class="alignnone" width="634" height="411" /></p>
<p>问题来了，正如图片上所示，此无序列表的最顶端和最低端也有边框，这看起来有点不爽。下面我们用 <code>:first-child</code> 和 <code>:last-child</code> 来解决这个问题：</p>
<pre><span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>first-child <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> none<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>

<span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>last-child <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">border-bottom</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>
</pre>
<p><img alt="" src="http://d2o0t5hpnwv4c1.cloudfront.net/840_cssSelectors/fixed.png" title="ul list" class="alignnone" width="618" height="387" /></p>
<p>效果如图所示，最顶端和最低端的边框没有了，问题解决了。</p>
<h3>28. X:only-child</h3>
<pre><span style="color:#8080c0; font-weight:bold">div p</span><span style="color:#ff0080; font-weight:bold">:</span>only-child <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> red<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>实际上，你可能会发现 <code>only-child</code> 这种伪类并不常用，但是在某些场合，你还非用它不可。</p>
<p><code>only-child</code> 用来选择那些<strong>是父元素中唯一的子元素</strong>的元素（独生子女！）。例如上面的代码，如果某个 <code>div</code> 中只有一个段落，那么这个段落将会以红色字体显示，如果有多个段落，则不受影响。</p>
<p>看下面的 HTML 代码：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;div&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;p&gt;</span> My paragraph here. <span style="color:#bb7977; font-weight:bold">&lt;/p&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/div&gt;</span>

<span style="color:#bb7977; font-weight:bold">&lt;div&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;p&gt;</span> Two paragraphs total. <span style="color:#bb7977; font-weight:bold">&lt;/p&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;p&gt;</span> Two paragraphs total. <span style="color:#bb7977; font-weight:bold">&lt;/p&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/div&gt;</span>
</pre>
<p>这段 HTML 代码中，第二个 <code>div</code> 中有 2 个段落，这两个选择器不会被此选择器选择到；而第一个 <code>div</code> 中只有 1 个段落，因此这个段落是 <code>only-child</code>，它会以红色字体显示。</p>
<h3>29. X:only-of-type</h3>
<pre><span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>only-of-type <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>跟第 28 条类似，都是选择子元素。区别是：第 28 条中，选择的是唯一子元素（独生子女，不管是男的还是女的，反正只有一个）；而第 29 条中，选择的是某类型的唯一元素（可以有多个孩子，但是性别不能相同，假如是两男一女，那么这个唯一女性将被选择到）。</p>
<h3>30. X:first-of-type</h3>
<p><code>first-of-type</code> 伪类选择的是相同类型元素中的第一个元素。</p>
<p>为了便于理解，不妨来做个测试，请将如下代码拷贝至文本编辑器中：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;div&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;p&gt;</span> My paragraph here. <span style="color:#bb7977; font-weight:bold">&lt;/p&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;ul&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#800080; font-weight:bold">1</span> <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#800080; font-weight:bold">2</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;ul&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#800080; font-weight:bold">3</span> <span style="color:#bb7977; font-weight:bold">&lt;/li&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;li&gt;</span> List Item <span style="color:#800080; font-weight:bold">4</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;/div&gt;</span>
</pre>
<p>此时，如果让你用 CSS 选择 <em>List Item 2</em>，该如何做呢？</p>
<p><strong>方案一：</strong></p>
<p>有多种方法可以达到效果，先来看第一种，使用 <code>first-of-type</code></p>
<pre><span style="color:#8080c0; font-weight:bold">ul</span><span style="color:#ff0080; font-weight:bold">:</span>first-of-type <span style="color:#ff0080; font-weight:bold">&gt;</span> <span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>nth-child<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">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>这段代码的意思是，先找到页面中的 <code>ul</code>，找到了 2 个 <code>ul</code>，那么选择第 1 个，然后再此无序列表中选择第 2 个 <code>li</code>。</p>
<p><strong>方案二：</strong></p>
<p>第二种方法是用邻近选择器</p>
<pre><span style="color:#8080c0; font-weight:bold">p</span> <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#8080c0; font-weight:bold">ul li</span><span style="color:#ff0080; font-weight:bold">:</span>last-child <span style="color:#ff0080; font-weight:bold">{</span>
	<span style="color:#bb7977; font-weight:bold">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>找到紧跟着 <code>p</code> 元素的 <code>ul</code>，然后选择此 <code>ul</code> 中的最后一个 <code>li</code> 即可。</p>
<p><strong>方案三：</strong></p>
<pre><span style="color:#8080c0; font-weight:bold">ul</span><span style="color:#ff0080; font-weight:bold">:</span>first-of-type <span style="color:#8080c0; font-weight:bold">li</span><span style="color:#ff0080; font-weight:bold">:</span>nth-last-child<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">font-weight</span><span style="color:#ff0080; font-weight:bold">:</span> bold<span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>跟方案一类似，先找到第一个 <code>ul</code>，然后找到其倒数第一个 <code>li</code>。</p>
<h3>结语</h3>
<p>如果你在使用如 IE 6 之类的低版本浏览器，那么以上有些比较新 CSS 选择器可能不适合。但是不要因为自己使用的是低版本浏览器，就不学习这些新的 CSS 选择器，不学的话吃亏的还是自己。这里有一个<a href="http://www.quirksmode.org/css/contents.html">浏览器兼容性列表</a>，另外你也可以使用 <a href="http://code.google.com/p/ie7-js/">Dean Edward 的 IE9.js</a> 让你的低版本 IE 支持一些IE9 的特性。</p>
<p>另外，当使用一些如 jQuery 之类的 JS 库的时候，尽量在使用过程中用标准的 CSS3 选择器，而非 JS 库自定义的选择器，如果可能的话，JS 库使用浏览器自身的 CSS 解析器，比使用 JS 库自定义的解析器 <a href="http://jsperf.com/jquery-css3-not-vs-not">速度更快</a>。</p>
<p>本文翻译自 <a href="http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/">The 30 CSS Selectors you Must Memorize</a>，并稍作修改。基本上每种选择器都有对应的 DEMO，请至原文查看。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/04/06/the-30-css-selectors-you-must-memorize/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>jQuery Ready 方法的简短写法</title>
		<link>http://www.akasuna.com/2011/03/22/jquery-shorthand-ready-method/</link>
		<comments>http://www.akasuna.com/2011/03/22/jquery-shorthand-ready-method/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 12:47:22 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=469</guid>
		<description><![CDATA[写 jQuery 代码的时候，一般要写一个 Ready 方法，以确保 DOM 已加载完毕，然后再执行相应的 jQuery 代码。Ready 方法一般写法如下： $(document).ready(function() { // 从这里开始 }); 但是在看其他人写的 jQuery 代码的时候，经常又会看到如下写法： $(function() { // 从这里开始 }); 第二种写法虽然简短了许多，但是在功能上和第一种写法是等价的，如果你不相信，可以看一下 jQuery 的源代码中有如下代码片段： // HANDLE: $(function) // Shortcut for document ready if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } 如果传入选择器中的参数是一个函数，那么会自动返回一个 rootjQuery.ready( selector )，而 rootjQuery 又是 jQuery(document) 的一个引用，所以这里就相当于调用 jQuery(document).ready() [...]]]></description>
			<content:encoded><![CDATA[<p>写 jQuery 代码的时候，一般要写一个 Ready 方法，以确保 DOM 已加载完毕，然后再执行相应的 jQuery 代码。Ready 方法一般写法如下：</p>
<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:#f27900">// 从这里开始</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p>但是在看其他人写的 jQuery 代码的时候，经常又会看到如下写法：<br />
<span id="more-469"></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:#f27900">// 从这里开始</span>
<span style="color:#ff0080; font-weight:bold">});</span>
</pre>
<p>第二种写法虽然简短了许多，但是在功能上和第一种写法是等价的，如果你不相信，可以看一下 jQuery 的源代码中有如下代码片段：</p>
<pre><span style="color:#f27900">// HANDLE: $(function)</span>
<span style="color:#f27900">// Shortcut for document ready  </span>
<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> selector <span style="color:#ff0080; font-weight:bold">) ) {</span>
    <span style="color:#bb7977; font-weight:bold">return</span> rootjQuery<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ready</span><span style="color:#ff0080; font-weight:bold">(</span> selector <span style="color:#ff0080; font-weight:bold">);</span>
<span style="color:#ff0080; font-weight:bold">}</span>
</pre>
<p>如果传入选择器中的参数是一个函数，那么会自动返回一个 rootjQuery<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ready</span><span style="color:#ff0080; font-weight:bold">(</span> selector <span style="color:#ff0080; font-weight:bold">)</span>，而 rootjQuery 又是 <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">jQuery</span><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> 方法，而之前的那个匿名方法亦被传入其中以备执行。</p>
<p>这种简短写法虽说减少了了一点代码量，但是可读性稍差，所以我个人还是倾向于前面的第一种写法，特别是在团队开发中，仅仅是为了语意明确。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/03/22/jquery-shorthand-ready-method/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JavaScript 为什么要用 var 关键字申明变量</title>
		<link>http://www.akasuna.com/2011/03/21/why-javascrip-declare-variable-with-var-keyword/</link>
		<comments>http://www.akasuna.com/2011/03/21/why-javascrip-declare-variable-with-var-keyword/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 06:55:28 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=467</guid>
		<description><![CDATA[我们都知道 JavaScript 中的 var 关键字是用来申明变量的，但是如果不用这个关键字而直接写出变量名，然后赋值给它，JavaScript 也并不会报错，它会自动申明这个变量。 难道说 JavaScript 中的 var 是个多余的东西吗？显然不是！ 请看下面这段代码： str1 = 'Hello JavaScript!'; function fun1() { str1 = 'Hello Java!'; } fun1(); alert(str1); // 弹出 Hello Java! 可以看到，在函数 fun1 被调用后，str1 的值在函数内被改变了。 再将上面的代码稍作修改： str1 = 'Hello JavaScript!'; function fun1() { var str1 = 'Hello Java!'; } fun1(); alert(str1); // 弹出 Hello JavaScript! 看到没有，str1 [...]]]></description>
			<content:encoded><![CDATA[<p>我们都知道 JavaScript 中的 var 关键字是用来申明变量的，但是如果不用这个关键字而直接写出变量名，然后赋值给它，JavaScript 也并不会报错，它会自动申明这个变量。</p>
<p>难道说 JavaScript 中的 var 是个多余的东西吗？显然不是！<br />
<span id="more-467"></span><br />
请看下面这段代码：</p>
<pre>str1 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'Hello JavaScript!'</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">fun1</span><span style="color:#ff0080; font-weight:bold">() {</span>
	str1 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'Hello Java!'</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#004466">fun1</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>str1<span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">// 弹出 Hello Java!</span>
</pre>
<p>可以看到，在函数 fun1 被调用后，str1 的值在函数内被改变了。</p>
<p>再将上面的代码稍作修改：</p>
<pre>str1 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'Hello JavaScript!'</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">fun1</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> str1 <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">'Hello Java!'</span><span style="color:#ff0080; font-weight:bold">;</span>
<span style="color:#ff0080; font-weight:bold">}</span>
<span style="color:#004466">fun1</span><span style="color:#ff0080; font-weight:bold">();</span>
<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span>str1<span style="color:#ff0080; font-weight:bold">);</span>

<span style="color:#f27900">// 弹出 Hello JavaScript!</span>
</pre>
<p>看到没有，str1 的值并没有被函数 fun1 改变。</p>
<p>显然，var 关键字影响了变量的作用域。</p>
<p>函数外部：变量不管是否用了 var 申明，都是全局变量。</p>
<p>函数内部：变量如果没有使用 var 关键字申明，那它就是全局变量，只有用 var 关键字申明了，才是局部变量。</p>
<h3>结论</h3>
<p>为了避免潜在的风险，务必使用 var 关键字来申明变量。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/03/21/why-javascrip-declare-variable-with-var-keyword/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>使用 HTML5 改造 WordPress 的 TwentyTen 主题</title>
		<link>http://www.akasuna.com/2011/02/28/using-html5-to-transform-wordpress-twentyten-theme/</link>
		<comments>http://www.akasuna.com/2011/02/28/using-html5-to-transform-wordpress-twentyten-theme/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 04:53:00 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=458</guid>
		<description><![CDATA[2010 年，WordPerss 发布了一个非常重大的版本更新：WordPress 3.0，而且这个版本带来了一个全新的默认主题：Twenty Ten。 TwentyTen 是一个不错的主题，并且能通过 W3C 的 HTML5 验证，但是奇怪的是，这个新的 TwentyTen 主题，除了声明了文档类型为 HTML5，基本上没有使用多少 HTML5 所带来的新特性，仅仅在 HTML 文档顶部加上一行 &#60;!doctype html&#62; 而已。 不过现在有些比较激进的开发者，对 TwentyTen 进行了改进，使用了不少 HTML5 的新特性。 改进的细节 将日志包含在 &#60;article&#62; 里面。 将日志的元数据中的发布日期包含在 &#60;time&#62; 里面。 使用 &#60;figure&#62; 和 &#60;figcaption&#62; 来处理日志中的图片。 日中评论表单中对于输入内容的一些验证，如 E-Mail 为必输，E-Mail 地址格式验证等。 使用 &#60;header&#62;， &#60;nav&#62; 和 &#60;footer&#62; 分别标记页眉，导航菜单和页脚。 ………… 下载 愿意尝鲜或做小白鼠的同学，可以去下载这个主题试试看，下载地址：http://www.twentytenfive.com/]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://www.akasuna.com/wp-content/uploads/2011/02/WordPress-HTML5.jpg" title="WordPress HTML5" class="alignleft" width="250" height="168" /> 2010 年，WordPerss 发布了一个非常重大的版本更新：WordPress 3.0，而且这个版本带来了一个全新的默认主题：<a href="http://wordpress.org/extend/themes/twentyten">Twenty Ten</a>。</p>
<p>TwentyTen 是一个不错的主题，并且能通过 W3C 的 HTML5 验证，但是奇怪的是，这个新的 TwentyTen 主题，除了声明了文档类型为 HTML5，基本上没有使用多少 HTML5 所带来的新特性，仅仅在 HTML 文档顶部加上一行 <span style="color:#bb7977; font-weight:bold">&lt;!doctype</span> html<span style="color:#bb7977; font-weight:bold">&gt;</span> 而已。</p>
<p>不过现在有些比较激进的开发者，对 TwentyTen 进行了改进，使用了不少 HTML5 的新特性。</p>
<p><span id="more-458"></span></p>
<h3>改进的细节</h3>
<ul>
<li>将日志包含在 <span style="color:#bb7977; font-weight:bold">&lt;article&gt;</span> 里面。</li>
<li>将日志的元数据中的发布日期包含在 <span style="color:#bb7977; font-weight:bold">&lt;time&gt;</span> 里面。</li>
<li>使用 <span style="color:#bb7977; font-weight:bold">&lt;figure&gt;</span> 和 <span style="color:#bb7977; font-weight:bold">&lt;figcaption&gt;</span> 来处理日志中的图片。</li>
<li>日中评论表单中对于输入内容的一些验证，如 E-Mail 为必输，E-Mail 地址格式验证等。</li>
<li>使用 <span style="color:#bb7977; font-weight:bold">&lt;header&gt;</span>， <span style="color:#bb7977; font-weight:bold">&lt;nav&gt;</span> 和 <span style="color:#bb7977; font-weight:bold">&lt;footer&gt;</span> 分别标记页眉，导航菜单和页脚。</li>
<li>…………</li>
</ul>
<h3>下载</h3>
<p>愿意尝鲜或做小白鼠的同学，可以去下载这个主题试试看，下载地址：<a href="http://www.twentytenfive.com/">http://www.twentytenfive.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/02/28/using-html5-to-transform-wordpress-twentyten-theme/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>选择虚拟主机时需要考虑哪些因素？</title>
		<link>http://www.akasuna.com/2011/01/27/some-features-to-look-for-in-a-web-host/</link>
		<comments>http://www.akasuna.com/2011/01/27/some-features-to-look-for-in-a-web-host/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 05:14:11 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=454</guid>
		<description><![CDATA[近年来，随着信息技术的飞速发展，拥有自己独立的网站对于大多数中小企业或个人，都已不再是什么难事。但是要拥有自己的网站，首先要面临的问题就是，我们的网站放在哪里？要自己购买一台服务器吗？事实上，对于大多数中小企业网站或个人网站，访问量一般都不会太大，对于服务器的要求不会太高，所以一款合适的虚拟主机就可以完全胜任。 但是目前市场上的虚拟主机可谓广告满天飞，让人看了眼花缭乱，对于不了解虚拟主机特性的人而言，往往不知如何去选择，只能任奸商忽悠。 下面我们就来一起看一下，选择虚拟主机时候，需要考虑哪些因素。。。 1. 存储空间 存储空间的大小，意味着你可以往你的网站上放多少东西。对于中小型网站而言，一般来说几个 GB 的空间应该足够使用了，虽然也有少数主机商申明“无限空间”，但当你真正使用的时候，你会发现，那只是他们宣传的噱头，因为他们一般会限制文件的数量，当文件数量超过一定额度的时候，他们就会通知你进行清理。Bluehost.com 虽然广告上打的是不限制空间大小，但实际上文件数量限制好像是 50000 左右，且文件总大小不超过 30GB，虽说不是无限的，但显然已经足够使用。 2. 月流量限制以及网速 什么是月流量限制，就是你的网站访客在你网站上所上传的和下载的总数据量。假设主机商给你的月流量限制是 10GB 的话，再假设你的单个网页平均大小是 100KB 的话，用户每访问一次网页，就将从服务器上下载 100KB 的数据，那么你的网站每个月可以访问的次数就大约为 10 万多次，当然这还没有考虑到上行的流量。需要特别说明的是，一般不要在服务器上放 MP3 之类的文件，因为一旦你的 MP3 文件被搜索引擎索引到了，而且这首歌还很流行，那么这个 MP3 文件每天都可能被访问数成千上万次，最终结果就是你的流量会很快的被用完。 关于网速，也就是访客打开您网站的速度，一般来说主机商都有自己的机房或者托管在网络供应商的机房，速度都不会慢。区别在于如果你选择的是国外的主机商，那么由于地理因素，网速可能会比国内的主机上慢一些，但是也不是非常慢，从我这里 ping Bluehost.com 的服务器，一般都在 200ms 以内，虽然不是非常快，但是已经足够快了。 3. 可绑定的域名数量 可绑定域名数量，也就是你可以在这个主机上放几个网站。假如你想做 3 个网站，分别为 abc1.com / abc2.com / abc3.com，那你没有必要买 3 个主机，如果你的主机支持绑定多个域名的话，你只需将这 3 个域名绑定到这个主机上就可以了，这显然大大降低了你建站的成本，如果再多找几个朋友入伙且想他们收取少量费用，利用这个挣点钱也是可以的。一般国外的虚拟主机都支持绑定多个域名，而国内主机商一般都只能绑定一个域名，这个需要鄙视一下。另外，如果你的域名没有备案，国内主机商好像还不允许绑定。Bluehost.com 宣称不限制绑定域名数量，但还是那句话，你不可能去绑定 10000 个域名上去吧，够用即可。 4. 企业邮箱 什么是企业邮箱？就是说，如果你的域名是 [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://www.akasuna.com/wp-content/uploads/2011/01/webhosting.jpg" class="alignleft" width="220" height="145" />近年来，随着信息技术的飞速发展，拥有自己独立的网站对于大多数中小企业或个人，都已不再是什么难事。但是要拥有自己的网站，首先要面临的问题就是，我们的网站放在哪里？要自己购买一台服务器吗？事实上，对于大多数中小企业网站或个人网站，访问量一般都不会太大，对于服务器的要求不会太高，所以一款合适的虚拟主机就可以完全胜任。<br />
但是目前市场上的虚拟主机可谓广告满天飞，让人看了眼花缭乱，对于不了解虚拟主机特性的人而言，往往不知如何去选择，只能任奸商忽悠。<br />
下面我们就来一起看一下，选择虚拟主机时候，需要考虑哪些因素。。。<br />
<span id="more-454"></span></p>
<h3>1. 存储空间</h3>
<p>存储空间的大小，意味着你可以往你的网站上放多少东西。对于中小型网站而言，一般来说几个 GB 的空间应该足够使用了，虽然也有少数主机商申明“无限空间”，但当你真正使用的时候，你会发现，那只是他们宣传的噱头，因为他们一般会限制文件的数量，当文件数量超过一定额度的时候，他们就会通知你进行清理。Bluehost.com 虽然广告上打的是不限制空间大小，但实际上文件数量限制好像是 50000 左右，且文件总大小不超过 30GB，虽说不是无限的，但显然已经足够使用。</p>
<h3>2. 月流量限制以及网速</h3>
<p>什么是月流量限制，就是你的网站访客在你网站上所上传的和下载的总数据量。假设主机商给你的月流量限制是 10GB 的话，再假设你的单个网页平均大小是 100KB 的话，用户每访问一次网页，就将从服务器上下载 100KB 的数据，那么你的网站每个月可以访问的次数就大约为 10 万多次，当然这还没有考虑到上行的流量。需要特别说明的是，一般不要在服务器上放 MP3 之类的文件，因为一旦你的 MP3 文件被搜索引擎索引到了，而且这首歌还很流行，那么这个 MP3 文件每天都可能被访问数成千上万次，最终结果就是你的流量会很快的被用完。</p>
<p>关于网速，也就是访客打开您网站的速度，一般来说主机商都有自己的机房或者托管在网络供应商的机房，速度都不会慢。区别在于如果你选择的是国外的主机商，那么由于地理因素，网速可能会比国内的主机上慢一些，但是也不是非常慢，从我这里 ping Bluehost.com 的服务器，一般都在 200ms 以内，虽然不是非常快，但是已经足够快了。</p>
<h3>3. 可绑定的域名数量</h3>
<p>可绑定域名数量，也就是你可以在这个主机上放几个网站。假如你想做 3 个网站，分别为 abc1.com / abc2.com / abc3.com，那你没有必要买 3 个主机，如果你的主机支持绑定多个域名的话，你只需将这 3 个域名绑定到这个主机上就可以了，这显然大大降低了你建站的成本，如果再多找几个朋友入伙且想他们收取少量费用，利用这个挣点钱也是可以的。一般国外的虚拟主机都支持绑定多个域名，而国内主机商一般都只能绑定一个域名，这个需要鄙视一下。另外，如果你的域名没有备案，国内主机商好像还不允许绑定。Bluehost.com 宣称不限制绑定域名数量，但还是那句话，你不可能去绑定 10000 个域名上去吧，够用即可。</p>
<h3>4. 企业邮箱</h3>
<p>什么是企业邮箱？就是说，如果你的域名是 abc.com，那么你可以在这个主机上建立诸如 xxx@abc.com 这样的邮箱，太酷了吧！一般来说，主机商都支持这项功能，而且都有自己的 webmail 接口，当然大多数时候我们还是会使用 Outlook 或 FoxMail 之类的工具去访问邮箱，因为企业邮箱都支持 SMTP 和 POP3，这个一般没有问题。问题在于，可以建立多少个邮箱账户呢？国内主机商支持的数量一般都很少，可能都不超过 10 个，国外的主机商则比较大方，一般都可建立上百个账户，Bluehost.com 的广告上则是不限制邮箱账户数量。</p>
<h3>5. 编程语言方面的支持</h3>
<p>如果你要建个动态网站，那么就必须在服务端使用动态语言，如 PHP / JSP / ASP / ASP.NET。有些编程语言是可以跨平台的，有些则不能。Linux 和 Windows 都支持 PHP，而 ASP / ASP.NET 则只能在 Windows 上运行。选择虚拟主机之前，这个需要考虑清楚。Bluehost.com 支持 PHP / Ruby，不支持 ASP / ASP.NET，因为 Bluehost 不提供 Win 系列主机。</p>
<h3>6. 数据库方面的支持</h3>
<p>现在，几乎任何一个网站都需要数据库的支持，所以选择主机的时候，一定要确定好你的网站需要什么样的数据库。一般来说现在虚拟主机都支持 MySQL 数据库，当然也有可能同时支持 PostsgreSQL，对于 Win 系列的虚拟主机，可能支持Access 多一些，而且这些一般都是免费提供的。如果你需要大型数据库，可能需要 Oracle 或 MS SQL Server，不过可能需要另外付钱，而且价格不菲。Bluehost.com 支持 MySQL 和 PostsgreSQL，且最多支持 100 个数据库。</p>
<h3>7. 主机管理：控制面板 &#038; SSH</h3>
<p>拥有了自己的主机，这么管理呢。国外的主机商一般都提供 CPanel 给用户来管理自己的主机，你可以在上面很方便的上传、下载<br />
管理文件、管理域名、管理数据库、管理邮箱账户、管理 FTP 账户，一般来说只要是主机所具备的功能，控制面板上面全都可以完成，且操作简便，也有一些主机商没有提供 CPanel，而是自己开发的面板，不过使用起来也很方便。而且对于国外规模比较大的主机商，他们的面板一般也提供中文的界面。这里提供一个 CPanel 的 <a href="http://www.bluehost.com/cgi/demo">DEMO</a>，有兴趣的朋友可以体验一下。</p>
<p>另外还有一点就是 SSH 功能，一般 Linux 系列主机都会提供，如果你对 Linux 命令熟悉的话，你也可以用 SSH 访问你的主机，管理你主机上的文件等。。对于 SSH 而言，还可以另外做很多事情（看 youtube？），需要自己去发掘。</p>
<h3>8. 自动备份</h3>
<p>虽说主机商使用的一般都是大型计算机，稳定性应该不错，他们也会花很多精力去维护，但也不能绝对保证他们的服务器不会出故障，所以网站的文件还有数据库以及邮件等内容的备份很重要。所以选择主机的时候，看他们是否提供网站自动备份的功能，如果有，很好；如果没有，你就需要定期自己去备份了。</p>
<h3>9. 免费域名</h3>
<p>对于有些主机商而言，如果你购买他们的主机，他们会免费赠送一个域名给你，只要你一直使用他们的主机，他们就会自动给这个域名续费，而且这个域名的所有权是属于你的，控制权也在你手里，你甚至可以很方便的将其转出到其他域名商那里。虽说域名价格只有大概 10$/年，一点也不贵，但是白送的，不要白不要。</p>
<h3>10. 技术支持方面</h3>
<p>这一点非常重要，因为做网站这种技术性的工作，经常会遇到问题，而有些问题可能你自己无法解决，需要寻求主机商的帮助。所以购买主机前确定好他们提供什么样的技术支持，邮件支持/电话支持/IM支持？响应是否及时？还有一个问题需要注意：对于国内的主机商而言，由于大家都是中国人，所以不论是电话还是邮件，沟通起来会很方便，但是如果你选择的是国外的主机商，那么你最好要会点英文。Bluehost.com 支持 7*24小时 电话、邮件、LiveChat 方式的技术支持，我一般使用 LiveChat，相当之方便。</p>
<h3>总结</h3>
<p>当然，决定虚拟主机好坏的因素还很多，但上面列出的都是一些常见的因素。事实上，你也不可能找到方方面面都另你十分满意的主机，所以说，只要能满足你大部分的需求，就 OK 了。还有一点，虚拟主机的性能一般不会太强悍，所以如果你需要搭建大型网站，可能就需要寻求 VPS 或者独立主机了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/01/27/some-features-to-look-for-in-a-web-host/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>使用 jQuery 处理 XML 数据</title>
		<link>http://www.akasuna.com/2011/01/07/processing-xml-data-by-using-jquery/</link>
		<comments>http://www.akasuna.com/2011/01/07/processing-xml-data-by-using-jquery/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 06:50:14 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=448</guid>
		<description><![CDATA[XML 全称为 可扩展标记语言，其文件结构与 HTML 类似，但是区别也很明显，HTML 只能使用已经定义的标签，如 title, body, span 等，标签种类是有限的，但是 XML 除了可以使用 HTML 的所有标签，还可以自己随意定制标签，如 person, name, sex, age 等，而且 XML 中的标签属性名称，也可以随意定制。另外二者用途方面也有明显区别，HTML 主要用来展示数据，XML 则侧重于数据的存储和传输。例如下面这个简单的 XML 文档用以存储员工信息： &#60;员工&#62; &#60;姓名&#62;麻花疼&#60;/姓名&#62; &#60;性别&#62;男&#60;/性别&#62; &#60;年龄&#62;40&#60;/年龄&#62; &#60;职位&#62;疼逊CEO&#60;/职位&#62; &#60;/员工&#62; 下面本文简单介绍如何使用 jQuery 载入一个 XML 文件并从中获取自己想要的数据。 准备 XML 文档及测试数据 假设我们现在要构建一个包含人员信息的 XML 文档，该 XML 文档要能反映其姓名、所在公司、公司简介、公司产品简介几个信息，那么我们可以把 XML 设计成如下样式： &#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?&#62; &#60;Persons&#62; &#60;Person FullName=&#34;Bill Gates&#34;&#62; &#60;Corporation&#62;Microsoft&#60;/Corporation&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>XML</strong> 全称为 <strong>可扩展标记语言</strong>，其文件结构与 HTML 类似，但是区别也很明显，HTML 只能使用已经定义的标签，如 title, body, span 等，标签种类是有限的，但是 XML 除了可以使用 HTML 的所有标签，还可以自己随意定制标签，如 person, name, sex, age 等，而且 XML 中的标签属性名称，也可以随意定制。另外二者用途方面也有明显区别，HTML 主要用来展示数据，XML 则侧重于数据的存储和传输。例如下面这个简单的 XML 文档用以存储员工信息：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;员工&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;姓名&gt;</span>麻花疼<span style="color:#bb7977; font-weight:bold">&lt;/姓名&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;性别&gt;</span>男<span style="color:#bb7977; font-weight:bold">&lt;/性别&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;年龄&gt;</span><span style="color:#800080; font-weight:bold">40</span><span style="color:#bb7977; font-weight:bold">&lt;/年龄&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;职位&gt;</span>疼逊CEO<span style="color:#bb7977; font-weight:bold">&lt;/职位&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/员工&gt;</span>
</pre>
<p>下面本文简单介绍如何使用 jQuery 载入一个 XML 文件并从中获取自己想要的数据。<br />
<span id="more-448"></span></p>
<h3>准备 XML 文档及测试数据</h3>
<p>假设我们现在要构建一个包含人员信息的 XML 文档，该 XML 文档要能反映其姓名、所在公司、公司简介、公司产品简介几个信息，那么我们可以把 XML 设计成如下样式：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;?xml</span> <span style="color:#8080c0; font-weight:bold">version</span>=<span style="color:#a68500">&quot;1.0&quot;</span> <span style="color:#8080c0; font-weight:bold">encoding</span>=<span style="color:#a68500">&quot;utf-8&quot;</span> <span style="color:#bb7977; font-weight:bold">?&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;Persons&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;Person</span> <span style="color:#8080c0; font-weight:bold">FullName</span>=<span style="color:#a68500">&quot;Bill Gates&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Corporation&gt;</span>Microsoft<span style="color:#bb7977; font-weight:bold">&lt;/Corporation&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Description&gt;</span>The largest software company<span style="color:#bb7977; font-weight:bold">&lt;/Description&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Products&gt;</span>Windows series OS, SQL Server Database, XBox <span style="color:#800080; font-weight:bold">360</span>...<span style="color:#bb7977; font-weight:bold">&lt;/Products&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/Person&gt;</span>

	<span style="color:#bb7977; font-weight:bold">&lt;Person</span> <span style="color:#8080c0; font-weight:bold">FullName</span>=<span style="color:#a68500">&quot;Jobs&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Corporation&gt;</span>Apple<span style="color:#bb7977; font-weight:bold">&lt;/Corporation&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Description&gt;</span>The famous software company<span style="color:#bb7977; font-weight:bold">&lt;/Description&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Products&gt;</span>Macintosh, iPhone, iPod, iPad...<span style="color:#bb7977; font-weight:bold">&lt;/Products&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/Person&gt;</span>

	<span style="color:#bb7977; font-weight:bold">&lt;Person</span> <span style="color:#8080c0; font-weight:bold">FullName</span>=<span style="color:#a68500">&quot;Larry Page&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Corporation&gt;</span>Google<span style="color:#bb7977; font-weight:bold">&lt;/Corporation&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Description&gt;</span>the largest search engine<span style="color:#bb7977; font-weight:bold">&lt;/Description&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;Products&gt;</span>Google search, Google Adsense, Gmail...<span style="color:#bb7977; font-weight:bold">&lt;/Products&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;/Person&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/Persons&gt;</span>
</pre>
<p>简单分析一下这个 XML 文件，其中第一行 <span style="color:#bb7977; font-weight:bold">&lt;?xml</span> <span style="color:#8080c0; font-weight:bold">version</span>=<span style="color:#a68500">&quot;1.0&quot;</span> <span style="color:#8080c0; font-weight:bold">encoding</span>=<span style="color:#a68500">&quot;utf-8&quot;</span> <span style="color:#bb7977; font-weight:bold">?&gt;</span> 是声明此文档为 XML 文档，且文本编码为 utf-8。第二行及最后一行 Persons 为文档的根元素，然后每个 Person 元素即表示每个人，姓名存储在 Person 元素的 FullName 属性中，Corporation 元素用来存储所在公司名称，Description 元素用来存储公司简介，Products 元素用来存储公司产品简介。至此，该文档里面包含了比尔·盖茨、乔布斯、拉里·佩奇三位 IT 界大佬的信息。</p>
<h3>用 jQuery 解析此 XML 文档</h3>
<p>首先要用 $.get() 方法载入 XML 文件，然后用 find() 方法找到所有 Person 元素，再用 each() 方法进行遍历，代码如下：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>script type<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#ff0080; font-weight:bold">&gt;</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">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:#ff8000">/* 先用 $.get 方法载入 XML 文件 */</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">&quot;EmployeesInformation.xml&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>xmlData<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#ff8000">/* 我们要讲得到的数据放入一个表格里面，这里定义一个表格字符窜 */</span>
		<span style="color:#bb7977; font-weight:bold">var</span> htmlData <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;&lt;table border='1'&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>

		<span style="color:#ff8000">/* 找到 Person 元素，然后用 each 方法进行遍历 */</span>
		$<span style="color:#ff0080; font-weight:bold">(</span>xmlData<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;Person&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:#bb7977; font-weight:bold">var</span> Person <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:#ff8000">/* 将当前元素复制给 Person */</span>
			<span style="color:#bb7977; font-weight:bold">var</span> FullName <span style="color:#ff0080; font-weight:bold">=</span> Person<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;FullName&quot;</span><span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#ff8000">/* 获取 Person 的 FullName 属性 */</span>
			<span style="color:#bb7977; font-weight:bold">var</span> Corporation <span style="color:#ff0080; font-weight:bold">=</span> Person<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;Corporation&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">text</span><span style="color:#ff0080; font-weight:bold">();</span> <span style="color:#ff8000">/* 获取 Person 中子元素 Corporation 的值 */</span>
			<span style="color:#bb7977; font-weight:bold">var</span> Description <span style="color:#ff0080; font-weight:bold">=</span> Person<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;Description&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">text</span><span style="color:#ff0080; font-weight:bold">();</span> <span style="color:#ff8000">/* 获取 Person 中子元素 Description 的值 */</span>
			<span style="color:#bb7977; font-weight:bold">var</span> Products <span style="color:#ff0080; font-weight:bold">=</span> Person<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;Products&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">text</span><span style="color:#ff0080; font-weight:bold">();</span> <span style="color:#ff8000">/* 获取 Person 中子元素 Products 的值 */</span>

			<span style="color:#ff8000">/* 将得到的数据，放到表格的一行中 */</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;&lt;tr&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;	&lt;td&gt;&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> FullName <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">&quot;&lt;/td&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;	&lt;td&gt;&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> Corporation <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">&quot;&lt;/td&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;	&lt;td&gt;&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> Description <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">&quot;&lt;/td&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;	&lt;td&gt;&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> Products <span style="color:#ff0080; font-weight:bold">+</span> <span style="color:#a68500">&quot;&lt;/td&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
			htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;&lt;/tr&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#ff0080; font-weight:bold">});</span>

		<span style="color:#f27900">//完成表格字符窜</span>
		htmlData <span style="color:#ff0080; font-weight:bold">+=</span> <span style="color:#a68500">&quot;&lt;/table&gt;&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#f27900">//将表格放到 body 中</span>
		$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;body&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">append</span><span style="color:#ff0080; font-weight:bold">(</span>htmlData<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">&lt;/</span>script<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>简单解释一下这段代码，由于此 XML 文档相对简单，所以这段代码也比较简短，代码中 $.get() 方法的第一个参数为 XML 文件地址，第二个参数是一个回调函数，回调函数中参数 xmlData 即为 XML 文件中的数据。在此示例中，我们打算 XML 中的数据以表格的形式显示在 HTML 中，所以先构建一个表格字符串 htmlData 先。</p>
<p>紧接着，用 find() 方法，找到所有名为 Person 的元素，因为每个 Person 元素即表示一个人，然后再用 each() 方法进行遍历，把遍历到的元素赋个一个变量 Person。用 Person.attr() 方法去除元素的 FullName 属性，也就是人员的姓名，再用 find() 方法找到其子元素 Corporation，Description 和 Products 并返回它们的文本内容，并用 tr 和 td 标签将它们包装在表格的一个行里面。最后完成表格字符串，并将表格添加到 body 标签中，最终效果图如下：</p>
<p><img alt="" src="http://www.akasuna.com/wp-content/uploads/2011/01/xmljquery.jpg" title="jQuery and xml" class="alignnone" width="517" height="478" /></p>
<p><a href="http://www.akasuna.com/wp-content/uploads/2011/01/EmployeesInformation.xml">XML 预览地址</a>，<a href="http://www.akasuna.com/wp-content/uploads/2011/01/EmployeesInformation.html">HTML 预览地址</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2011/01/07/processing-xml-data-by-using-jquery/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>利用 jQuery 简化 Ajax 开发</title>
		<link>http://www.akasuna.com/2010/12/23/simplify-ajax-development-with-jquery/</link>
		<comments>http://www.akasuna.com/2010/12/23/simplify-ajax-development-with-jquery/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 07:00:39 +0000</pubDate>
		<dc:creator>akasuna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.akasuna.com/?p=440</guid>
		<description><![CDATA[Ajax 并不是一种语言，它只是几种旧技术如 JavaScript 和 XML 以及 DOM 的综合应用，全称为 Asynchronous JavaScript and XML，即 异步 JavaScript 和 XML ，它能够在页面不刷新的前提下和服务器进行异步数据交互，如果运用得当，它能够很好的提高用户体验，还能节省带宽、降低服务器压力。作为一个优秀的 JavaScript 框架，jQuery 同样也提供了很多方法来处理 Ajax 的相关操作。 利用 Ajax 获取异步数据 1. 传统 Ajax 方法 传统 Ajax 一般步骤为： 创建 XMLHttpRequest（需兼容各种浏览器）。 向服务器发送 XMLHttpRequest 请求。 监测 XMLHttpRequest 的 onreadystatechange 事件。 判断服务端是否响应完成及响应结果是否正常。 获取 Ajax 从服务端返回的结果。 例如用 Ajax 获取服务器上的当前时间，示例代码如下： &#60;html&#62; &#60;head&#62; &#60;title&#62;Traditional Ajax&#60;/title&#62; &#60;meta http-equiv=&#34;Content-Type&#34; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Ajax </strong>并不是一种语言，它只是几种旧技术如 JavaScript 和 XML 以及 DOM 的综合应用，全称为 <strong>Asynchronous JavaScript and XML</strong>，即<strong> 异步 JavaScript 和 XML </strong>，它能够在页面不刷新的前提下和服务器进行异步数据交互，如果运用得当，它能够很好的提高用户体验，还能节省带宽、降低服务器压力。作为一个优秀的 JavaScript 框架，jQuery 同样也提供了很多方法来处理 Ajax 的相关操作。<br />
<span id="more-440"></span></p>
<h3>利用 Ajax 获取异步数据</h3>
<p><strong>1. 传统 Ajax 方法</strong><br />
传统 Ajax 一般步骤为：</p>
<ol>
<li>创建 XMLHttpRequest（需兼容各种浏览器）。</li>
<li>向服务器发送 XMLHttpRequest 请求。</li>
<li>监测 XMLHttpRequest 的 onreadystatechange 事件。</li>
<li>判断服务端是否响应完成及响应结果是否正常。</li>
<li>获取 Ajax 从服务端返回的结果。</li>
</ol>
<p>例如用 Ajax 获取服务器上的当前时间，示例代码如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;html&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;title&gt;</span>Traditional Ajax<span style="color:#bb7977; font-weight:bold">&lt;/title&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;meta</span> <span style="color:#8080c0; font-weight:bold">http-equiv</span>=<span style="color:#a68500">&quot;Content-Type&quot;</span> <span style="color:#8080c0; font-weight:bold">content</span>=<span style="color:#a68500">&quot;text/html; charset=UTF-8&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;script</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
<span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">getDateTime</span><span style="color:#ff0080; font-weight:bold">() {</span>
	<span style="color:#bb7977; font-weight:bold">var</span> xmlHttp<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>window<span style="color:#ff0080; font-weight:bold">.</span>XMLHttpRequest<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#f27900">// For IE7+, Firefox, Chrome, Opera, Safari</span>
		xmlHttp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">XMLHttpRequest</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>window<span style="color:#ff0080; font-weight:bold">.</span>ActiveXObject<span style="color:#ff0080; font-weight:bold">) {</span>
		<span style="color:#f27900">// For IE6, IE5</span>
		xmlHttp <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#bb7977; font-weight:bold">new</span> <span style="color:#004466">ActiveXObject</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;Microsoft.XMLHTTP&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
	xmlHttp<span style="color:#ff0080; font-weight:bold">.</span>onreadystatechange <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>xmlHttp<span style="color:#ff0080; font-weight:bold">.</span>readyState <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">4</span> <span style="color:#ff0080; font-weight:bold">&amp;&amp;</span> xmlHttp<span style="color:#ff0080; font-weight:bold">.</span>status <span style="color:#ff0080; font-weight:bold">==</span> <span style="color:#800080; font-weight:bold">200</span><span style="color:#ff0080; font-weight:bold">) {</span>
			document<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">getElementById</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;timediv&quot;</span><span style="color:#ff0080; font-weight:bold">).</span>innerHTML <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;现在时间&quot;</span> <span style="color:#ff0080; font-weight:bold">+</span> xmlHttp<span style="color:#ff0080; font-weight:bold">.</span>responseText<span style="color:#ff0080; font-weight:bold">;</span>
		<span style="color:#ff0080; font-weight:bold">}</span>
	<span style="color:#ff0080; font-weight:bold">}</span>
	xmlHttp<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:#a68500">&quot;GET&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#a68500">&quot;ajax.php&quot;</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>
	xmlHttp<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">send</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:#ff0080; font-weight:bold">}</span>
<span style="color:#bb7977; font-weight:bold">&lt;/script&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;body&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;div</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;timediv&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>现在时间<span style="color:#bb7977; font-weight:bold">&lt;/div&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;br /&gt;&lt;input</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;button&quot;</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;测试传统的 Ajax&quot;</span> <span style="color:#8080c0; font-weight:bold">onClick</span>=<span style="color:#a68500">&quot;getDateTime()&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/body&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/html&gt;</span>
</pre>
<p>服务端代码为：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>?php
	<span style="color:#f27900">//服务器端为格林尼治标准时间，这里需设置为中国所在时区</span>
	<span style="color:#004466">date_default_timezone_set</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;PRC&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
	<span style="color:#bb7977; font-weight:bold">echo</span> <span style="color:#004466">date</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;Y-m-d H:i:s&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>
?<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>可以看到，仅仅实现如此简单的功能，代码却如此冗长，特别是创建 XMLHttpRequest 的时候，还要兼容多种浏览器，另外还要监测 XMLHttpRequest 的 onreadystatechange 时间，以及返回的 readyState 和 status 状态，稍显麻烦。</p>
<p><strong>2. jQuery 的 Ajax 方法</strong><br />
如果将上面的代码改写为 jQuery 的 Ajax 方法，代码如下：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;html&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;title&gt;</span>Traditional Ajax<span style="color:#bb7977; font-weight:bold">&lt;/title&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;meta</span> <span style="color:#8080c0; font-weight:bold">http-equiv</span>=<span style="color:#a68500">&quot;Content-Type&quot;</span> <span style="color:#8080c0; font-weight:bold">content</span>=<span style="color:#a68500">&quot;text/html; charset=UTF-8&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;script</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/javascript&quot;</span> <span style="color:#8080c0; font-weight:bold">src</span>=<span style="color:#a68500">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js?ver=1.4.4&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;&lt;/script&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;script</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
<span style="color:#bb7977; font-weight:bold">function</span> <span style="color:#004466">getDateTime</span><span style="color:#ff0080; font-weight:bold">() {</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#timediv&quot;</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">&quot;ajax.php&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">&lt;/script&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;body&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;div</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;timediv&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;&lt;/div&gt;</span>
	<span style="color:#bb7977; font-weight:bold">&lt;br /&gt;&lt;input</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;button&quot;</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;测试 jQuery 的 Ajax&quot;</span> <span style="color:#8080c0; font-weight:bold">onClick</span>=<span style="color:#a68500">&quot;getDateTime()&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/body&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/html&gt;</span>
</pre>
<p>可以看到，jQuery 的 Ajax 方法，主要代码只有一行 <code>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#timediv&quot;</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">&quot;ajax.php&quot;</span><span style="color:#ff0080; font-weight:bold">);</span></code>，相当之简单，而且绝对兼容各种主流浏览器。从这个例子可以看出，jQuery 大大的简化了 Ajax 的编码方式。</p>
<h3>GET 还是 POST ？</h3>
<p>上面的例子中的 load 函数固然方便，但是我们还是经常要指定 jQuery 到底是用 GET 方法还是 POST 方法，使用方法如下：</p>
<ol>
<li>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">(</span>url<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#0080c0">[data]</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#0080c0"> [callback]</span><span style="color:#ff0080; font-weight:bold">)</span></li>
<li>$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">post</span><span style="color:#ff0080; font-weight:bold">(</span>url<span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#0080c0">[data]</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#0080c0"> [callback]</span><span style="color:#ff0080; font-weight:bold">,</span><span style="color:#0080c0"> [type]</span><span style="color:#ff0080; font-weight:bold">)</span></li>
</ol>
<p>GET 和POST 的使用方法基本相同，参数 data  为向服务器发送的数据，callback 为回调函数，type 用来指定服务器返回的数据类型，如纯文本、XML、JSON 等。</p>
<p>下面来看具体例子：</p>
<pre><span style="color:#bb7977; font-weight:bold">&lt;html&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;title&gt;</span>jQuery Ajax (get and post)<span style="color:#bb7977; font-weight:bold">&lt;/title&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;meta</span> <span style="color:#8080c0; font-weight:bold">http-equiv</span>=<span style="color:#a68500">&quot;Content-Type&quot;</span> <span style="color:#8080c0; font-weight:bold">content</span>=<span style="color:#a68500">&quot;text/html; charset=UTF-8&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;script</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/javascript&quot;</span> <span style="color:#8080c0; font-weight:bold">src</span>=<span style="color:#a68500">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js?ver=1.4.4&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;&lt;/script&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;script</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
$<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:#f27900">// 为 GET 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#getbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">get</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;ajaxpage.php&quot;</span><span style="color:#ff0080; font-weight:bold">, {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</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:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>data<span style="color:#ff0080; font-weight:bold">) {</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// 将服务端返回的数据填充到 P 标签中</span>
		<span style="color:#ff0080; font-weight:bold">});</span>
	<span style="color:#ff0080; font-weight:bold">});</span>

	<span style="color:#f27900">// 为 POST 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#postbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">post</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;ajaxpage.php&quot;</span><span style="color:#ff0080; font-weight:bold">, {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</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:#bb7977; font-weight:bold">function</span><span style="color:#ff0080; font-weight:bold">(</span>data<span style="color:#ff0080; font-weight:bold">) {</span>
			$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<span style="color:#ff0080; font-weight:bold">);</span> <span style="color:#f27900">// 将服务端返回的数据填充到 P 标签中</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">&lt;/script&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/head&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;body&gt;</span>
		你的大名：<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text&quot;</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;username&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;&lt;br /&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;button&quot;</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;getbtn&quot;</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;GET 方法&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;&lt;br /&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;input</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;button&quot;</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;postbtn&quot;</span> <span style="color:#8080c0; font-weight:bold">value</span>=<span style="color:#a68500">&quot;POST 方法&quot;</span> <span style="color:#bb7977; font-weight:bold">/&gt;</span>
		<span style="color:#bb7977; font-weight:bold">&lt;p</span> <span style="color:#8080c0; font-weight:bold">id</span>=<span style="color:#a68500">&quot;ajaxdata&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;&lt;/p&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/body&gt;</span>
<span style="color:#bb7977; font-weight:bold">&lt;/html&gt;</span>
</pre>
<p>服务端代码为：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>?php
	<span style="color:#f27900">// 服务器端为格林尼治标准时间，这里需设置为中国所在时区</span>
	<span style="color:#004466">date_default_timezone_set</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;PRC&quot;</span><span style="color:#ff0080; font-weight:bold">);</span>

	<span style="color:#0080c0">$username</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:#0080c0">$ajaxMethod</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:#f27900">// 判断是 GET 还是 POST</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">&quot;username&quot;</span><span style="color:#ff0080; font-weight:bold">])) {</span>
		<span style="color:#0080c0">$username</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">&quot;username&quot;</span><span style="color:#ff0080; font-weight:bold">];</span>
		<span style="color:#0080c0">$ajaxMethod</span> <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;GET&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</span> <span style="color:#ff0080; font-weight:bold">{</span>
		<span style="color:#0080c0">$username</span> <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#0080c0">$_POST</span><span style="color:#ff0080; font-weight:bold">[</span><span style="color:#a68500">&quot;username&quot;</span><span style="color:#ff0080; font-weight:bold">];</span>
		<span style="color:#0080c0">$ajaxMethod</span> <span style="color:#ff0080; font-weight:bold">=</span> <span style="color:#a68500">&quot;POST&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">echo</span> <span style="color:#a68500">&quot;你好，&quot;</span> <span style="color:#ff0080; font-weight:bold">.</span> <span style="color:#0080c0">$username</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:#004466">date</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;Y-m-d H:i:s&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:#0080c0">$ajaxMethod</span> <span style="color:#ff0080; font-weight:bold">.</span> <span style="color:#a68500">&quot; Ajax&quot;</span><span style="color:#ff0080; font-weight:bold">;</span>
?<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>可以看到，jQuery Ajax 的 GET 方法 和 POST 方法，使用起来依然相当之方便。</p>
<h3>控制 Ajax</h3>
<p>GET 和 POST 方法以及前面提到的 load 方法，使用起来虽然十分实用，但是某些时候却过于简单，很多时候我们都需要更多的控制  Ajax 的细节，jQuery 同样提供了一些方法来控制 Ajax 的细节，主要通过 $<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">(</span>options<span style="color:#ff0080; font-weight:bold">)</span> 方法来实现，请看下面的代码片段：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>script type<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#ff0080; font-weight:bold">&gt;</span>
$<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:#f27900">// 为 GET 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#getbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
			type<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;GET&quot;</span><span style="color:#ff0080; font-weight:bold">,</span>
			url<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;ajaxpage.php&quot;</span><span style="color:#ff0080; font-weight:bold">,</span>
			data<span style="color:#ff0080; font-weight:bold">: {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</span><span style="color:#ff0080; font-weight:bold">()},</span>
			timeout<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">3000</span><span style="color:#ff0080; font-weight:bold">,</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>
				<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;error!&quot;</span><span style="color:#ff0080; font-weight:bold">);</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>data<span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#f27900">// 回调函数，将返回的数据添加到 P 标签中</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<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">// 为 POST 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#postbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
			type<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;POST&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#f27900">// Ajax 提交方式</span>
			url<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;ajaxpage.php&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#f27900">// 提交页</span>
			data<span style="color:#ff0080; font-weight:bold">: {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</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:#f27900">// 要提交的数据</span>
			timeout<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">3000</span><span style="color:#ff0080; font-weight:bold">,</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> <span style="color:#f27900">// Ajax 发生错误时</span>
				<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;error!&quot;</span><span style="color:#ff0080; font-weight:bold">);</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>data<span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#f27900">// 回调函数，将返回的数据添加到 P 标签中</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<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">&lt;/</span>script<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>上面例子中，$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">(</span>options<span style="color:#ff0080; font-weight:bold">)</span> 中的 options 条目是可选的，并不是每个参数都要设置。对于有些参数而言，例如 timeout 和 error 在某个项目中是固定不变的，那么就没必要在每个 Ajax 代码中都写，可以用 jQuery 提供的全局 Ajax 设置的方法来设置一下，设置方法如下：</p>
<pre><span style="color:#ff0080; font-weight:bold">&lt;</span>script type<span style="color:#ff0080; font-weight:bold">=</span><span style="color:#a68500">&quot;text/javascript&quot;</span><span style="color:#ff0080; font-weight:bold">&gt;</span>
$<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:#f27900">// 全局 Ajax 设定，这里的设置将对本页面所有 Ajax 方法适用</span>
	$<span style="color:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajaxSetup</span><span style="color:#ff0080; font-weight:bold">({</span>
		url<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;ajaxpage.php&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#f27900">// Ajax 提交页</span>
		timeout<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#800080; font-weight:bold">3000</span><span style="color:#ff0080; font-weight:bold">,</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> <span style="color:#f27900">// Ajax 发生错误时</span>
			<span style="color:#004466">alert</span><span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;error!&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">// 为 GET 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#getbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
			type<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;GET&quot;</span><span style="color:#ff0080; font-weight:bold">,</span>
			data<span style="color:#ff0080; font-weight:bold">: {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">val</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>data<span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#f27900">// 回调函数，将返回的数据添加到 P 标签中</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<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">// 为 POST 按钮添加事件</span>
	$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#postbtn&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:#ff0080; font-weight:bold">.</span><span style="color:#004466">ajax</span><span style="color:#ff0080; font-weight:bold">({</span>
			type<span style="color:#ff0080; font-weight:bold">:</span> <span style="color:#a68500">&quot;POST&quot;</span><span style="color:#ff0080; font-weight:bold">,</span> <span style="color:#f27900">// Ajax 提交方式</span>
			data<span style="color:#ff0080; font-weight:bold">: {</span>username<span style="color:#ff0080; font-weight:bold">:</span>$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#username&quot;</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:#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>data<span style="color:#ff0080; font-weight:bold">) {</span>
				<span style="color:#f27900">// 回调函数，将返回的数据添加到 P 标签中</span>
				$<span style="color:#ff0080; font-weight:bold">(</span><span style="color:#a68500">&quot;#ajaxdata&quot;</span><span style="color:#ff0080; font-weight:bold">).</span><span style="color:#004466">html</span><span style="color:#ff0080; font-weight:bold">(</span>data<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">&lt;/</span>script<span style="color:#ff0080; font-weight:bold">&gt;</span>
</pre>
<p>上面例子中，在全局设定里面设置好了的参数，在整个页面中都会生效，这个功能可以大大的减少重复的代码。</p>
<p>以上这些就是 jQuery Ajax 的几种简单使用方式，而且上面的几个例子中服务器返回的数据都是纯文本，如果是在复杂的 Ajax 应用中，可能就需要用到 XML 或者 JSON 了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.akasuna.com/2010/12/23/simplify-ajax-development-with-jquery/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

