<?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"
	>

<channel>
	<title>万波的技术博客</title>
	<atom:link href="http://cnwander.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://cnwander.com/blog</link>
	<description>关注WEB前端技术</description>
	<pubDate>Wed, 06 Apr 2011 07:54:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Javascript命名禁区</title>
		<link>http://cnwander.com/blog/?p=23</link>
		<comments>http://cnwander.com/blog/?p=23#comments</comments>
		<pubDate>Fri, 01 Apr 2011 05:50:47 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=23</guid>
		<description><![CDATA[大家都知道的，当我们使用Javascript保留字作为标识符时，会引起程序报错。
大家不一定知道的，当我们使用top, fullScreen, screen等作为标识符时，也会引起程序报错或者执行异常。
报错还好，怕的就是没有报错，而当项目上线后，在某些特定环境下，它才执行异常，这时候来查错才真的要人老命。所以，我们不能留下任何黑洞，我们必须清楚，浏览器端的Javascript到底有哪些命名禁区。
我自己的亲身经验：
1、input元素上扩展start方法。
在做一个动画框架时，为了方便链式调用，我给元素扩展了一个start的方法，并且测试通过，以为万无一失，这个方法名没被占用，直到碰到这样一段代码：
var btn = lib.getElem('input'); // 获取到一个input元素
btn = lib.extend(btn); //&#160; 扩展方法
btn.start();
在IE下报错了，原因是：
input元素已经有了start这样一个属性（ input.start 设置或获取视频剪辑文件应该开始播放的时间。 ）
2、定义一个fullScreen的全局变量。
var fullScreen = function(){
....//突出显示页面中某一块内容
}
alert(fullScreen); // ff中为false

两次的教训，我觉得有必要整理一份Javascript命名禁区表了，不可能完全记住，但至少有一个大体印象。
一、标识符允许的字符集。
在ECMAScript V3中，标识符除首字母外，允许使用除 (./=?:&#38;#\{}()&#60;&#62;[]&#124;~!&#8217;&#8221;\*^) 等特殊字符外所有的unicode字符集。
二、变量名、函数名、循环标记命名禁区。
1、保留字
break	delete function return typeof case do if switch var catch else in this void continue	false instanceof throw while debugger finally new true with default for null try
2、未来保留字
abstract double goto native static boolean enum implements [...]]]></description>
			<content:encoded><![CDATA[<p>大家都知道的，当我们使用Javascript保留字作为标识符时，会引起程序报错。<br />
大家不一定知道的，当我们使用top, fullScreen, screen等作为标识符时，也会引起程序报错或者执行异常。</p>
<p>报错还好，怕的就是没有报错，而当项目上线后，在某些特定环境下，它才执行异常，这时候来查错才真的要人老命。所以，我们不能留下任何黑洞，我们必须清楚，浏览器端的Javascript到底有哪些命名禁区。</p>
<div class="w">我自己的亲身经验：<br />
<strong style="font-weight: bold;">1、input元素上扩展start方法。</strong><br />
在做一个动画框架时，为了方便链式调用，我给元素扩展了一个start的方法，并且测试通过，以为万无一失，这个方法名没被占用，直到碰到这样一段代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">btn</span><span style="color: blue;"> = </span><span style="color: Black;">lib</span><span style="color: blue;">.</span><span style="color: Black;">getElem</span><span style="color: black;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">input</span><span style="color: #8b0000;">'</span><span style="color: black;">)</span><span style="color: blue;">; </span><span style="color: #ffa500;">// 获取到一个input元素</span></li>
<li><span style="color: Black;">btn</span><span style="color: blue;"> = </span><span style="color: Black;">lib</span><span style="color: blue;">.</span><span style="color: Black;">extend</span><span style="color: black;">(</span><span style="color: Black;">btn</span><span style="color: black;">)</span><span style="color: blue;">; </span><span style="color: #ffa500;">//&nbsp; 扩展方法</span></li>
<li><span style="color: Black;">btn</span><span style="color: blue;">.</span><span style="color: Black;">start</span><span style="color: black;">()</span><span style="color: blue;">;</span></li></ol></div>
<p>在IE下报错了，原因是：<br />
input元素已经有了start这样一个属性（ input.start 设置或获取视频剪辑文件应该开始播放的时间。 ）<br />
<strong style="font-weight: bold;">2、定义一个fullScreen的全局变量。</strong></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">fullScreen</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(){</span></li>
<li><span style="color: blue;">....</span><span style="color: #ffa500;">//突出显示页面中某一块内容</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: Black;">alert</span><span style="color: black;">(</span><span style="color: Black;">fullScreen</span><span style="color: black;">)</span><span style="color: blue;">; </span><span style="color: #ffa500;">// ff中为false</span></li></ol></div>
</div>
<p>两次的教训，我觉得有必要整理一份Javascript命名禁区表了，不可能完全记住，但至少有一个大体印象。</p>
<p><strong style="font-weight: bold;">一、标识符允许的字符集。</strong><br />
在ECMAScript V3中，标识符除首字母外，允许使用除 (<strong style="font-weight: bold;">./=?:&amp;#\{}()&lt;&gt;[]|~!&#8217;&#8221;\*^</strong>) 等特殊字符外所有的unicode字符集。</p>
<p><strong style="font-weight: bold;">二、变量名、函数名、循环标记命名禁区。</strong><br />
<strong style="font-weight: bold;">1、保留字</strong><br />
break	delete function return typeof case do if switch var catch else in this void continue	false instanceof throw while <span style="color: #ff6600;">debugger</span> finally new true with default for null try<br />
<strong style="font-weight: bold;">2、未来保留字</strong><br />
abstract double goto native static boolean <span style="color: #ff6600;">enum</span> implements package super <span style="color: #ff6600;">byte</span> export import private synchronized char extends int	protected throws class	final <span style="color: #ff6600;">interface</span> public transient const <span style="color: #ff6600;">float</span> long short volatile<br />
<strong style="font-weight: bold;">3、扩展列表</strong><br />
as <span style="color: #ff6600;">is</span> namespace <span style="color: #ff6600;">use</span> arguments encodeURI Infinity Object String Array Error isFinite parseFloat SyntaxError Boolean escape isNaN parseInt TypeError Date eval Math RangeError undefined decodeURI EvalError NaN ReferenceError unescape decodeURIComponent Function Number RegExp URIError</p>
<div class="w"><strong style="font-weight: bold;">4、IE全局变量</strong><br />
status onresize onmessage <span style="color: #ff6600;">parent</span> onhashchange defaultStatus <span style="color: #ff6600;">name</span> history maxConnectionsPerServer <span style="color: #ff6600;">opener</span> location screenLeft document onbeforeprint screenTop clientInformation onerror onfocus event onload onblur window <span style="color: #ff6600;">closed</span> <span style="color: #ff6600;">screen</span> onscroll length frameElement self onunload onafterprint navigator frames sessionStorage <span style="color: #ff6600;">top</span> clipboardData external onhelp offscreenBuffering localStorage onbeforeunload<br />
<strong style="font-weight: bold;">5、FF全局变量</strong><br />
getInterface addEventListener loadFirebugConsole console window cehomepage document netscape XPCSafeJSObjectWrapper XPCNativeWrapper Components sessionStorage globalStorage getComputedStyle dispatchEvent removeEventListener <span style="color: #ff6600;">name</span> <span style="color: #ff6600;">parent top</span> dump getSelection scrollByLines <span style="color: #ff6600;">scrollbars</span> scrollX scrollY <span style="color: #ff6600;">scrollTo</span> scrollBy scrollByPages sizeToContent setTimeout setInterval clearTimeout clearInterval setResizable captureEvents releaseEvents routeEvent enableExternalCapture disableExternalCapture <span style="color: #ff6600;">open</span> openDialog frames applicationCache self navigator screen history <span style="color: #ff6600;">content</span> menubar <span style="color: #ff6600;">toolbar</span> locationbar personalbar statusbar directories closed crypto pkcs11 controllers opener status defaultStatus location innerWidth innerHeight outerWidth outerHeight screenX screenY mozInnerScreenX mozInnerScreenY pageXOffset pageYOffset scrollMaxX scrollMaxY <span style="color: #ff6600;">length</span> <span style="color: #ff6600;">fullScreen</span> alert confirm prompt focus blur back forward home stop print moveTo moveBy resizeTo resizeBy scroll close updateCommands <span style="color: #ff6600;">find</span> atob btoa frameElement showModalDialog postMessage localStorage<br />
<span style="color: green;">这是最容易被忽视的部分，有的变量允许你重新设置，但最好不要随意去占用它，除非你非常清楚你在干什么，及可能造成的后果</span></div>
<p><strong style="font-weight: bold;">三、属性方法命名禁区。</strong><br />
<strong style="font-weight: bold;">1、保留字</strong><br />
break	delete function return typeof case do if switch var catch else in this void continue	false instanceof throw while <span style="color: #ff6600;">debugger</span> finally new true with default for null try<br />
<strong style="font-weight: bold;">2、未来保留字</strong><br />
super export import extends const <span style="color: #ff6600;">class</span></p>
<div class="w">* 这里主要针对字面量对象{}，eg:</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">testObj</span><span style="color: blue;"> = </span><span style="color: black;">{</span><span style="color: darkBlue; font-weight:bold">class</span><span style="color: blue;">: </span><span style="color: red;">3</span><span style="color: black;">}</span><span style="color: blue;">; </span><span style="color: #ffa500;">//ie将报错</span></li>
<li><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">testObj</span><span style="color: blue;"> = </span><span style="color: black;">{}</span><span style="color: blue;">; </span><span style="color: Black;">testObj</span><span style="color: black;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">class</span><span style="color: #8b0000;">'</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: red;">3</span><span style="color: blue;"> </span><span style="color: #ffa500;">//则不会</span></li></ol></div>
</div>
<p><span id="more-23"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>找出字符串中出现最多的字符，出现了多少次？</title>
		<link>http://cnwander.com/blog/?p=22</link>
		<comments>http://cnwander.com/blog/?p=22#comments</comments>
		<pubDate>Wed, 15 Dec 2010 18:28:48 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[字符串]]></category>

		<category><![CDATA[性能]]></category>

		<category><![CDATA[面试题]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=22</guid>
		<description><![CDATA[逛经典的时候看到的，据说是百度的前端面试题。尝试了几种不同的方法，并进行了性能测评，与大家分享。
一、最精典的方法。
思路：遍历字符串，逐个取出字符，用replace将目标字符替换为空，用原字符串长度减去新字符串长度，获取目标字符出现次数，最终取出出现频繁最高的字符。


&#60;script&#62;
var str = '万wwwaann波波波波波波ndeee博rrrr客';
alert(getMost1(str));
function getMost1(str){
	var most = [], num = 0;
	while( str != '' ){
		var ori = str,
			target = str.substr(0,1), //目标字符
			reg = new RegExp(target, 'g');
		str = str.replace(reg, '');
		diff = ori.length - str.length; //计算目标字符数目
		if(diff &#62; num) {
			num = diff;
			most = [target];
		} else if (diff == num) {
			most.push(target);
		}
	}
	return num + ': ' + most;
}
&#60;/script&#62;

function changeTsize(){document.getElementById("runcode_4e2GZ6").style.height = document.getElementById("runcode_4e2GZ6").scrollHeight [...]]]></description>
			<content:encoded><![CDATA[<p>逛<a href="http://bbs.blueidea.com">经典</a>的时候看到的，据说是百度的前端面试题。尝试了几种不同的方法，并进行了性能测评，与大家分享。</p>
<p><strong>一、最精典的方法。</strong><br />
思路：遍历字符串，逐个取出字符，用replace将目标字符替换为空，用原字符串长度减去新字符串长度，获取目标字符出现次数，最终取出出现频繁最高的字符。</p>
<div class="runcode">
<p  class="runcodeWrap"><textarea name="runcode" style="overflow-y:auto" class="runcode_text" id="runcode_Y9ZCZX">
&lt;script&gt;
var str = '万wwwaann波波波波波波ndeee博rrrr客';
alert(getMost1(str));
function getMost1(str){
	var most = [], num = 0;
	while( str != '' ){
		var ori = str,
			target = str.substr(0,1), //目标字符
			reg = new RegExp(target, 'g');
		str = str.replace(reg, '');
		diff = ori.length - str.length; //计算目标字符数目
		if(diff &gt; num) {
			num = diff;
			most = [target];
		} else if (diff == num) {
			most.push(target);
		}
	}
	return num + ': ' + most;
}
&lt;/script&gt;
</textarea></p>
<script type="text/javascript">function changeTsize(){document.getElementById("runcode_Y9ZCZX").style.height = document.getElementById("runcode_Y9ZCZX").scrollHeight + "px";}window.setTimeout(changeTsize,0);</script><p style="margin-top:3px;"><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_Y9ZCZX');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_Y9ZCZX');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_Y9ZCZX','runcode_Y9ZCZX');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<p>这是最常用、最传统的办法。<br />
走套路可不带劲，开始探索新的方法，于是有了下面的改进版 － </p>
<p><strong>二、最取巧的办法。</strong><br />
思路：<br />
1、先将字符串转换成JSON数据。eg.‘波rr波’ -> {&#8217;波&#8217;: 2, &#8216;r&#8217;: 2} 。<br />
2、再以JSON数据的值为索引转换成数组。eg.{&#8217;波&#8217;: 2, &#8216;r&#8217;: 2} ->[2]:&#8217;波&#8217;,'r&#8217;。<br />
3、这样数组的最后一项即出现最多的字符。</p>
<div class="runcode">
<p  class="runcodeWrap"><textarea name="runcode" style="overflow-y:auto" class="runcode_text" id="runcode_81b_H_">
&lt;script&gt;
var str = '万wwwaann波波波波波波ndeee博rrrr客';
alert(getMost2(str));
function getMost2(str) {
	var s = str.split(''), o ={}, a=[];
	for(var i = 0; i &lt; s.length; i++) o[s[i]] ? o[s[i]]++ : o[s[i]]=1; //记录数目
	for(var key in o) a[o[key]] ? a[o[key]].push(key) : a[o[key]] = [key]; //取出
	return a.length - 1 + ': ' + a.pop();
}
&lt;/script&gt;
</textarea></p>
<script type="text/javascript">function changeTsize(){document.getElementById("runcode_81b_H_").style.height = document.getElementById("runcode_81b_H_").scrollHeight + "px";}window.setTimeout(changeTsize,0);</script><p style="margin-top:3px;"><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_81b_H_');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_81b_H_');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_81b_H_','runcode_81b_H_');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<p>探索是无止境的，方法二确实以精简的代码完成了同样的功能，但是这种取巧的方式，代码的可读性似乎不是太好。有没有第三种方式，两者兼顾呢，继续改进 - </p>
<p><strong>三、最精简的办法。</strong><br />
思路：充分利用数组的sort方法根据出现频繁排序，首先将重复的字符全部放在一起并分别用正则匹配为数组，再根据数组长度排序。<br />
PS：这里重在重新排列数据，最终取值不全（多个字符并列最多时只能取一个）。</p>
<div class="runcode">
<p  class="runcodeWrap"><textarea name="runcode" style="overflow-y:auto" class="runcode_text" id="runcode_dm8aVB">
&lt;script&gt;
var str = '万wwwaann波波波波波波ndeee博rrrr客';
alert(getMost3(str));
function getMost3(str){
	var most = str.split('').sort().join('').match(/(.)\1*/g); //排列重复字符
	most = most.sort(function(a,b){return a.length - b.length}).pop();//按出现频繁排序
	return most.length + ': ' + most[0];
}
&lt;/script&gt;
</textarea></p>
<script type="text/javascript">function changeTsize(){document.getElementById("runcode_dm8aVB").style.height = document.getElementById("runcode_dm8aVB").scrollHeight + "px";}window.setTimeout(changeTsize,0);</script><p style="margin-top:3px;"><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_dm8aVB');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_dm8aVB');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_dm8aVB','runcode_dm8aVB');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<p>从近20行代码压缩到3行代码，代码得到了进一部精简，并且保持了清晰的逻辑，大功告成!</p>
<p>真的大功造成了吗？<br />
当然不是，相信不少童鞋已经注意到了，上面优化的过程中，性能问题我只字未提，而这恰恰又是优化的主旋律。<br />
好了，我们开始性能测试 - </p>
<div style="padding:2px 10px; background:#eee">
<strong style="color:red">Update2010-12-16：</strong><br />
此前由于测试数据采样不够，只测试了一组大量重复字符的数据，导致测试结果有失公正。<br />
感觉hutia提醒，重新采样测试。
</div >
<p><strong>性能测试：</strong><br />
将测试数据放大，比较查找时间。</p>
<div class="runcode">
<p  class="runcodeWrap"><textarea name="runcode" style="height:200px; overflow-y:auto" class="runcode_text" id="runcode_Ceqfjm">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function getMost1(str){
	var most = [], num = 0;
	while( str != '' ){
		var ori = str,
			target = str.substr(0,1), //目标字符
			re = target;
		if(/[\$\(\)\*\+\.\?]/.test(target)) re = '\\' + re;
		str = str.replace(new RegExp(re, 'g'), '');
		diff = ori.length - str.length; //计算目标字符数目
		if(diff &gt; num) {
			num = diff;
			most = [target];
		} else if (diff == num) {
			most.push(target);
		}
	}
	return num + ': ' + most;
}
function getMost2(str) {
	var s = str.split(''), o ={}, a=[];
	for(var i = 0; i &lt; s.length; i++) o[s[i]] ? o[s[i]]++ : o[s[i]]=1; //记录数目
	for(var key in o) a[o[key]] ? a[o[key]].push(key) : a[o[key]] = [key]; //取出
	return a.length + ': ' + a.pop();
}
function getMost3(str){
	var most = [], num, arr = str.split('').sort().join('').match(/(.)\1*/g);
	arr.sort(function(a,b){return a.length - b.length}).pop();
	return most.length + ': ' + most[0];
}
/* fixed */
function getMost3fix(str){
	var most = [], num = 0, arr = str.split('').sort().join('').match(/(.)\1*/g);
	arr.sort(function(a,b){return a.length - b.length});
	//获取
	var i = arr.length - 1;
	while(arr[i] &amp;&amp; arr[i].length &gt;= num) {
		most.push(arr[i][0]);
		num = arr[i].length;
		i--;
	}
	return num + ': ' + most;
}
/* hutia版 (fixed)*/
function getMost4fix(str) {
	var o ={}, most=0, most_c=[], i=-1, len=str.length, c=str.split(&quot;&quot;);
	i=-1; while (++i &lt; len){
		var n = o[c[i]] = (o[c[i]] | 0) + 1;
		if (n &gt; most){ most_c = [c[i]]; most = o[c[i]]; }
		else if (n == most) {most_c.push(c[i])}
	}
	return most + ': ' + most_c;
}
function getMost5(str){
    var tmp = {}, k = '', maxCount = 0;
    str.replace(/./g,function(a){ tmp[a] ? (++tmp[a] &gt; maxCount &amp;&amp; (maxCount = tmp[a]) &amp;&amp; (k = a)) : (tmp[a] = 1); });
    return k + ':' + maxCount;
}
var str = '万wwwaann波波波波波nddeee博rrrrr客';
for(var i = 0; i &lt;15; i++) str += str;
var str = [];
for(var i = 0x0020; i &lt; 0x004F; i++) str[i] = String.fromCharCode(i);
for(var i = 0x4E00; i &lt;0x9FA5; i++) str[i] = String.fromCharCode(i);
str = str.join(&quot;&quot;);
var str;
function changeData(n) {
	switch (n) {
		case 0 :
			str = '万wan波波波波波ndee博rrrrr客';
			for(var i = 0; i &lt;10; i++) str += str;
			break;
		case 1 :
			str = [];
			for(var i = 0x0020; i &lt; 0x004F; i++) str[i] = String.fromCharCode(i);
			for(var i = 0x4E00; i &lt;0x9DD0; i++) str[i] = String.fromCharCode(i);
			str = str.join(&quot;&quot;);
			break;
		case 2:
			str = [];
			for(var i = 0x0020; i &lt; 0x004F; i++) str[i] = String.fromCharCode(i);
			for(var i = 0x4E30; i &lt;0x5800; i++) str[i] = String.fromCharCode(i);
			str = str.join(&quot;&quot;);
			for(var i = 0; i &lt;3; i++) str += str;
			break;
	}
	var inputs = document.getElementsByTagName('input');
	for(var i=0; i&lt;3; i++) {
		var s = inputs[i].style;
		i == n ? s.fontWeight = 'bold' : s.fontWeight = '';
	}
}
window.onload = function(){
changeData(0);
}
function run(fn){
	var d = new Date();
	fn(str);
	alert('耗费时间：' + (new Date - d) );
}
&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
.STYLE1 {
	color: #FF0000;
	font-weight: bold;
}
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;“找出字符串中出现最多的字符”性能测试&lt;/h1&gt;
&lt;strong&gt;测试数据：&lt;/strong&gt;默认为重复字符较多的数据(点击切换)。
&lt;br /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;changeData(0)&quot; value=&quot;切换为大量重复字符的数据&quot; /&gt;
(length:20480,10个字符)&lt;br /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;changeData(1)&quot; value=&quot;切换为没有重复字符的数据&quot; /&gt;
(length:20479,20479个字符)&lt;br /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;changeData(2)&quot; value=&quot;切换为模拟真实环境数据&quot; /&gt;
(length:20472,2559个字符)
&lt;br /&gt;
&lt;strong&gt;测试方法：&lt;/strong&gt;
&lt;br /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost1)&quot; value=&quot;测试方法一&quot; /&gt;　　
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost2)&quot; value=&quot;测试方法二&quot; /&gt;　　
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost3)&quot; value=&quot;测试方法三&quot; /&gt;
&lt;br /&gt;
2010-12-18 add：
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost3fix)&quot; value=&quot;方法三fixed&quot; /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost4fix)&quot; value=&quot;hutia版fixed&quot; /&gt;
&lt;input type=&quot;button&quot; onclick=&quot;run(getMost5)&quot; value=&quot;aeeke版&quot; /&gt;
&lt;br /&gt;
&lt;strong&gt;我的测试数据：&lt;/strong&gt;（只测了ie和ff）&lt;br /&gt;
&lt;table width=&quot;800&quot; border=&quot;1&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
    &lt;td colspan=&quot;2&quot;&gt;大量重复字符的数据&lt;/td&gt;
    &lt;td colspan=&quot;2&quot;&gt;没有重复字符的数据&lt;/td&gt;
    &lt;td colspan=&quot;2&quot;&gt;模拟真实环境数据&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;方法一&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;IE6：15ms&lt;/strong&gt;&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;FF3.6：4ms&lt;/strong&gt;&lt;/td&gt;
    &lt;td&gt;IE6：1600ms&lt;/td&gt;
    &lt;td&gt;FF3.6：4300ms&lt;/td&gt;
    &lt;td&gt;IE6：187ms&lt;/td&gt;
    &lt;td&gt;FF3.6：248ms&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;方法二&lt;/td&gt;
    &lt;td&gt;IE6：47ms&lt;/td&gt;
    &lt;td&gt;FF3.6：9ms&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;IE6：125ms&lt;/strong&gt;&lt;/td&gt;
    &lt;td&gt;FF3.6：25ms&lt;/td&gt;
    &lt;td&gt;&lt;span class=&quot;STYLE1&quot;&gt;IE6：63ms&lt;/span&gt;&lt;/td&gt;
    &lt;td&gt;FF3.6：13ms&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;方法三&lt;/td&gt;
    &lt;td&gt;IE6：78ms&lt;/td&gt;
    &lt;td&gt;FF3.6：15ms&lt;/td&gt;
    &lt;td&gt;IE6：1500ms&lt;/td&gt;
    &lt;td&gt;&lt;strong&gt;FF3.6：14ms&lt;/strong&gt;&lt;/td&gt;
    &lt;td&gt;IE6：219ms&lt;/td&gt;
    &lt;td&gt;&lt;span class=&quot;STYLE1&quot;&gt;FF3.6：10ms&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background:#eee; padding:5px&quot;&gt;
&lt;strong&gt;附属文档：&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;大量重复字符的数据&lt;/strong&gt;：&lt;br /&gt;
str = '万wan波波波波波ndee博rrrrr客';&lt;br /&gt;
for(var i = 0; i &lt;10; i++) str += str;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;没有重复字符的数据&lt;/strong&gt;：&lt;br /&gt;
str = [];&lt;br /&gt;
for(var i = 0x0020; i &lt; 0x004F; i++) str[i] = String.fromCharCode(i);&lt;br /&gt;
for(var i = 0x4E00; i &lt;0x9DD0; i++) str[i] = String.fromCharCode(i);&lt;br /&gt;
str = str.join(&quot;&quot;);	&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;模拟真实环境数据&lt;/strong&gt;：&lt;br /&gt;
str = [];&lt;br /&gt;
for(var i = 0x0020; i &lt; 0x004F; i++) str[i] = String.fromCharCode(i);&lt;br /&gt;
for(var i = 0x4E30; i &lt;0x5800; i++) str[i] = String.fromCharCode(i);&lt;br /&gt;
str = str.join(&quot;&quot;);	&lt;br /&gt;
for(var i = 0; i &lt;3; i++) str += str;&lt;br /&gt;
&lt;/div&gt;
&lt;style&gt;
body {line-height:2}
td {text-align:center}
&lt;/style&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>
<p style="margin-top:3px;"><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_Ceqfjm');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_Ceqfjm');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_Ceqfjm','runcode_Ceqfjm');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<p><strong>测试结果：</strong>（运行上面的代码查看详情）</p>
<table border="1" width="100%">
<tr>
<td>&nbsp;</td>
<td colspan="2">大量重复字符的数据</td>
<td colspan="2">没有重复字符的数据</td>
<td colspan="2">模拟真实环境数据</td>
</tr>
<tr>
<td>方法一</td>
<td><strong>IE6：15ms</strong></td>
<td><strong>FF3.6：4ms</strong></td>
<td>IE6：1600ms</td>
<td>FF3.6：4300ms</td>
<td>IE6：187ms</td>
<td>FF3.6：248ms</td>
</tr>
<tr>
<td>方法二</td>
<td>IE6：47ms</td>
<td>FF3.6：9ms</td>
<td><strong>IE6：125ms</strong></td>
<td>FF3.6：25ms</td>
<td><span class="STYLE1">IE6：63ms</span></td>
<td>FF3.6：13ms</td>
</tr>
<tr>
<td>方法三</td>
<td>IE6：78ms</td>
<td>FF3.6：15ms</td>
<td>IE6：1500ms</td>
<td><strong>FF3.6：14ms</strong></td>
<td>IE6：219ms</td>
<td><span class="STYLE1">FF3.6：10ms</span></td>
</tr>
</table>
<p><strong>测试结论：</strong><br />
当重复字符较多时 - 各浏览器均“方法一”速度最快；<br />
当重复字符较少时 - IE6下“方法二”速度最快，FF3.6下“方法三”速度最快。<br />
从适用性和性能角度纵使考虑，最终推荐 <strong>方法二</strong>。</p>
<p><strong>原因分析：</strong><br />
当目标字符串重复字符较多时 -<br />
方法一性能损耗主要在replace方法，但由于循环次数大大减少，从而取胜；<br />
重复字符较少时 -<br />
方法二虽然进行了两次循环，但每次循环计算量较少，从而取胜；<br />
方法三在FF3.6中小胜，虽然进行了两次循环，两次数组转换，但由于调用内置的sort方法，从而取胜。</p>
<p><strong>总结：</strong><br />
整篇文章虽然以精简为主线，其实我之前对性能就有所预料，本想借此唤起大家对性能的重视，不要为了精简而精简，小心当我们欢呼雀跃时，潜在的风险正在徐徐袭来。<br />
但整个过程出现了一段插曲，给了我一记警钟，在将文章发表到经典论坛后，hutia对我的测试结果表示了异议，于是重新测试，发现由于我原来数据取样不够，而导致测试结果有所偏颇。<br />
幸亏有一这么一段插曲，才让我更意识到，测试环节照样需要谨慎，感谢hutia。<br />
真的只有在交流中才会发现自己的不足，以后也会经常把自己的东西晒出来，给大家评论，指点。</p>
<p>你有更优的解决办法吗？你对测试结果表示怀疑吗？欢迎大家拍砖。<br />
你有什么疑点吗？你曾碰到过类似的场景吗？欢迎大家跟帖一起交流。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>告别乱码 - 网站编码问题汇总</title>
		<link>http://cnwander.com/blog/?p=17</link>
		<comments>http://cnwander.com/blog/?p=17#comments</comments>
		<pubDate>Tue, 19 Oct 2010 09:11:28 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[(X)HTML&amp;CSS]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=17</guid>
		<description><![CDATA[相信各位同行或多或少都会碰到过乱码的问题。
从来没有？相信我，只是时候未到，在这行混，迟早会碰到的。
当然，如果你对各类编码非常了解，对浏览器脾气摸得很清楚了，你可以避开或者快速解决此类问题。
希望这篇文章对你有所帮助。
一、为什么会出现乱码？
　　在计算机中，我们储存的信息都是用二进制码表示的。我们文字和符号用的二进制代码的互相转换，就是编码，转换需要一种规则，就是字符集（charset），我们常用的字符集例如：ascii，gb2312，unicode。
不同的字符集所存储的内容不同， 比如“太平洋”三个字采用gb2312对应的值为4411 3829 4983，utf-8对应为E5 A4 AA   E5 B9 B3   E6 B4 8B，这样，当一个gb2312的文件嵌入一个utf-8的文件的时候，问题就来了。
二、ANSI, Unicode, UTF-8, Encode, Charset, HTML实体… 我快疯了
疯完了没，没昏就行了，别着急，听我一一道来。其实这只是同一样东西在不同场合的应用。
 A. ANSI, Unicode, UTF-8
这几个归为一类，它们是文件编码。
ANSI指当地编码，比如在大陆它指GB2312，在台湾它指GBK（Win中记事本保存文件的时候的默认选项就是它）。
Unicode是一个通用字符集，它是一个编码标准，这个和GB2312是对应的，但因为字符集过大，Unicode有它的特殊性，在不同应用场合，有不同的具体实现手法，比如应用于互联网传输，采用的存储与传送格式是UTF-8，Windows应用UTF-16，Linux 应用UTF-32。
B. Charset
HTML中的Charset，CSS中的@charset，XML中的encoding等，这几个归为一类。
它们是告诉浏览器如何解码。比如psd后缀是告诉系统这是Photoshop源文件，同样charset设为gb2312是告诉浏览器这是一个简体中文的网页。
 C. Encode
Encode和encodeURI,encodeURIComponent归为一类。
这在下一节中进行比较详细的介绍。当浏览器提交数据给服务器时，特殊字符中文一般浏览器会自动编码，但存在部分保留字符，比如&#8221;# /&#8221;等，这时候需要encode等进行转换。
 D. HTML实体
当网页中需要插入某些特殊字符时，需要用到HTML实体，比如插入&#60;，可以使用&#38;lt;或者实体编码&#38;#60;。

三、Javascript URI编码/解码
A.为什么需要URI编码？
通常来说，之所以URI需要进行编码，是因为URI中有些字符可能会引起歧义或者有隐私的数据。
B. 编码与解码的函数？
JS对文字进行编码涉及3个函数：escape,encodeURI,encodeURIComponent，相应3个解码函数：unescape,decodeURI,decodeURIComponent
C. 如何选择？
首先，范围不同。Escape不能编码的字符有: @ * / +；encodeURI：! @ # $&#38; * ( ) = : / ; ? + &#8216; ； encodeURIComponent：! [...]]]></description>
			<content:encoded><![CDATA[<p>相信各位同行或多或少都会碰到过乱码的问题。<br />
从来没有？相信我，只是时候未到，在这行混，迟早会碰到的。<br />
当然，如果你对各类编码非常了解，对浏览器脾气摸得很清楚了，你可以避开或者快速解决此类问题。<br />
希望这篇文章对你有所帮助。</p>
<p><strong>一、为什么会出现乱码？</strong><br />
　　在计算机中，我们储存的信息都是用二进制码表示的。我们文字和符号用的二进制代码的互相转换，就是编码，转换需要一种规则，就是字符集（charset），我们常用的字符集例如：ascii，gb2312，unicode。<br />
不同的字符集所存储的内容不同， 比如“太平洋”三个字采用gb2312对应的值为4411 3829 4983，utf-8对应为E5 A4 AA   E5 B9 B3   E6 B4 8B，这样，当一个gb2312的文件嵌入一个utf-8的文件的时候，问题就来了。</p>
<p><strong>二、ANSI, Unicode, UTF-8, Encode, Charset, HTML实体… 我快疯了</strong><br />
疯完了没，没昏就行了，别着急，听我一一道来。其实这只是同一样东西在不同场合的应用。<br />
<strong> A. ANSI, Unicode, UTF-8</strong><br />
<em>这几个归为一类，它们是文件编码。</em><br />
ANSI指当地编码，比如在大陆它指GB2312，在台湾它指GBK（Win中记事本保存文件的时候的默认选项就是它）。<br />
Unicode是一个通用字符集，它是一个编码标准，这个和GB2312是对应的，但因为字符集过大，Unicode有它的特殊性，在不同应用场合，有不同的具体实现手法，比如应用于互联网传输，采用的存储与传送格式是UTF-8，Windows应用UTF-16，Linux 应用UTF-32。<br />
<strong>B. Charset</strong><br />
<em>HTML中的Charset，CSS中的@charset，XML中的encoding等，这几个归为一类。</em><br />
它们是告诉浏览器如何解码。比如psd后缀是告诉系统这是Photoshop源文件，同样charset设为gb2312是告诉浏览器这是一个简体中文的网页。</p>
<p><strong> C. Encode</strong><br />
<em>Encode和encodeURI,encodeURIComponent归为一类。</em><br />
这在下一节中进行比较详细的介绍。当浏览器提交数据给服务器时，特殊字符中文一般浏览器会自动编码，但存在部分保留字符，比如&#8221;# /&#8221;等，这时候需要encode等进行转换。<br />
<strong> D. HTML实体</strong><br />
当网页中需要插入某些特殊字符时，需要用到HTML实体，比如插入&lt;，可以使用&amp;lt;或者实体编码&amp;#60;。<br />
<span id="more-17"></span><br />
<strong>三、Javascript URI编码/解码</strong><br />
<strong>A.为什么需要URI编码？</strong><br />
通常来说，之所以URI需要进行编码，是因为URI中有些字符可能会引起歧义或者有隐私的数据。<br />
<strong>B. 编码与解码的函数？</strong><br />
JS对文字进行编码涉及3个函数：escape,encodeURI,encodeURIComponent，相应3个解码函数：unescape,decodeURI,decodeURIComponent<br />
<strong>C. 如何选择？</strong><br />
<em>首先，范围不同。</em>Escape不能编码的字符有: @ * / +；encodeURI：! @ # $&amp; * ( ) = : / ; ? + &#8216; ； encodeURIComponent：! * ( ) 。<br />
<em>其次，编码类型不同。</em>encodeURI、encodeURIComponent采用utf-8进行编码；而Escape采用系统编码。<br />
<em>所以，怎么选择？</em>例如内容中要存在URI标识，则用encodeURI，如果想把&#8221;#，/&#8221;也要编码用escape或encodeURIComponent。</p>
<p><strong>四、</strong><strong>Ajax加载的文件中不能用中文？</strong><br />
　　这一直是让开发人员很头疼的问题之一，也是常见的编码问题，原因很简单，你非得拿羊城通往ATM上插，结果当然是读不出来或者读错。编码问题也是一样，通常出错的情况是，文档编码是GB2312，而浏览器以UTF-8(Ajax默认解码方式)来解码，自然乱码。<br />
<strong>怎么解决呢？</strong><br />
1、文档采用UTF-8编码，不会产生任何问题。<br />
2、如果不能用UTF-8，XML文档可以指定它的Encoding，JS文件和JSON数据目前没有好的解决办法。</p>
<p><strong>五、GB2312，UTF-8都可以显示中文，如何选择？</strong><br />
　　可以显示中文的编码有GB2312、GBK、GB18030、Unicode。前三个保持向后兼容，比如“太平洋”这几个字在这几个编码规则中内码是一样的。它们的不同之处在于字符集不同，GB2312只包括简体中文，GBK还包括繁体，GB18030再加入了少数民族语言，比如藏文。那如果显示简体中文可以任意选择？据我目前测试了解，应该都是可以的，至于速度上是否有差异，还未深究，但GB2312肯定更为通用，而且据我测试已经包含了相当部分繁体。至于Unicode，应用在网页中的UTF-8，中文一般需要占据3个字节(前三种2个字节)，所以当中文较多的网页用UTF-8文件将变得更大(我们公司大部分网页4%左右)。</p>
<p><strong>六、</strong><strong>UTF-8、UTF-16、UTF-32什么区别？</strong><br />
　　Unicode所做的是为每个字符定义了一个相应的数字表示。比如，“a“的Unicode值是0&#215;0061,“一”的 Unicde值是0&#215;4E00，这是最简单的情况，每个字符用2个字节表示。 Unicode定义了百万个以上的字符，如果将所有的字符用统一的格式表示，需要的是4个字节。“a“的Unicode表示就会变成 0&#215;00000061，而“一“的Unicode值是0&#215;00004E00。实际上，这就是UTF32，Linux操作系统上所使用的Unicode方案。但是，仔细分析可以发现，其实绝大部分字符只使用2个字节就可以表示了。英文的Unicode范围是0&#215;0000-0&#215;007F，中文的Unicode范围是0&#215;4E00-0&#215;9F**，真正需要扩展到4个字节来表示的字符少之又少，所以有些系统直接使用2个字节来表示Unicode。比如Windows 系统上，Unicode就是两个字节的。对于那些需要4个字节才能表示的字符，使用一种代理的手法来扩展(其实就是在低两个字节上做一个标记，表示这是一个代理，需要连接上随后的两个字节，才能组成一个字符)。这样的好处是大量的节约了存取空间，也提高了处理的速度。这种Unicode表示方法就是 UTF16。一般在Windows平台上，提到Unicode,那就是指UTF16了。 而UTF-8更有意思，它的字节数1-4个不等，如果纯英文的应用环境，自然用它更加节省。</p>
<p><strong>七、CSS、JS的编码可以和HTML不一致吗？</strong><br />
　　可以。但最好在引用时手动设置Charset，值得注意的是IE、FF默认根据当前页面编码，而Chrome默认是UTF-8。</p>
<p><strong>八、我这人比较懒，直接给点建议吧。</strong><br />
懒得够可以的，好吧，那我想到几条写几条：<br />
<span>1、</span><span>框架页不受父页面编码影响；</span><br />
<span>2、</span><span>关于浏览器编码纠错。 </span><br />
<span>测试：创建<span style="font-family: 'Times New Roman';">utf-8</span><span style="font-family: 宋体;">文件，更改</span><span style="font-family: 'Times New Roman';">meta charset</span><span style="font-family: 宋体;">属性为</span><span style="font-family: 'Times New Roman';">gb2312</span><span style="font-family: 宋体;">（文件本身数据编码不变），外链</span><span style="font-family: 'Times New Roman';">gb2312</span><span style="font-family: 宋体;">的</span><span style="font-family: 'Times New Roman';">JS</span><span style="font-family: 宋体;">文件，结论：</span></span><span><br />
</span><span>IE&amp;Chrome<span style="font-family: 宋体;">自动以</span><span style="font-family: 'Times New Roman';">utf-8</span><span style="font-family: 宋体;">解析，外链</span><span style="font-family: 'Times New Roman';">JS</span><span style="font-family: 宋体;">乱码；</span></span><span><br />
</span><span>FF<span style="font-family: 宋体;">以</span><span style="font-family: 'Times New Roman';">gb2312</span><span style="font-family: 宋体;">解析，外链</span><span style="font-family: 'Times New Roman';">JS</span><span style="font-family: 宋体;">中文显示正常。</span><span style="font-family: 'Times New Roman';">Demo: </span><span style="font-family: 宋体;">测试自动解析编码</span><span style="font-family: 'Times New Roman';">.html</span></span><br />
<span>3、</span><span>Ajax<span style="font-family: 宋体;">加载，如果目标文档文件编码非</span><span style="font-family: 'Times New Roman';">UTF-8</span><span style="font-family: 宋体;">，需指定</span><span style="font-family: 'Times New Roman';">encoding</span><span style="font-family: 宋体;">，否则中文乱码；</span></span><span><br />
</span><span>XML<span style="font-family: 宋体;">是可以指定编码的，但如果是</span><span style="font-family: 'Times New Roman';">JSON</span><span style="font-family: 宋体;">，</span><span style="font-family: 'Times New Roman';">Script</span><span style="font-family: 宋体;">之类的数据，无法指定编码，要显示中文只有用</span><span style="font-family: 'Times New Roman';">UTF-8</span><span style="font-family: 宋体;">的编码；</span></span><br />
<span>4、</span><span>外链的<span style="font-family: 'Times New Roman';">js</span><span style="font-family: 宋体;">，</span><span style="font-family: 'Times New Roman';">IE</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Times New Roman';">FF</span><span style="font-family: 宋体;">默认根据当前页面编码，</span><span style="font-family: 'Times New Roman';">Chrome</span><span style="font-family: 宋体;">默认是</span><span style="font-family: 'Times New Roman';">Utf-8</span><span style="font-family: 宋体;">。如果</span><span style="font-family: 'Times New Roman';">JS</span><span style="font-family: 宋体;">文件为</span><span style="font-family: 'Times New Roman';">Unicode</span><span style="font-family: 宋体;">编码，给文件加上</span><span style="font-family: 'Times New Roman';">bom</span><span style="font-family: 宋体;">比较保险</span><span style="font-family: 'Times New Roman';">(IE</span><span style="font-family: 宋体;">、</span><span style="font-family: 'Times New Roman';">FF</span><span style="font-family: 宋体;">的智能识别</span><span style="font-family: 'Times New Roman';">)</span></span><br />
<span>5、</span><span>Get<span style="font-family: 宋体;">数据，</span><span style="font-family: 'Times New Roman';">IE678</span><span style="font-family: 宋体;">，</span><span style="font-family: 'Times New Roman';">ff3 GBK</span><span style="font-family: 宋体;">编码，</span><span style="font-family: 'Times New Roman';">Chrome utf-8</span><span style="font-family: 宋体;">编码。</span></span><br />
6、想完全避免它，如果条件允许，网站前后台数据库全部统一用utf-8吧，万事大吉，想碰到编码问题都难。<br />
全部统一用gb2312？不行，问题照出，原因在上文中。</p>
<p><span style='color:#888'>如蒙转载，请注明出处 cnwander.com</span></p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
		<item>
		<title>初探浏览器内核</title>
		<link>http://cnwander.com/blog/?p=16</link>
		<comments>http://cnwander.com/blog/?p=16#comments</comments>
		<pubDate>Tue, 19 Oct 2010 03:53:04 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript引擎]]></category>

		<category><![CDATA[浏览器内核]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=16</guid>
		<description><![CDATA[一、还原页面渲染流程。
　　你应该了解真相，真相会让你自由。 －《圣经》
　　不知道大家是否玩桌球，常玩桌球的童鞋肯定知道，打好桌球，母球的控制最重要，当然要控制好它，这需要日积月累的练习，但是，如果你深入地分析过，你击球的位置和角度，对母球旋转，碰撞后路线变化的影响，了解了整个物理过程后，这将会让你事半功倍。
　　废了这么多话，其实还只说了文章第一句，你应该了解真相（轻点砸，嘿嘿）。每天与浏览器打交道的我们，如果对浏览器内核的实现了如指掌，那无疑，你将可以做出最优秀的页面。有童鞋可能要喷我了，能达到这水平我直接去开发浏览器了。是的，我们不可能了解到它的每一个细节，但是我们可 以大体地了解它，把握她的性情，摸清他的脾气。
　　目前，除了市场占有率最高性能最糟糕的Trident（IE内核），性能最棒市场占有最低（相对）的 Webkit（Chrome&#38;Safari），常见的还有Gecko（FireFox）、Presto(Opera)。我们没这么多时间和精力， 也没必要逐个了解，因为它们干的都是同一件事，实现的手法大体一致。
 　　下图还原了从请求页面到渲染完毕整个浏览器大体工作过程，可能有很多陌生的名字，Tokenizer、Parser、DOM Builder，没关系，我们只需要知道它是其中一个功能模块，我们只需要了解它干了什么。
名词解释：
　　JS宿主环境 - 如果JS运行在浏览器中，那宿主环境指浏览器相关的应用环境；如果运行在WSH（Windows Scripting Host）中，则是宿主为WScript。

如上图，从我们在地址栏输入url开始，浏览器的工作流程为：
1、DNS查找。通过DNS服务器，把你输入的域名转换成为网络可以识别的ip地址。
2、浏览器发起一个到指定端口的HTTP请求。
3、服务器响应后，开始资源加载。
4、解析获取到的文档流，并进行分析。
5、构建DOM模型。之后的大部分工作都基本围绕着DOM Tree进行。
6、合并已经读取到的样式，进行语法分析，合并，然后渲染引擎开始渲染。
7、如果期间碰到Script标签，或者由事件触发的，需要执行Javascript片断，渲染暂停，调用JS引擎分析并执行JS代码，执行结束，返回宿主环境数据。
8、OVER.
PS：上图中演示流程是一个反复循环的过程，浏览器在加载完一个代码片断之后即可以开始构建并渲染。
PS2：渲染与Javascript的执行也是一个反复交递的过程。
PS3：流程的分析相关知识，大部分来源浏览器相关开发者博客，以及Javascript开发资深人士书籍，和自己的实践总结归纳，大家有什么疑点大家一起研究探讨。
二、Javascript执行过程与运行期间环境。
　　常见JS引擎：SpiderMonkey（Firefox）、JavascriptCore（Safari）、V8（Chrome）、Jscript（IE）。
严格来说这里说的只是Javascript执行的流程，具体的Javascript执行过程，需另起篇幅与大家一起探讨。
　　先引用《Javascript语言精髓》上的一句话，可能更能加深理解。
　　&#8221;Javascript是一门设计得相对&#8217;原始&#8217;的语言&#8230;&#8230;JS是一种通用的、跨平台和跨环境的语言，并不特指某种特定的宿主环境或者运行环境&#8221;

注：
本文参考文献：
周爱民《JAVASCRIPT语言精髓与编程实践》
李嘉昱 《Webkit 内核探究》
如蒙转载，请注明出处 cnwander.com
]]></description>
			<content:encoded><![CDATA[<p><strong>一、还原页面渲染流程。</strong><br />
　　你应该了解真相，真相会让你自由。 －《圣经》</p>
<p>　　不知道大家是否玩桌球，常玩桌球的童鞋肯定知道，打好桌球，母球的控制最重要，当然要控制好它，这需要日积月累的练习，但是，如果你深入地分析过，你击球的位置和角度，对母球旋转，碰撞后路线变化的影响，了解了整个物理过程后，这将会让你事半功倍。</p>
<p>　　废了这么多话，其实还只说了文章第一句，你应该了解真相（轻点砸，嘿嘿）。每天与浏览器打交道的我们，如果对浏览器内核的实现了如指掌，那无疑，你将可以做出最优秀的页面。有童鞋可能要喷我了，能达到这水平我直接去开发浏览器了。是的，我们不可能了解到它的每一个细节，但是我们可 以大体地了解它，把握她的性情，摸清他的脾气。</p>
<p>　　目前，除了市场占有率最高性能最糟糕的Trident（IE内核），性能最棒市场占有最低（相对）的 Webkit（Chrome&amp;Safari），常见的还有Gecko（FireFox）、Presto(Opera)。我们没这么多时间和精力， 也没必要逐个了解，因为它们干的都是同一件事，实现的手法大体一致。</p>
<p><span id="more-16"></span> 　　下图还原了从请求页面到渲染完毕整个浏览器大体工作过程，可能有很多陌生的名字，Tokenizer、Parser、DOM Builder，没关系，我们只需要知道它是其中一个功能模块，我们只需要了解它干了什么。</p>
<p>名词解释：<br />
　　JS宿主环境 - 如果JS运行在浏览器中，那宿主环境指浏览器相关的应用环境；如果运行在WSH（Windows Scripting Host）中，则是宿主为WScript。</p>
<p><img src="http://cnwander.com/upload/images/engine01.jpg" border="0" alt="" align="absmiddle" /></p>
<p>如上图，从我们在地址栏输入url开始，浏览器的工作流程为：<br />
1、DNS查找。通过DNS服务器，把你输入的域名转换成为网络可以识别的ip地址。<br />
2、浏览器发起一个到指定端口的HTTP请求。<br />
3、服务器响应后，开始资源加载。<br />
4、解析获取到的文档流，并进行分析。<br />
5、构建DOM模型。之后的大部分工作都基本围绕着DOM Tree进行。<br />
6、合并已经读取到的样式，进行语法分析，合并，然后渲染引擎开始渲染。<br />
7、如果期间碰到Script标签，或者由事件触发的，需要执行Javascript片断，渲染暂停，调用JS引擎分析并执行JS代码，执行结束，返回宿主环境数据。<br />
8、OVER.</p>
<p>PS：上图中演示流程是一个反复循环的过程，浏览器在加载完一个代码片断之后即可以开始构建并渲染。</p>
<p>PS2：渲染与Javascript的执行也是一个反复交递的过程。</p>
<p>PS3：流程的分析相关知识，大部分来源浏览器相关开发者博客，以及Javascript开发资深人士书籍，和自己的实践总结归纳，大家有什么疑点大家一起研究探讨。</p>
<p><strong>二、Javascript执行过程与运行期间环境。</strong></p>
<p>　　常见JS引擎：SpiderMonkey（Firefox）、JavascriptCore（Safari）、V8（Chrome）、Jscript（IE）。<br />
严格来说这里说的只是Javascript执行的流程，具体的Javascript执行过程，需另起篇幅与大家一起探讨。<br />
　　先引用《Javascript语言精髓》上的一句话，可能更能加深理解。<br />
　　&#8221;Javascript是一门设计得相对&#8217;原始&#8217;的语言&#8230;&#8230;JS是一种通用的、跨平台和跨环境的语言，并不特指某种特定的宿主环境或者运行环境&#8221;</p>
<p><img src="http://cnwander.com/upload/images/engine02.jpg" border="0" alt="" align="absmiddle" /></p>
<p>注：</p>
<p>本文参考文献：<br />
周爱民《JAVASCRIPT语言精髓与编程实践》<br />
李嘉昱 <a rel="nofollow" target="_blank" href="http://www.cnblogs.com/jyli/">《Webkit 内核探究》</a></p>
<p><span style="color: #c0c0c0;">如蒙转载，请注明出处 cnwander.com</span></p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>奇技淫巧之图片切割</title>
		<link>http://cnwander.com/blog/?p=13</link>
		<comments>http://cnwander.com/blog/?p=13#comments</comments>
		<pubDate>Sat, 10 Oct 2009 15:25:39 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[图片切割]]></category>

		<category><![CDATA[图片效果]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=13</guid>
		<description><![CDATA[DEMO1(随机出现): http://cnwander.com/demo/puzzle_effect/
机器配置好的可以将图片切得更细一点 (变量xNum，yNum)
DEMO1(规则运动): http://cnwander.com/demo/puzzle_effect/index2.html
测试：IE6、IE7、FF3.014
突发奇想的效果，主要突出构思，效果还比较粗糙，好好创意一下，应该可以引申出一些比较有新意的图片切换效果。
没什么特别的东西，思路自己看DEMO吧。
如蒙转载，请注明出处 cnwander.com
]]></description>
			<content:encoded><![CDATA[<p>DEMO1(随机出现): <a href="http://cnwander.com/demo/puzzle_effect/" target="_blank">http://cnwander.com/demo/puzzle_effect/</a><br />
机器配置好的可以将图片切得更细一点 (变量xNum，yNum)<br />
DEMO1(规则运动): <a href="http://cnwander.com/demo/puzzle_effect/index2.html" target="_blank">http://cnwander.com/demo/puzzle_effect/index2.html</a><br />
测试：IE6、IE7、FF3.014</p>
<p>突发奇想的效果，主要突出构思，效果还比较粗糙，好好创意一下，应该可以引申出一些比较有新意的图片切换效果。<br />
没什么特别的东西，思路自己看DEMO吧。</p>
<p><span style="color: #888888;">如蒙转载，请注明出处 cnwander.com</span></p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=13</wfw:commentRss>
		</item>
		<item>
		<title>仿土豆豆单Photo Slideshow</title>
		<link>http://cnwander.com/blog/?p=12</link>
		<comments>http://cnwander.com/blog/?p=12#comments</comments>
		<pubDate>Wed, 07 Oct 2009 08:47:21 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[slide]]></category>

		<category><![CDATA[图片效果]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=12</guid>
		<description><![CDATA[DEMO: http://cnwander.com/demo/slideshow/

测试：IE7、FF3.014

注：背景图片来自土豆，其版权归土豆所有
如蒙转载，请注明出处 cnwander.com
注：接受一些朋友意见，滚动事件绑定在“豆单”上了，有需要绑定在document或去掉滚轮事件的修改这段代码即可：

        function attachWheel() {
            if(document.all) ctrlBar.onmousewheel = thumbWheel;  //将ctrlBar改为document即绑定滚轮事件到整个页面。
            else ctrlBar.addEventListener("DOMMouseScroll", thumbWheel, false);
        }

TIPs:
1、绑定滚轮事件
IE: document.onmousewheel = [...]]]></description>
			<content:encoded><![CDATA[<p>DEMO: <a href="http://cnwander.com/demo/slideshow/" target="_blank">http://cnwander.com/demo/slideshow/</a><br />
<a href="http://cnwander.com/demo/slideshow/" target="_blank"><img src="http://cnwander.com/demo/slideshow/photoslide_shot.png" alt="photo slide show" /></a><br />
测试：IE7、FF3.014<br />
<span id="more-12"></span><br />
注：背景图片来自土豆，其版权归土豆所有<br />
<span style="color: #c0c0c0;">如蒙转载，请注明出处 cnwander.com</span></p>
<p>注：接受一些朋友意见，滚动事件绑定在“豆单”上了，有需要绑定在document或去掉滚轮事件的修改这段代码即可：<br />
<code><br />
        function attachWheel() {<br />
            if(document.all) ctrlBar.onmousewheel = thumbWheel;  //将ctrlBar改为document即绑定滚轮事件到整个页面。<br />
            else ctrlBar.addEventListener("DOMMouseScroll", thumbWheel, false);<br />
        }<br />
</code></p>
<p>TIPs:<br />
1、绑定滚轮事件<br />
IE: document.onmousewheel = fuc;<br />
FF: document.addEventListener(&#8221;DOMMouseScroll&#8221;, fuc, false);<br />
2、图片加载<br />
当图片已经在缓存中时，图片的onload事件在IE中无效<br />
所以我作了如下处理<br />
if(img.width &gt; 0) fuc();<br />
else img.onload = fuc;<br />
3、设置元素透明度<br />
function setOpacity(obj,n) {<br />
obj.style.cssText = &#8220;filter:alpha(opacity=&#8221;+ n*100 +&#8221;); -moz-opacity:&#8221;+ n +&#8221;; opacity:&#8221;+ n;<br />
}<br />
4、Elements finder元素查找器<br />
允许的格式：<br />
$(&#8221;#id tag&#8221;)<br />
$(&#8221;#id tag.classname&#8221;)<br />
$(&#8221;#id .classname tag&#8221;)<br />
$(&#8221;.classname .classname tag&#8221;)<br />
$(&#8221;.classname tag&#8221;,domElement)<br />
有兴趣的可以去看看DEMO这个函数 function $(s,wrap) {}<br />
5、IE中的onmouseleave在FF中的解决办法<br />
obj.onmouseout = thumbOut;<br />
function thumbOut(e){<br />
e = e || event;<br />
var relatedTarget = e.toElement || e.relatedTarget;<br />
while(relatedTarget &amp;&amp; relatedTarget != this){<br />
relatedTarget = relatedTarget.parentNode;<br />
if(!relatedTarget){<br />
slideTo(obj,&#8221;marginTop&#8221;,-toY);<br />
}<br />
}<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=12</wfw:commentRss>
		</item>
		<item>
		<title>[JS小游戏]2D桌球</title>
		<link>http://cnwander.com/blog/?p=11</link>
		<comments>http://cnwander.com/blog/?p=11#comments</comments>
		<pubDate>Wed, 30 Sep 2009 14:50:58 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[2D桌球]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[台球]]></category>

		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=11</guid>
		<description><![CDATA[DEMO: http://cnwander.com/demo/billiards/

贴出一些关键代码稍作解释，有兴趣的同学看看。

如蒙转载，请注明出处 cnwander.com
// ball class
function&#160;Ball(type,x,y) {
&#160; &#160; //...
&#160; &#160; this.type = type;
&#160; &#160; this.x = x; //位置
&#160; &#160; this.y = y;
&#160; &#160; this.angle = 0; //角度
&#160; &#160; this.v = 0; //速度(不包含方向)
&#160; &#160; //...
&#160; &#160; return&#160;this;
}
/*
描述小球的四个信息，小球的类型(母球，目标球)，坐标，角度，速度
在更新坐标时，读取小球的v，刷新小球的位置
在与边沿碰撞时，更改小球angle
*/
var formPos = getBallPos(cueBall.elem),
toPos = getBallPos(guideBall),
angle = Math.atan2(toPos[0] - formPos[0],toPos[1] - formPos[1]);
/*
计算母球，与参考球之间的角度，其它任意小球之间也是如此
值得注意的是我采用的是Math.atan2，而非Math.atan，这是因为Math.atan2返回的是(0 - Math.PI)和(-Math.PI - 0)，可以确定唯一的角度，而Math.atan不唯一。
*/
//边缘碰撞
if(ball.x &#38;lt; R &#124;&#124; ball.x &#38;gt; [...]]]></description>
			<content:encoded><![CDATA[<p>DEMO: <a href="http://cnwander.com/demo/billiards/" target="_blank">http://cnwander.com/demo/billiards/</a><br />
<img src="http://cnwander.com/demo/billiards/images/myscore.jpg" alt="js小游戏2d桌球" /><br />
贴出一些关键代码稍作解释，有兴趣的同学看看。<br />
<span id="more-11"></span><br />
<span style="color: #c0c0c0;">如蒙转载，请注明出处 cnwander.com</span></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// ball class</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">Ball</span><span style="color: black;">(</span><span style="color: Black;">type</span><span style="color: blue;">,</span><span style="color: Black;">x</span><span style="color: blue;">,</span><span style="color: Black;">y</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//...</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">type</span><span style="color: blue;"> = </span><span style="color: Black;">type</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> = </span><span style="color: Black;">x</span><span style="color: blue;">; </span><span style="color: #ffa500;">//位置</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> = </span><span style="color: Black;">y</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: #ffa500;">//角度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: #ffa500;">//速度(不包含方向)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//...</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: #ffa500;">/*</span></li>
<li><span style="color: #ffa500;">描述小球的四个信息，小球的类型(母球，目标球)，坐标，角度，速度</span></li>
<li><span style="color: #ffa500;">在更新坐标时，读取小球的v，刷新小球的位置</span></li>
<li><span style="color: #ffa500;">在与边沿碰撞时，更改小球angle</span></li>
<li><span style="color: #ffa500;">*/</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">formPos</span><span style="color: blue;"> = </span><span style="color: Black;">getBallPos</span><span style="color: black;">(</span><span style="color: Black;">cueBall</span><span style="color: blue;">.</span><span style="color: Black;">elem</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: Black;">toPos</span><span style="color: blue;"> = </span><span style="color: Black;">getBallPos</span><span style="color: black;">(</span><span style="color: Black;">guideBall</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">atan2</span><span style="color: black;">(</span><span style="color: Black;">toPos</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;"> - </span><span style="color: Black;">formPos</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">,</span><span style="color: Black;">toPos</span><span style="color: black;">[</span><span style="color: red;">1</span><span style="color: black;">]</span><span style="color: blue;"> - </span><span style="color: Black;">formPos</span><span style="color: black;">[</span><span style="color: red;">1</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: #ffa500;">/*</span></li>
<li><span style="color: #ffa500;">计算母球，与参考球之间的角度，其它任意小球之间也是如此</span></li>
<li><span style="color: #ffa500;">值得注意的是我采用的是Math.atan2，而非Math.atan，这是因为Math.atan2返回的是(0 - Math.PI)和(-Math.PI - 0)，可以确定唯一的角度，而Math.atan不唯一。</span></li>
<li><span style="color: #ffa500;">*/</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//边缘碰撞</span></li>
<li><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> &amp;</span><span style="color: Black;">lt</span><span style="color: blue;">; </span><span style="color: Black;">R</span><span style="color: blue;"> || </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> &amp;</span><span style="color: Black;">gt</span><span style="color: blue;">; </span><span style="color: Black;">W</span><span style="color: blue;"> - </span><span style="color: Black;">R</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> *= -</span><span style="color: red;">1</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> * </span><span style="color: black;">(</span><span style="color: red;">1</span><span style="color: blue;"> - </span><span style="color: Black;">LOSS</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//...</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">type</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">cue</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> &amp;</span><span style="color: Black;">gt</span><span style="color: blue;">; </span><span style="color: red;">0</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">vy</span><span style="color: blue;"> -= </span><span style="color: Black;">rollRight</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">else</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">vy</span><span style="color: blue;"> += </span><span style="color: Black;">rollRight</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx</span><span style="color: blue;"> += </span><span style="color: Black;">rollUp</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">rollUp</span><span style="color: blue;"> *= </span><span style="color: red;">0.2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">rollRight</span><span style="color: blue;"> *= </span><span style="color: red;">0.2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sqrt</span><span style="color: black;">(</span><span style="color: Black;">vx</span><span style="color: blue;">*</span><span style="color: Black;">vx</span><span style="color: blue;"> + </span><span style="color: Black;">vy</span><span style="color: blue;">*</span><span style="color: Black;">vy</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">atan2</span><span style="color: black;">(</span><span style="color: Black;">vx</span><span style="color: blue;">,</span><span style="color: Black;">vy</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: #ffa500;">//...</span></li>
<li><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> &amp;</span><span style="color: Black;">lt</span><span style="color: blue;">; </span><span style="color: Black;">R</span><span style="color: blue;"> || </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> &amp;</span><span style="color: Black;">gt</span><span style="color: blue;">; </span><span style="color: Black;">H</span><span style="color: blue;"> - </span><span style="color: Black;">R</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> &amp;</span><span style="color: Black;">gt</span><span style="color: blue;">; </span><span style="color: red;">0</span><span style="color: blue;"> ? </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">PI</span><span style="color: blue;"> - </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> : - </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">PI</span><span style="color: blue;"> - </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> ;</span></li>
<li><span style="color: #ffa500;">//...</span></li>
<li><span style="color: #ffa500;">/*(</span></li>
<li><span style="color: #ffa500;">不考虑小球旋转时，边缘碰撞很简单，更改小球angle即可</span></li>
<li><span style="color: #ffa500;">当小球旋转时，如果碰到固定不动的物体时，那将会把速度作用给自身</span></li>
<li><span style="color: #ffa500;">并且自身旋转速度减小</span></li>
<li><span style="color: #ffa500;">我这里计算球与球之间碰撞，并没有将旋转传递，这是不准确的，有待改善</span></li>
<li><span style="color: #ffa500;">*/</span></li></ol></div>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//这一段是核心，即小球与小球碰撞后各自的速度，其实并不难</span></li>
<li><span style="color: #ffa500;">//先判断两球距离</span></li>
<li><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">dis</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sqrt</span><span style="color: black;">(</span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">pow</span><span style="color: black;">(</span><span style="color: Black;">disX</span><span style="color: blue;">,</span><span style="color: red;">2</span><span style="color: black;">)</span><span style="color: blue;">+</span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">pow</span><span style="color: black;">(</span><span style="color: Black;">disY</span><span style="color: blue;">,</span><span style="color: red;">2</span><span style="color: black;">))</span><span style="color: blue;">;</span></li>
<li><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">dis</span><span style="color: blue;"> &amp;</span><span style="color: Black;">lt</span><span style="color: blue;">;= </span><span style="color: Black;">gap</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: #ffa500;">//如果目标球是静止的，则添加到数组movingBalls</span></li>
<li><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">round</span><span style="color: black;">(</span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: black;">)</span><span style="color: blue;"> == </span><span style="color: red;">0</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">movingBalls</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">obj</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//还原两球相切状态，用其它方式做我不知道，但用js来做，这一步相当关键，否则误差将相当大</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> -= </span><span style="color: black;">(</span><span style="color: Black;">gap</span><span style="color: blue;"> - </span><span style="color: Black;">dis</span><span style="color: black;">)</span><span style="color: blue;">*</span><span style="color: Black;">sin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> -= </span><span style="color: black;">(</span><span style="color: Black;">gap</span><span style="color: blue;"> - </span><span style="color: Black;">dis</span><span style="color: black;">)</span><span style="color: blue;">*</span><span style="color: Black;">cos</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">disX</span><span style="color: blue;"> = </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> - </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">disY</span><span style="color: blue;"> = </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> - </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 下面则是先将整个坐标系旋转到相撞的水平方向</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 计算角度和正余弦值</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">atan2</span><span style="color: black;">(</span><span style="color: Black;">disY</span><span style="color: blue;">, </span><span style="color: Black;">disX</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">hitsin</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sin</span><span style="color: black;">(</span><span style="color: Black;">angle</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">hitcos</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">cos</span><span style="color: black;">(</span><span style="color: Black;">angle</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">objVx</span><span style="color: blue;"> = </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> * </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sin</span><span style="color: black;">(</span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">objVy</span><span style="color: blue;"> = </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> * </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">cos</span><span style="color: black;">(</span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//trace(angle*180/Math.PI);</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 旋转坐标</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">x1</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">y1</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">x2</span><span style="color: blue;"> = </span><span style="color: Black;">disX</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">disY</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">y2</span><span style="color: blue;"> = </span><span style="color: Black;">disY</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">disX</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx1</span><span style="color: blue;"> = </span><span style="color: Black;">vx</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">vy</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vy1</span><span style="color: blue;"> = </span><span style="color: Black;">vy</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">vx</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx2</span><span style="color: blue;"> = </span><span style="color: Black;">objVx</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">objVy</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vy2</span><span style="color: blue;"> = </span><span style="color: Black;">objVy</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">objVx</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 碰撞后的速度和位置</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">plusVx</span><span style="color: blue;"> = </span><span style="color: Black;">vx1</span><span style="color: blue;"> - </span><span style="color: Black;">vx2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx1</span><span style="color: blue;"> = </span><span style="color: Black;">vx2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx2</span><span style="color: blue;"> = </span><span style="color: Black;">plusVx</span><span style="color: blue;"> + </span><span style="color: Black;">vx1</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//母球加塞</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">type</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">cue</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">vx1</span><span style="color: blue;"> += </span><span style="color: Black;">rollUp</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">rollUp</span><span style="color: blue;"> *= </span><span style="color: red;">0.2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">x1</span><span style="color: blue;"> += </span><span style="color: Black;">vx1</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">x2</span><span style="color: blue;"> += </span><span style="color: Black;">vx2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 将位置旋转回来</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">x1Final</span><span style="color: blue;"> = </span><span style="color: Black;">x1</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">y1</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">y1Final</span><span style="color: blue;"> = </span><span style="color: Black;">y1</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">x1</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">x2Final</span><span style="color: blue;"> = </span><span style="color: Black;">x2</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">y2</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">y2Final</span><span style="color: blue;"> = </span><span style="color: Black;">y2</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">x2</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> + </span><span style="color: Black;">x2Final</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> + </span><span style="color: Black;">y2Final</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">x</span><span style="color: blue;"> + </span><span style="color: Black;">x1Final</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> = </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">y</span><span style="color: blue;"> + </span><span style="color: Black;">y1Final</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 将速度旋转回来</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vx</span><span style="color: blue;"> = </span><span style="color: Black;">vx1</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">vy1</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">vy</span><span style="color: blue;"> = </span><span style="color: Black;">vy1</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">vx1</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">objVx</span><span style="color: blue;"> = </span><span style="color: Black;">vx2</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> - </span><span style="color: Black;">vy2</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">objVy</span><span style="color: blue;"> = </span><span style="color: Black;">vy2</span><span style="color: blue;"> * </span><span style="color: Black;">hitcos</span><span style="color: blue;"> + </span><span style="color: Black;">vx2</span><span style="color: blue;"> * </span><span style="color: Black;">hitsin</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//最终速度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sqrt</span><span style="color: black;">(</span><span style="color: Black;">vx</span><span style="color: blue;">*</span><span style="color: Black;">vx</span><span style="color: blue;"> + </span><span style="color: Black;">vy</span><span style="color: blue;">*</span><span style="color: Black;">vy</span><span style="color: black;">)</span><span style="color: blue;"> * </span><span style="color: black;">(</span><span style="color: red;">1</span><span style="color: blue;"> - </span><span style="color: red;">0</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">v</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">sqrt</span><span style="color: black;">(</span><span style="color: Black;">objVx</span><span style="color: blue;">*</span><span style="color: Black;">objVx</span><span style="color: blue;"> + </span><span style="color: Black;">objVy</span><span style="color: blue;">*</span><span style="color: Black;">objVy</span><span style="color: black;">)</span><span style="color: blue;"> * </span><span style="color: black;">(</span><span style="color: red;">1</span><span style="color: blue;"> - </span><span style="color: red;">0</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">// 计算角度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">ball</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">atan2</span><span style="color: black;">(</span><span style="color: Black;">vx</span><span style="color: blue;"> , </span><span style="color: Black;">vy</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">obj</span><span style="color: blue;">.</span><span style="color: Black;">angle</span><span style="color: blue;"> = </span><span style="color: Teal;">Math</span><span style="color: blue;">.</span><span style="color: Black;">atan2</span><span style="color: black;">(</span><span style="color: Black;">objVx</span><span style="color: blue;"> , </span><span style="color: Black;">objVy</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li></ol></div>
<p>坐标旋转的公式：<br />
x1 = Math.cos(angle) * x - Math.sin(angle) * y;<br />
y1 = Math.cos(angle) * y + Math.sin(angle) * x;</p>
<p>反坐标旋转：<br />
x1 = Math.cos(angle) * x + Math.sin(angle) * y;<br />
y1 = Math.cos(angle) * y - Math.sin(angle) * x;</p>
<p>稍作注意就会发现还存在很多问题，与真实桌球还有相当差距，慢慢改善吧，以后改用flash来作或许来得更流畅吧，欢迎大伙多提意见。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=11</wfw:commentRss>
		</item>
		<item>
		<title>[JS小游戏]贪吃蛇+详细注释</title>
		<link>http://cnwander.com/blog/?p=10</link>
		<comments>http://cnwander.com/blog/?p=10#comments</comments>
		<pubDate>Sun, 20 Sep 2009 14:11:39 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=10</guid>
		<description><![CDATA[DEMO: http://www.cnwander.com/demo/snake/
老实说，游戏并不是Javascript的强项，特别是这种画面刷新频率比较高的游戏，还是用AS来得流畅，至少目前来说是这样的。所以我也并没打算在这块进行太深入的研究，写游戏完全是觉得好玩，可以维持对Javascript的学习兴趣。对新手来说，看小游戏代码也是最能激发兴趣的，所以我进行了比较详细的注释，希望对大家有所帮助。
源代码：

// code by CNwander.
// common 
function $(str)&#160;{
&#160; &#160; return&#160;document.getElementById(str);
}
&#160;
function $tag(str,target)&#160;{
&#160; &#160; target = target &#124;&#124; document;
&#160; &#160; return&#160;target.getElementsByTagName(str);
}
&#160;
// global
// const
var&#160;WIDTH = 20, //网格宽度
&#160; &#160; HEIGHT = 20, //网格高度
&#160; &#160; SAY = [&#34;相当不错，虽然说和CNwander还不是一个级别的&#34;,&#34;可以啊，再加点油都可以和CNwander媲美了！&#34;,
&#34;一个字，牛，连CNwander都甘拜下风了&#34;,&#34;差不多行了，别把游戏玩爆了&#34;];
var&#160;len = 3, //蛇的长度
&#160; &#160; speed, //爬行速度
&#160; &#160; gridElems = multiArray(WIDTH,HEIGHT), //单元格对象
&#160; &#160; carrier, //承载对象(食物，障碍，滑板，刹车)
&#160; &#160; snake, //蛇每节的坐标点
&#160; &#160; info, //交互对话
&#160; &#160; btnStart, [...]]]></description>
			<content:encoded><![CDATA[<p>DEMO: <a href="http://www.cnwander.com/demo/snake/" target="_blank">http://www.cnwander.com/demo/snake/</a><br />
老实说，游戏并不是Javascript的强项，特别是这种画面刷新频率比较高的游戏，还是用AS来得流畅，至少目前来说是这样的。所以我也并没打算在这块进行太深入的研究，写游戏完全是觉得好玩，可以维持对Javascript的学习兴趣。对新手来说，看小游戏代码也是最能激发兴趣的，所以我进行了比较详细的注释，希望对大家有所帮助。<br />
源代码：<br />
<span id="more-10"></span></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// code by CNwander.</span></li>
<li><span style="color: #ffa500;">// common </span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;"> $</span><span style="color: black;">(</span><span style="color: Black;">str</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">getElementById</span><span style="color: black;">(</span><span style="color: Black;">str</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;"> $</span><span style="color: Black;">tag</span><span style="color: black;">(</span><span style="color: Black;">str</span><span style="color: blue;">,</span><span style="color: Black;">target</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">target</span><span style="color: blue;"> = </span><span style="color: Black;">target</span><span style="color: blue;"> || </span><span style="color: Teal;">document</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">target</span><span style="color: blue;">.</span><span style="color: Black;">getElementsByTagName</span><span style="color: black;">(</span><span style="color: Black;">str</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: #ffa500;">// global</span></li>
<li><span style="color: #ffa500;">// const</span></li>
<li><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">WIDTH</span><span style="color: blue;"> = </span><span style="color: red;">20</span><span style="color: blue;">, </span><span style="color: #ffa500;">//网格宽度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">HEIGHT</span><span style="color: blue;"> = </span><span style="color: red;">20</span><span style="color: blue;">, </span><span style="color: #ffa500;">//网格高度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">SAY</span><span style="color: blue;"> = </span><span style="color: black;">[</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">相当不错，虽然说和CNwander还不是一个级别的</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">,</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">可以啊，再加点油都可以和CNwander媲美了！</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">,</span></li>
<li><span style="color: #8b0000;">&quot;</span><span style="color: Red;">一个字，牛，连CNwander都甘拜下风了</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">,</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">差不多行了，别把游戏玩爆了</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">len</span><span style="color: blue;"> = </span><span style="color: red;">3</span><span style="color: blue;">, </span><span style="color: #ffa500;">//蛇的长度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">speed</span><span style="color: blue;">, </span><span style="color: #ffa500;">//爬行速度</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">gridElems</span><span style="color: blue;"> = </span><span style="color: Black;">multiArray</span><span style="color: black;">(</span><span style="color: Black;">WIDTH</span><span style="color: blue;">,</span><span style="color: Black;">HEIGHT</span><span style="color: black;">)</span><span style="color: blue;">, </span><span style="color: #ffa500;">//单元格对象</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">carrier</span><span style="color: blue;">, </span><span style="color: #ffa500;">//承载对象(食物，障碍，滑板，刹车)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">snake</span><span style="color: blue;">, </span><span style="color: #ffa500;">//蛇每节的坐标点</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">info</span><span style="color: blue;">, </span><span style="color: #ffa500;">//交互对话</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">, </span><span style="color: #ffa500;">//开始按钮</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">topScore</span><span style="color: blue;"> = </span><span style="color: Black;">len</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">snakeTimer</span><span style="color: blue;">, </span><span style="color: #ffa500;">//蛇行走计时器</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">brakeTimers</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">, </span><span style="color: #ffa500;">//随机刹车</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">skateTimers</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">, </span><span style="color: #ffa500;">//随机滑板</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">directkey</span><span style="color: blue;">; </span><span style="color: #ffa500;">// 方向键值 37-40 左上右下</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">onload</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(){</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">info</span><span style="color: blue;"> = $</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">say</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;"> = $</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">btnStart</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">initGrid</span><span style="color: black;">()</span><span style="color: blue;">; </span><span style="color: #ffa500;">//网格初始化</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">onkeydown</span><span style="color: blue;"> = </span><span style="color: Black;">attachEvents</span><span style="color: blue;">; </span><span style="color: #ffa500;">//绑定方向事件</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">onclick</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">blur</span><span style="color: black;">()</span><span style="color: blue;">; </span><span style="color: #ffa500;">//firefox中必须释放焦点</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">start</span><span style="color: black;">()</span><span style="color: blue;">; </span><span style="color: #ffa500;">//游戏开始</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">setAttribute</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">disabled</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">,</span><span style="color: darkBlue; font-weight:bold">true</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">style</span><span style="color: blue;">.</span><span style="color: Black;">color</span><span style="color: blue;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#aaa</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//开始游戏</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">start</span><span style="color: black;">()</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">len</span><span style="color: blue;"> = </span><span style="color: red;">3</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">speed</span><span style="color: blue;"> = </span><span style="color: red;">10</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">directkey</span><span style="color: blue;"> = </span><span style="color: red;">39</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">carrier</span><span style="color: blue;"> = </span><span style="color: Black;">multiArray</span><span style="color: black;">(</span><span style="color: Black;">WIDTH</span><span style="color: blue;">,</span><span style="color: Black;">HEIGHT</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">snake</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;">&nbsp;</span><span style="color: Teal;">Array</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">clear</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">initSnake</span><span style="color: black;">()</span><span style="color: blue;">; </span><span style="color: #ffa500;">//蛇初始化</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">addObject</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">food</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">walk</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">addRandomBrake</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//创建网格</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">initGrid</span><span style="color: black;">()</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">body</span><span style="color: blue;"> = $</span><span style="color: Black;">tag</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">body</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">table</span><span style="color: blue;"> = </span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">createElement</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">table</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">tbody</span><span style="color: blue;"> = </span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">createElement</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tbody</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">j</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;"> &lt; </span><span style="color: Black;">HEIGHT</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;">++</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span><span style="color: blue;">&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">col</span><span style="color: blue;"> = </span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">createElement</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">tr</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;"> &lt; </span><span style="color: Black;">WIDTH</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span><span style="color: blue;">&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">row</span><span style="color: blue;"> = </span><span style="color: Teal;">document</span><span style="color: blue;">.</span><span style="color: Black;">createElement</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">td</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">gridElems</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">][</span><span style="color: Black;">j</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: Black;">col</span><span style="color: blue;">.</span><span style="color: Black;">appendChild</span><span style="color: black;">(</span><span style="color: Black;">row</span><span style="color: black;">)</span><span style="color: blue;">;&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">tbody</span><span style="color: blue;">.</span><span style="color: Black;">appendChild</span><span style="color: black;">(</span><span style="color: Black;">col</span><span style="color: black;">)</span><span style="color: blue;">;&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">table</span><span style="color: blue;">.</span><span style="color: Black;">appendChild</span><span style="color: black;">(</span><span style="color: Black;">tbody</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; $</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">snakeWrap</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">.</span><span style="color: Black;">appendChild</span><span style="color: black;">(</span><span style="color: Black;">table</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: #ffa500;">//创建蛇</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">initSnake</span><span style="color: black;">()</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">pointer</span><span style="color: blue;"> = </span><span style="color: Black;">randomPointer</span><span style="color: black;">(</span><span style="color: Black;">len</span><span style="color: blue;">-</span><span style="color: red;">1</span><span style="color: blue;">, </span><span style="color: Black;">len</span><span style="color: blue;">-</span><span style="color: red;">1</span><span style="color: blue;">, </span><span style="color: Black;">WIDTH</span><span style="color: #8b0000;">/</span><span style="color: Red;">2);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; for(var i = 0; i &lt; len; i++) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; var x = pointer[0] - i,</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = pointer[1];</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; snake.push([x,y]);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; carrier[x][y] = &quot;cover&quot;;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">添加键盘事件</span></li>
<li><span style="color: Red;">function attachEvents(e) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; e = e || event;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; directkey = Math.abs(e.keyCode - directkey) != 2 &amp;&amp; e.keyCode &gt; 36 &amp;&amp; e.keyCode &lt; 41 </span></li>
<li><span style="color: Red;">? e.keyCode : directkey; </span><span style="color: #8b0000;">//</span><span style="color: Red;">非方向键、反向无效</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; return false;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: Red;">function walk() {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; if(snakeTimer) window.clearInterval(snakeTimer);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; snakeTimer = window.setInterval(step, Math.floor(3000</span><span style="color: #8b0000;">/</span><span style="color: Black;">speed</span><span style="color: black;">)</span><span style="color: blue;">);</span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: darkBlue; font-weight:bold">function</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">step</span><span style="color: black;">()</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//获取目标点</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">headX</span><span style="color: blue;"> = </span><span style="color: Black;">snake</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">][</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">headY</span><span style="color: blue;"> = </span><span style="color: Black;">snake</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">][</span><span style="color: red;">1</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">switch</span><span style="color: black;">(</span><span style="color: Black;">directkey</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;">&nbsp;</span><span style="color: red;">37</span><span style="color: blue;">: </span><span style="color: Black;">headX</span><span style="color: blue;"> -= </span><span style="color: red;">1</span><span style="color: blue;">; </span><span style="color: darkBlue; font-weight:bold">break</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;">&nbsp;</span><span style="color: red;">38</span><span style="color: blue;">: </span><span style="color: Black;">headY</span><span style="color: blue;"> -= </span><span style="color: red;">1</span><span style="color: blue;">; </span><span style="color: darkBlue; font-weight:bold">break</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;">&nbsp;</span><span style="color: red;">39</span><span style="color: blue;">: </span><span style="color: Black;">headX</span><span style="color: blue;"> += </span><span style="color: red;">1</span><span style="color: blue;">; </span><span style="color: darkBlue; font-weight:bold">break</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;">&nbsp;</span><span style="color: red;">40</span><span style="color: blue;">: </span><span style="color: Black;">headY</span><span style="color: blue;"> += </span><span style="color: red;">1</span><span style="color: blue;">; </span><span style="color: darkBlue; font-weight:bold">break</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//碰到边界，阻挡物，则结束游戏</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">headX</span><span style="color: blue;"> &gt;= </span><span style="color: Black;">WIDTH</span><span style="color: blue;"> || </span><span style="color: Black;">headX</span><span style="color: blue;"> &lt; </span><span style="color: red;">0</span><span style="color: blue;"> || </span><span style="color: Black;">headY</span><span style="color: blue;"> &gt;= </span><span style="color: Black;">HEIGHT</span><span style="color: blue;"> || </span><span style="color: Black;">headY</span><span style="color: blue;"> &lt; </span><span style="color: red;">0</span><span style="color: blue;"> || </span></li>
<li><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">block</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;"> || </span><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">cover</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">&nbsp;</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">trace</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">GAME OVER</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">getText</span><span style="color: black;">(</span><span style="color: blue;">$</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">score</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">))</span><span style="color: blue;">*</span><span style="color: red;">1</span><span style="color: blue;"> &lt; </span><span style="color: Black;">len</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">trace</span><span style="color: black;">(</span><span style="color: Black;">len</span><span style="color: blue;">,$</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">score</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">))</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">removeAttribute</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">disabled</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">btnStart</span><span style="color: blue;">.</span><span style="color: Black;">style</span><span style="color: blue;">.</span><span style="color: Black;">color</span><span style="color: blue;"> = </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">#000</span><span style="color: #8b0000;">&quot;</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">clearInterval</span><span style="color: black;">(</span><span style="color: Black;">snakeTimer</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;"> &lt; </span><span style="color: Black;">brakeTimers</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">clearTimeout</span><span style="color: black;">(</span><span style="color: Black;">brakeTimers</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;"> &lt; </span><span style="color: Black;">skateTimers</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">clearTimeout</span><span style="color: black;">(</span><span style="color: Black;">skateTimers</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//加速</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">len</span><span style="color: blue;"> % </span><span style="color: red;">4</span><span style="color: blue;"> == </span><span style="color: red;">0</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">speed</span><span style="color: blue;"> &lt; </span><span style="color: red;">60</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">food</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">speed</span><span style="color: blue;"> += </span><span style="color: red;">5</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">walk</span><span style="color: black;">()</span><span style="color: blue;">;&nbsp; &nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">trace</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">加速！</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//捡到刹车</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">brake</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">speed</span><span style="color: blue;"> = </span><span style="color: red;">5</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">walk</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">trace</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">恭喜！捡到刹车一个。</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//遭遇滑板</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">skate</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">speed</span><span style="color: blue;"> += </span><span style="color: red;">20</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">walk</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">trace</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">遭遇滑板！</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span><span style="color: blue;">&nbsp; &nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//添加阻挡物</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">len</span><span style="color: blue;"> % </span><span style="color: red;">6</span><span style="color: blue;"> == </span><span style="color: red;">0</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">len</span><span style="color: blue;"> &lt; </span><span style="color: red;">60</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">carrier</span><span style="color: black;">[</span><span style="color: Black;">headX</span><span style="color: black;">][</span><span style="color: Black;">headY</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">food</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Black;">addObject</span><span style="color: black;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">block</span><span style="color: #8b0000;">&quot;</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span><span style="color: blue;">&nbsp; &nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: #ffa500;">//对话</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">len</span><span style="color: blue;"> &lt;= </span><span style="color: red;">40</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">len</span><span style="color: blue;"> % </span><span style="color: red;">10</span><span style="color: blue;"> == </span><span style="color: red;">0</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">cheer</span><span style="color: blue;"> = </span><span style="color: Black;">SAY</span><span style="color: black;">[</span><span style="color: Black;">len</span><span style="color: #8b0000;">/</span><span style="color: Red;">10-1];</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; trace(cheer);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; }&nbsp; &nbsp; </span></li>
<li><span style="color: Red;">&nbsp; &nbsp; </span><span style="color: #8b0000;">//</span><span style="color: Red;">吃东西</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; if(carrier[headX][headY] != &quot;food&quot;) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; var lastX = snake[snake.length-1][0],</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastY = snake[snake.length-1][1];</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; carrier[lastX][lastY] = false;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; gridElems[lastX][lastY].className = &quot;&quot;;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; snake.pop();</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; } else {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; carrier[headX][headY] = false;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; trace(&quot;吃到食物&quot;);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; addObject(&quot;food&quot;);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; snake.unshift([headX,headY]);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; carrier[headX][headY] = &quot;cover&quot;;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; gridElems[headX][headY].className = &quot;cover&quot;;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; </span></li>
<li><span style="color: Red;">&nbsp; &nbsp; len = snake.length;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">添加物品</span></li>
<li><span style="color: Red;">function addObject(name) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; var p = randomPointer();</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; carrier[p[0]][p[1]] = name;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; gridElems[p[0]][p[1]].className = name;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">添加随机数量刹车和滑板</span></li>
<li><span style="color: Red;">function addRandomBrake() {</span></li>
<li><span style="color: Red;">&nbsp; var num = randowNum(1,5);</span></li>
<li><span style="color: Red;">&nbsp; for(var i = 0; i &lt; num; i++) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; brakeTimers.push(window.setTimeout(function(){addObject(&quot;brake&quot;)},randowNum(10000,100000)));</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; skateTimers.push(window.setTimeout(function(){addObject(&quot;skate&quot;)},randowNum(5000,100000)));</span></li>
<li><span style="color: Red;">&nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">输出信息</span></li>
<li><span style="color: Red;">function trace(sth,who) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; who = who || info;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; if(document.all) who.innerText = sth;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; else who.textContent = sth;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">获取信息</span></li>
<li><span style="color: Red;">function getText(target) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; if(document.all) return target.innerText;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; else return target.textContent;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">创建二维数组</span></li>
<li><span style="color: Red;">function multiArray(m,n) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; var arr =&nbsp; new Array(n);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; for(var i=0; i&lt;m; i++) </span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; arr[i] = new Array(m);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; return arr;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">清除画面</span></li>
<li><span style="color: Red;">function clear() {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; for(var y = 0; y &lt; gridElems.length; y++) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; for(var x = 0; x &lt; gridElems[y].length; x++) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gridElems[x][y].className = &quot;&quot;;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">产生指定范围随机点</span></li>
<li><span style="color: Red;">function randomPointer(startX,startY,endX,endY) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; startX = startX || 0;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; startY = startY || 0;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; endX = endX || WIDTH;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; endY = endY || HEIGHT;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; var p = [],</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; x = Math.floor(Math.random()*(endX - startX)) + startX,</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; &nbsp; y = Math.floor(Math.random()*(endY - startY)) + startY;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; if(carrier[x][y]) return randomPointer(startX,startY,endX,endY);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; p[0] = x;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; p[1] = y;</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; return p;</span></li>
<li><span style="color: Red;">}</span></li>
<li><span style="color: Red;">&nbsp;</span></li>
<li><span style="color: #8b0000;">//</span><span style="color: Red;">产生随机整数</span></li>
<li><span style="color: Red;">function randowNum(start,end) {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; return Math.floor(Math.random()*(end - start)) + start;</span></li>
<li><span style="color: Red;">}</span></li></ol></div>
<p>Tips:<br />
1、IE: element.innerText = FF: element.textContent；<br />
2、setAttribute(&#8221;cellpadding&#8221;,&#8221;0&#8243;)在IE中无效，正确写法cellPadding (一不小心就犯错了)；<br />
3、FF中，使用绑定在某元素上的键盘事件前，先让它获得焦点，document也不例外，这容易疏忽；<br />
4、在IE中create table element，记得加tbody；<br />
5、想到再来编辑</p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=10</wfw:commentRss>
		</item>
		<item>
		<title>简化JQuery</title>
		<link>http://cnwander.com/blog/?p=6</link>
		<comments>http://cnwander.com/blog/?p=6#comments</comments>
		<pubDate>Thu, 28 May 2009 06:26:00 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[Javascript&amp;JQuery]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=6</guid>
		<description><![CDATA[
&#8220;write less, do more.&#8221; JQuery的出现确实带给了我们太多的惊喜，它引发的是一场变革，把我们从过去那种繁琐和混乱不堪的局面中解救出来，让我们能够有更多精力专注于算法和功能本身。　　但愈发强大的JQuery体积也不再小巧，55k(Minified)的大小虽然不能说很大，但如果用在一些小型项目或网站上，也不算小，那么我们何不根据自己项目特点，简化或改写JQuery呢，Follow me!
JQuery的核心代码：
//不完全一致，但实现手段大致如此
(function(){
&#160; window._$ = window.$;
&#160; var $ = window.$ = function(s)&#160;{
&#160; &#160; return&#160;new $.fn.init(s);
&#160; };
&#160; $.fn = $.prototype = {
&#160; &#160; init: function(s)&#160;{
&#160; &#160; &#160; if(!s)&#160;return this;
&#160; &#160; &#160; if&#160;(s.nodeType) {
&#160; &#160; &#160; &#160; this.e = [];
&#160; &#160; &#160; &#160; this.e.push(s);&#160; //存储获取到的Elements&#160; &#160; &#160;&#160; 
&#160; &#160; &#160; &#160; return&#160;this;
&#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>
<P>&#8220;write less, do more.&#8221; JQuery的出现确实带给了我们太多的惊喜，它引发的是一场变革，把我们从过去那种繁琐和混乱不堪的局面中解救出来，让我们能够有更多精力专注于算法和功能本身。<BR>　　但愈发强大的JQuery体积也不再小巧，55k(Minified)的大小虽然不能说很大，但如果用在一些小型项目或网站上，也不算小，那么我们何不根据自己项目特点，简化或改写JQuery呢，Follow me!</P></p>
<p>JQuery的核心代码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//不完全一致，但实现手段大致如此</span></li>
<li><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(){</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">_</span><span style="color: blue;">$ = </span><span style="color: Teal;">window</span><span style="color: blue;">.$;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> $ = </span><span style="color: Teal;">window</span><span style="color: blue;">.$ = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;"> $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">init</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; $.</span><span style="color: Black;">fn</span><span style="color: blue;"> = $.</span><span style="color: Black;">prototype</span><span style="color: blue;"> = </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">init</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: blue;">.</span><span style="color: Black;">nodeType</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;&nbsp; </span><span style="color: #ffa500;">//存储获取到的Elements&nbsp; &nbsp; &nbsp;&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">typeof</span><span style="color: blue;"> </span><span style="color: Black;">s</span><span style="color: blue;"> == “</span><span style="color: Black;">string</span><span style="color: blue;">”</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> $</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">find</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">find</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: #ffa500;">//根据传入的String，查找DOM</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: #ffa500;">// extend扩展方法</span></li>
<li><span style="color: blue;">&nbsp; $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">extend</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">p</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">p</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!$.</span><span style="color: Black;">fn</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">])</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Black;">fn</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: Black;">p</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">init</span><span style="color: blue;">.</span><span style="color: Black;">prototype</span><span style="color: blue;"> = $.</span><span style="color: Black;">fn</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">})()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">$</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">extend</span><span style="color: black;">({</span></li>
<li><span style="color: blue;">&nbsp; “</span><span style="color: Black;">a</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">){}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; “</span><span style="color: Black;">b</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">){}</span></li>
<li><span style="color: black;">})</span><span style="color: blue;">;</span></li></ol></div>
<p><span id="more-6"></span></p>
<p>以下是我简化的一个版本，供大家参考 (虽说是简化，但只是应用了Jquery这种模式，具体功能都是采用自己的方式去实现)<BR><FONT color=#c0c0c0>你可以转载此文，但请注明出处，谢谢 - wander</FONT><BR></p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// by wander</span></li>
<li><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(){</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">_</span><span style="color: blue;">$ = </span><span style="color: Teal;">window</span><span style="color: blue;">.$;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">eleExpr</span><span style="color: blue;"> =&nbsp; </span><span style="color: #8b0000;">/</span><span style="color: Red;">([#\.a-zA-Z])([^\s]+)</span><span style="color: #8b0000;">/g</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> $ = </span><span style="color: Teal;">window</span><span style="color: blue;">.$ = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;"> $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">init</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">; </span></li>
<li><span style="color: blue;"> $.</span><span style="color: Black;">fn</span><span style="color: blue;"> = $.</span><span style="color: Black;">prototype</span><span style="color: blue;"> = </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Black;">init</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: blue;">.</span><span style="color: Black;">nodeType</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">typeof</span><span style="color: blue;"> </span><span style="color: Black;">s</span><span style="color: blue;"> == “</span><span style="color: Black;">string</span><span style="color: blue;">”</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> $</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">find</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">else</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Black;">find</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">wrap</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> || </span><span style="color: black;">[</span><span style="color: Teal;">document</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">wrap</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">target</span><span style="color: blue;"> = </span><span style="color: Black;">wrap</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">while</span><span style="color: black;">(</span><span style="color: Black;">eleExpr</span><span style="color: blue;">.</span><span style="color: Black;">test</span><span style="color: black;">(</span><span style="color: Black;">s</span><span style="color: black;">))</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">first</span><span style="color: blue;"> = </span><span style="color: Teal;">RegExp</span><span style="color: blue;">.$</span><span style="color: red;">1</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: Black;">content</span><span style="color: blue;"> = </span><span style="color: Teal;">RegExp</span><span style="color: blue;">.$</span><span style="color: red;">2</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">target</span><span style="color: blue;"> = $</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">clean</span><span style="color: black;">(</span><span style="color: Black;">target</span><span style="color: blue;">,</span><span style="color: Black;">content</span><span style="color: blue;">,</span><span style="color: Black;">first</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">target</span><span style="color: blue;"> == </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">result</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">else</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;"> &lt; </span><span style="color: Black;">target</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: Black;">result</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">target</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> = </span><span style="color: Black;">result</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;&nbsp;&nbsp; </span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Black;">clean</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">wrap</span><span style="color: blue;">,</span><span style="color: Black;">content</span><span style="color: blue;">,</span><span style="color: Black;">type</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: Black;">wrap</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">wrap</span><span style="color: blue;"> = </span><span style="color: Black;">wrap</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">instanceof</span><span style="color: blue;"> </span><span style="color: Teal;">Array</span><span style="color: blue;"> ? </span><span style="color: Black;">wrap</span><span style="color: blue;"> : </span><span style="color: black;">[</span><span style="color: Black;">wrap</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;"> </span><span style="color: Teal;">Array</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">wrap</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">temp</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">switch</span><span style="color: black;">(</span><span style="color: Black;">type</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;"> “#”:</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">temp</span><span style="color: blue;"> = </span><span style="color: Black;">wrap</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">getElementById</span><span style="color: black;">(</span><span style="color: Black;">content</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">break</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">case</span><span style="color: blue;"> “.”:</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">temp</span><span style="color: blue;"> = $</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">getElemsByClassName</span><span style="color: black;">(</span><span style="color: Black;">content</span><span style="color: blue;">,</span><span style="color: Black;">wrap</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">break</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">default</span><span style="color: blue;">:</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">temp</span><span style="color: blue;"> = </span><span style="color: Black;">wrap</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">getElementsByTagName</span><span style="color: black;">(</span><span style="color: Black;">type</span><span style="color: blue;">+</span><span style="color: Black;">content</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">temp</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">temp</span><span style="color: blue;"> = </span><span style="color: Black;">temp</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> ? </span><span style="color: Black;">temp</span><span style="color: blue;"> : </span><span style="color: black;">[</span><span style="color: Black;">temp</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">i</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;"> &lt; </span><span style="color: Black;">temp</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">temp</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">nodeType</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">temp</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">])</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">result</span><span style="color: blue;"> = </span><span style="color: Black;">result</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> &lt;= </span><span style="color: red;">0</span><span style="color: blue;"> ? </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: blue;"> : </span><span style="color: Black;">result</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Black;">getElemsByClassName</span><span style="color: blue;">: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">classname</span><span style="color: blue;">,</span><span style="color: Black;">elem</span><span style="color: blue;">,</span><span style="color: Black;">tag</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">tag</span><span style="color: blue;"> = </span><span style="color: Black;">tag</span><span style="color: blue;"> || “*”;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">elem</span><span style="color: blue;"> = </span><span style="color: Black;">elem</span><span style="color: blue;"> || </span><span style="color: Teal;">document</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">elem</span><span style="color: blue;"> = </span><span style="color: Black;">elem</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">instanceof</span><span style="color: blue;"> </span><span style="color: Teal;">Array</span><span style="color: blue;"> ? </span><span style="color: Black;">elem</span><span style="color: blue;"> : </span><span style="color: black;">[</span><span style="color: Black;">elem</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;"> </span><span style="color: Teal;">Array</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">elem</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">allElems</span><span style="color: blue;"> = </span><span style="color: Black;">elem</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">getElementsByTagName</span><span style="color: black;">(</span><span style="color: Black;">tag</span><span style="color: black;">)</span><span style="color: blue;"> || </span><span style="color: Black;">elem</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">all</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">oElem</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;">=</span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">&lt;</span><span style="color: Black;">allElems</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">i</span><span style="color: blue;">++</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">oElem</span><span style="color: blue;"> = </span><span style="color: Black;">allElems</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">list</span><span style="color: blue;"> = </span><span style="color: Black;">oElem</span><span style="color: blue;">.</span><span style="color: Black;">className</span><span style="color: blue;">.</span><span style="color: Black;">split</span><span style="color: black;">(</span><span style="color: blue;">” “</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">j</span><span style="color: blue;">=</span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;">&lt;</span><span style="color: Black;">list</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;">++</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">list</span><span style="color: black;">[</span><span style="color: Black;">j</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: Black;">classname</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;">.</span><span style="color: Black;">push</span><span style="color: black;">(</span><span style="color: Black;">oElem</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">result</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> &lt;= </span><span style="color: red;">0</span><span style="color: blue;"> ? </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: blue;"> : </span><span style="color: Black;">result</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;"> $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">extend</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">p</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">p</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!$.</span><span style="color: Black;">fn</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">])</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; $.</span><span style="color: Black;">fn</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: Black;">p</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;"> $.</span><span style="color: Black;">fn</span><span style="color: blue;">.</span><span style="color: Black;">init</span><span style="color: blue;">.</span><span style="color: Black;">prototype</span><span style="color: blue;"> = $.</span><span style="color: Black;">fn</span><span style="color: blue;">;</span></li>
<li><span style="color: black;">})()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">$.</span><span style="color: Black;">ajax</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">url</span><span style="color: blue;">,</span><span style="color: Black;">postStr</span><span style="color: blue;">,</span><span style="color: Black;">lastfunc</span><span style="color: blue;">,</span><span style="color: Black;">errfunc</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">ajax</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">false</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">XMLHttpRequest</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: Black;">ajax</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">new</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">XMLHttpRequest</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">overrideMimeType</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">overrideMimeType</span><span style="color: black;">(</span><span style="color: blue;">”</span><span style="color: Black;">text</span><span style="color: #8b0000;">/</span><span style="color: Red;">xml”);</span></li>
<li><span style="color: Red;">&nbsp; }</span></li>
<li><span style="color: Red;"> }</span></li>
<li><span style="color: Red;"> else if (window.ActiveXObject) {</span></li>
<li><span style="color: Red;">&nbsp; try {</span></li>
<li><span style="color: Red;">&nbsp;&nbsp; ajax = new ActiveXObject(”Msxml2.XMLHTTP”);</span></li>
<li><span style="color: Red;">&nbsp; }</span></li>
<li><span style="color: Red;">&nbsp; catch (e) {</span></li>
<li><span style="color: Red;">&nbsp;&nbsp; try {</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; &nbsp; ajax = new ActiveXObject(”Microsoft.XMLHTTP”);</span></li>
<li><span style="color: Red;">&nbsp; &nbsp; }</span></li>
<li><span style="color: Red;">&nbsp;&nbsp; catch (e) {</span></li>
<li><span style="color: Red;">&nbsp;&nbsp; }</span></li>
<li><span style="color: Red;">&nbsp; }</span></li>
<li><span style="color: Red;"> }</span></li>
<li><span style="color: Red;"> if (!ajax) {</span></li>
<li><span style="color: Red;">&nbsp; if(errfunc) errfunc();</span></li>
<li><span style="color: Red;">&nbsp; return false;</span></li>
<li><span style="color: Red;"> }</span></li>
<li><span style="color: Red;"> ajax.open(”POST”, url, true);</span></li>
<li><span style="color: Red;"> ajax.setRequestHeader(”Content-Type”,”application</span><span style="color: #8b0000;">/</span><span style="color: Black;">x</span><span style="color: blue;">-</span><span style="color: Black;">www</span><span style="color: blue;">-</span><span style="color: Black;">form</span><span style="color: blue;">-</span><span style="color: Black;">urlencoded</span><span style="color: blue;">”</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">send</span><span style="color: black;">(</span><span style="color: Black;">postStr</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">onreadystatechange</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">()</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">readyState</span><span style="color: blue;"> == </span><span style="color: red;">4</span><span style="color: blue;"> &amp;&amp; </span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">status</span><span style="color: blue;"> == </span><span style="color: red;">200</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">lastfunc</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">lastfunc</span><span style="color: black;">(</span><span style="color: Black;">ajax</span><span style="color: blue;">.</span><span style="color: Black;">responseText</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">&nbsp; </span></li>
<li><span style="color: black;">}</span></li>
<li><span style="color: blue;">$</span><span style="color: black;">()</span><span style="color: blue;">.</span><span style="color: Black;">extend</span><span style="color: black;">({</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">html</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">val</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">val</span><span style="color: blue;"> == </span><span style="color: Black;">undefined</span><span style="color: blue;"> ?</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;"> ?</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">innerHTML</span><span style="color: blue;"> :</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">null</span><span style="color: black;">)</span><span style="color: blue;"> :</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">innerHTML</span><span style="color: blue;"> = </span><span style="color: Black;">val</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">empty</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">()</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">i</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">o</span><span style="color: blue;"> = </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">o</span><span style="color: blue;">.</span><span style="color: Black;">innerHTML</span><span style="color: blue;"> = ”;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">css</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">()</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: blue;"> || </span><span style="color: Black;">arguments</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> &lt;= </span><span style="color: red;">0</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">arguments</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> == </span><span style="color: red;">1</span><span style="color: blue;"> &amp;&amp; </span><span style="color: darkBlue; font-weight:bold">typeof</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;"> == “</span><span style="color: Black;">string</span><span style="color: blue;">”</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">toLowerCase</span><span style="color: black;">()</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">currentStyle</span><span style="color: blue;"> ?</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">currentStyle</span><span style="color: black;">[</span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]]</span><span style="color: blue;"> :</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: Teal;">window</span><span style="color: blue;">.</span><span style="color: Black;">getComputedStyle</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">, “”</span><span style="color: black;">)</span><span style="color: blue;">.</span><span style="color: Black;">getPropertyValue</span><span style="color: black;">(</span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">replace</span><span style="color: black;">(</span><span style="color: #8b0000;">/</span><span style="color: Red;">([A-Z])</span><span style="color: #8b0000;">/g</span><span style="color: blue;">, “-$</span><span style="color: red;">1</span><span style="color: blue;">″</span><span style="color: black;">))</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">else</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">arguments</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;"> &gt;= </span><span style="color: red;">2</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">i</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">style</span><span style="color: black;">[</span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]]</span><span style="color: blue;"> = </span><span style="color: Black;">arguments</span><span style="color: black;">[</span><span style="color: red;">1</span><span style="color: black;">]</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">hasClass</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">name</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">allClass</span><span style="color: blue;"> =&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">className</span><span style="color: blue;">.</span><span style="color: Black;">split</span><span style="color: black;">(</span><span style="color: blue;">” “</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: Black;">allClass</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">allClass</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;"> == </span><span style="color: Black;">name</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">true</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">false</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">addClass</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">name</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">i</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">nodeType</span><span style="color: blue;"> == </span><span style="color: red;">1</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">className</span><span style="color: blue;"> += ” “+</span><span style="color: Black;">name</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">removeClass</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">name</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: blue;">&nbsp;</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">i</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">temp</span><span style="color: blue;"> = </span><span style="color: black;">[]</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: Black;">allClass</span><span style="color: blue;"> =&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">className</span><span style="color: blue;">.</span><span style="color: Black;">split</span><span style="color: black;">(</span><span style="color: blue;">” “</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">j</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">, </span><span style="color: Black;">k</span><span style="color: blue;"> = </span><span style="color: red;">0</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;"> &lt; </span><span style="color: Black;">allClass</span><span style="color: blue;">.</span><span style="color: Black;">length</span><span style="color: blue;">; </span><span style="color: Black;">j</span><span style="color: blue;">++</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: Black;">allClass</span><span style="color: black;">[</span><span style="color: Black;">j</span><span style="color: black;">]</span><span style="color: blue;"> != </span><span style="color: Black;">name</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; &nbsp; </span><span style="color: Black;">temp</span><span style="color: black;">[</span><span style="color: Black;">k</span><span style="color: blue;">++</span><span style="color: black;">]</span><span style="color: blue;"> = </span><span style="color: Black;">allClass</span><span style="color: black;">[</span><span style="color: Black;">j</span><span style="color: black;">]</span><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp;&nbsp; </span><span style="color: black;">}</span><span style="color: blue;">&nbsp;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: Black;">allClass</span><span style="color: blue;"> = </span><span style="color: Black;">temp</span><span style="color: blue;">.</span><span style="color: Black;">join</span><span style="color: black;">(</span><span style="color: blue;">” “</span><span style="color: black;">)</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; &nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">i</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">className</span><span style="color: blue;"> = </span><span style="color: Black;">allClass</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">, </span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">mousedown</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">callback</span><span style="color: black;">){</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;">&nbsp;</span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">onmousedown</span><span style="color: blue;"> = </span><span style="color: Black;">callback</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp;&nbsp; </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span></li>
<li><span style="color: blue;">&nbsp; </span><span style="color: black;">}</span></li>
<li><span style="color: blue;">&nbsp;</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">mouseover</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">callback</span><span style="color: black;">){</span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">onmouseover</span><span style="color: blue;"> = </span><span style="color: Black;">callback</span><span style="color: black;">}</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: black;">}</span><span style="color: blue;">,</span></li>
<li><span style="color: blue;"> ”</span><span style="color: Black;">mouseout</span><span style="color: blue;">”: </span><span style="color: darkBlue; font-weight:bold">function</span><span style="color: black;">(</span><span style="color: Black;">callback</span><span style="color: black;">){</span><span style="color: darkBlue; font-weight:bold">if</span><span style="color: black;">(</span><span style="color: blue;">!</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;">&nbsp;</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">;</span><span style="color: darkBlue; font-weight:bold">for</span><span style="color: black;">(</span><span style="color: darkBlue; font-weight:bold">var</span><span style="color: blue;"> </span><span style="color: Black;">key</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">in</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">)</span><span style="color: blue;"> </span><span style="color: black;">{</span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: blue;">.</span><span style="color: Black;">e</span><span style="color: black;">[</span><span style="color: Black;">key</span><span style="color: black;">]</span><span style="color: blue;">.</span><span style="color: Black;">onmouseout</span><span style="color: blue;"> = </span><span style="color: Black;">callback</span><span style="color: black;">}</span><span style="color: darkBlue; font-weight:bold">return</span><span style="color: blue;"> </span><span style="color: darkBlue; font-weight:bold">this</span><span style="color: black;">}</span></li>
<li><span style="color: black;">})</span><span style="color: blue;">;</span></li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=6</wfw:commentRss>
		</item>
		<item>
		<title>夜·北京</title>
		<link>http://cnwander.com/blog/?p=3</link>
		<comments>http://cnwander.com/blog/?p=3#comments</comments>
		<pubDate>Thu, 28 May 2009 04:18:19 +0000</pubDate>
		<dc:creator>cnwander</dc:creator>
		
		<category><![CDATA[摄影&amp;设计]]></category>

		<category><![CDATA[摄影]]></category>

		<guid isPermaLink="false">http://cnwander.com/blog/?p=3</guid>
		<description><![CDATA[夜上海的灯红酒绿，不夜城广州，夜幕降临的北京，又是怎样一幅景象？周日傍晚，拿起刚入手不久的相机，趁着这股新鲜劲儿，我打算好好感受下夜幕下的北京。人行天桥上，跟很多我去过的其它城市一样，随处可见的地摊，熙熙攘攘的人群。橘红色的灯光下，有人唱歌，有人拉二胡，以及真真假假金融危机下愈来愈多的乞讨者。
来到后海，这里又完全是另外一幅景象，广场上，有人在跳舞，有人踢毽子，也有人在展示着自己的才艺，酒吧街，霓虹耀眼，有人唱着舞动着，放纵着，宣泄着，也有人靠湖边安静地喝着酒，似乎这一切都与他无关，一切的一切，似乎热门非凡，又感觉虚无飘渺，只有一声声“冰糖葫芦儿”最为真实……
450D + A16 ，无三角架，大部分图片只调大小，部分有调对比度，敬请指教。











]]></description>
			<content:encoded><![CDATA[<p>夜上海的灯红酒绿，不夜城广州，夜幕降临的北京，又是怎样一幅景象？周日傍晚，拿起刚入手不久的相机，趁着这股新鲜劲儿，我打算好好感受下夜幕下的北京。人行天桥上，跟很多我去过的其它城市一样，随处可见的地摊，熙熙攘攘的人群。橘红色的灯光下，有人唱歌，有人拉二胡，以及真真假假金融危机下愈来愈多的乞讨者。<br />
来到后海，这里又完全是另外一幅景象，广场上，有人在跳舞，有人踢毽子，也有人在展示着自己的才艺，酒吧街，霓虹耀眼，有人唱着舞动着，放纵着，宣泄着，也有人靠湖边安静地喝着酒，似乎这一切都与他无关，一切的一切，似乎热门非凡，又感觉虚无飘渺，只有一声声“冰糖葫芦儿”最为真实……<br />
450D + A16 ，无三角架，大部分图片只调大小，部分有调对比度，敬请指教。</p>
<p><img src="http://cnwander.com/upload/images/photo090527007.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527006.jpg" alt="夜－北京" /><br />
<span id="more-3"></span><br />
<img src="http://cnwander.com/upload/images/photo090527002.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527003.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527004.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527005.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527008.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527009.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527010.jpg" alt="夜－北京" /></p>
<p><img src="http://cnwander.com/upload/images/photo090527001.jpg" alt="夜－北京" /></p>
]]></content:encoded>
			<wfw:commentRss>http://cnwander.com/blog/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
	</channel>
</rss>

