﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-KiMoGiGi 技术文集-随笔分类-JavaScript</title><link>http://www.cnitblog.com/seeyeah/category/3170.html</link><description>不在乎选择什么，而在乎坚持多久……</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 15:20:03 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 15:20:03 GMT</pubDate><ttl>60</ttl><item><title>【原】Json对象格式化字符串输出</title><link>http://www.cnitblog.com/seeyeah/archive/2009/09/29/61618.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 28 Sep 2009 16:44:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2009/09/29/61618.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/61618.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2009/09/29/61618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/61618.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/61618.html</trackback:ping><description><![CDATA[函数的主要功能是：传入一个Json对象（为了节省空间，一般请求返回的Json都是没有格式化的，可读性不好），可以输出格式化字符串，提高Json可读性。<br>虽然很多IDE或工具已经实现，但有时做简单测试时，格式化还是需要的。<br><br>假设，JS调用（假设界面有一个id为result的textarea）<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;json&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Id:&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Test</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;Date:&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date(),<br>&nbsp;&nbsp;&nbsp;&nbsp;Subjects:<br>&nbsp;&nbsp;&nbsp;&nbsp;[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">语文</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">数学</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">英语</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marks:&nbsp;[</span><span style="color: #000000;">90</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">83</span><span style="color: #000000;">,&nbsp;{&nbsp;Test:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">aaa</span><span style="color: #000000;">"</span><span style="color: #000000;">}]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;],<br>&nbsp;&nbsp;&nbsp;&nbsp;Company:<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Microsoft</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">USA</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;Test:&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br>};<br></span><span style="color: #008000;">//</span><span style="color: #008000;">-------------测试</span><span style="color: #008000;"><br>//</span><span style="color: #008000;">格式化Json字符串</span><span style="color: #008000;"><br></span><span style="color: #000000;">document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">result</span><span style="color: #000000;">"</span><span style="color: #000000;">).value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JsonUti.convertToString(json);<br></span></div>
<br>界面输出<br><br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/seeyeah/s1.jpg"><br>实现代码如下:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;JsonUti&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">定义换行符</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">定义制表符</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\t</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">转换String</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertToString:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(obj)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;JsonUti.__writeObj(obj,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">写对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__writeObj:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(obj&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">层次（基数为1）</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;isInArray)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此对象是否在一个集合内</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果为空，直接输出null</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">null</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">为普通类型，直接输出值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Number&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Date&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Boolean)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;v&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;obj.toString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;tab&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;isInArray&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;JsonUti.__repeatStr(JsonUti.t,&nbsp;level&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;:&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;String&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Date)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">时间格式化只是单纯输出字符串，而不是Date对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;tab&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">\</span><span style="color: #000000;">""</span><span style="color: #000000;">&nbsp;+&nbsp;v&nbsp;+&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\</span><span style="color: #000000;">""</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Boolean)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;tab&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;v.toLowerCase();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;tab&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;(v);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">写Json对象，缓存字符串</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;currentObjStrings&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历属性</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;name&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;obj)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;temp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">格式化Tab</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;paddingTab&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JsonUti.__repeatStr(JsonUti.t,&nbsp;level);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(paddingTab);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">写出属性名</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;val&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;obj[name];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(val&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(</span><span style="color: #000000;">"</span><span style="color: #000000;">null</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;val.constructor;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(c&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Array)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果为集合，循环内部对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(JsonUti.n&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;paddingTab&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;levelUp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;level&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">层级+2</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;tempArrValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">集合元素相关字符串缓存片段</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;val.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">递归写对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempArrValue.push(JsonUti.__writeObj(val[i],&nbsp;levelUp,&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(tempArrValue.join(</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.n));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(JsonUti.n&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;paddingTab&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">]</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(c&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Function)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(</span><span style="color: #000000;">"</span><span style="color: #000000;">[Function]</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">递归写对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.push(JsonUti.__writeObj(val,&nbsp;level&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">加入当前对象&#8220;属性&#8221;字符串</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentObjStrings.push(temp.join(</span><span style="color: #000000;">""</span><span style="color: #000000;">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(level&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">isInArray&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;JsonUti.n&nbsp;:&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果Json对象是内部，就要换行格式化</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.__repeatStr(JsonUti.t,&nbsp;level&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">{</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">加层次Tab格式化</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;currentObjStrings.join(</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.n)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">串联所有属性值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.n&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;JsonUti.__repeatStr(JsonUti.t,&nbsp;level&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">}</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">封闭对象</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__isArray:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(obj)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;obj.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Array;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__repeatStr:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(str,&nbsp;times)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;newStr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(times&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;times;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newStr.push(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;newStr.join(</span><span style="color: #000000;">""</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;<br></span></div>
<br>实例下载：<a  href="http://www.cnitblog.com/Files/seeyeah/JsonToString.rar" title="JsonToString.rar">JsonToString.rar</a><br><img src ="http://www.cnitblog.com/seeyeah/aggbug/61618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2009-09-29 00:44 <a href="http://www.cnitblog.com/seeyeah/archive/2009/09/29/61618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript stack overflow</title><link>http://www.cnitblog.com/seeyeah/archive/2008/09/02/48653.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Tue, 02 Sep 2008 15:49:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/09/02/48653.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/48653.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/09/02/48653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/48653.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/48653.html</trackback:ping><description><![CDATA[摘至：<a href="http://weblogs.asp.net/bleroy/archive/2007/10/18/javascript-stack-overflow.aspx">http://weblogs.asp.net/bleroy/archive/2007/10/18/javascript-stack-overflow.aspx</a><br>
<hr>
<p>Here's one that some of you may have seen before, but I thought I'd post it to save some time to those who didn't.</p>
<p>Today we were trying to debug some client-side code and we needed to quickly wire the click event of a button. So we did this, without thinking too hard:</p>
<pre class=code><span style="COLOR: rgb(0,0,255)">&lt;!</span><span style="COLOR: rgb(163,21,21)">DOCTYPE</span> <span style="COLOR: rgb(255,0,0)">html</span> <span style="COLOR: rgb(255,0,0)">PUBLIC</span> <span style="COLOR: rgb(0,0,255)">"-//W3C//DTD XHTML 1.0 Transitional//EN"<br>    </span><span style="COLOR: rgb(0,0,255)">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;</span><span style="COLOR: rgb(163,21,21)">html</span> <span style="COLOR: rgb(255,0,0)">xmlns</span><span style="COLOR: rgb(0,0,255)">="http://www.w3.org/1999/xhtml"&gt;
&lt;</span><span style="COLOR: rgb(163,21,21)">head</span><span style="COLOR: rgb(0,0,255)">&gt;
</span>    <span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(163,21,21)">title</span><span style="COLOR: rgb(0,0,255)">&gt;</span>Stack overflow<span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(163,21,21)">title</span><span style="COLOR: rgb(0,0,255)">&gt;
</span>    <span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(163,21,21)">script</span> <span style="COLOR: rgb(255,0,0)">type</span><span style="COLOR: rgb(0,0,255)">="text/javascript"&gt;
</span>    <span style="COLOR: rgb(0,0,255)">function</span> onclick() {
<span style="COLOR: rgb(0,128,0)">// do stuff
</span>    }
<span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(163,21,21)">script</span><span style="COLOR: rgb(0,0,255)">&gt;
&lt;/</span><span style="COLOR: rgb(163,21,21)">head</span><span style="COLOR: rgb(0,0,255)">&gt;
&lt;</span><span style="COLOR: rgb(163,21,21)">body</span><span style="COLOR: rgb(0,0,255)">&gt;
</span>    <span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(163,21,21)">div</span><span style="COLOR: rgb(0,0,255)">&gt;
</span>        <span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(163,21,21)">input</span> <span style="COLOR: rgb(255,0,0)">type</span><span style="COLOR: rgb(0,0,255)">="button"</span> <span style="COLOR: rgb(255,0,0)">value</span><span style="COLOR: rgb(0,0,255)">="Click me"</span> <span style="COLOR: rgb(255,0,0)">onclick</span><span style="COLOR: rgb(0,0,255)">="onclick();"</span> <span style="COLOR: rgb(0,0,255)">/&gt;
</span>    <span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(163,21,21)">div</span><span style="COLOR: rgb(0,0,255)">&gt;
&lt;/</span><span style="COLOR: rgb(163,21,21)">body</span><span style="COLOR: rgb(0,0,255)">&gt;
&lt;/</span><span style="COLOR: rgb(163,21,21)">html</span><span style="COLOR: rgb(0,0,255)">&gt;
</span></pre>
<a href="http://11011.net/software/vspaste"></a>
<p>Can you spot the stack overflow? We were so focused on the "do stuff" part that we didn't see it at first, thinking it came from there. But of course, it just comes from <span style="COLOR: rgb(255,0,0)">onclick</span><span style="COLOR: rgb(0,0,255)">="onclick();"</span>. When JavaScript resolves the name "onclick", it looks first on the current context before it goes up the scope chain and finds our global function (which it never does). The current context here is the input element, which happens to have an "onclick" attribute, which executes "onclick", etc. Crash.</p>
<p>So the valuable lesson we've learned here is to adopt a naming convention for our event handlers that can't conflict with the name of the event. I usually choose elementIdOnEventName. For example here if the input's id is button1, we'd go with button1OnClick.</p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/48653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-09-02 23:49 <a href="http://www.cnitblog.com/seeyeah/archive/2008/09/02/48653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript多线程编程简介</title><link>http://www.cnitblog.com/seeyeah/archive/2008/08/14/48001.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 14 Aug 2008 15:06:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/08/14/48001.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/48001.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/08/14/48001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/48001.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/48001.html</trackback:ping><description><![CDATA[摘至：<a href="http://www.infoq.com/cn/articles/js_multithread">http://www.infoq.com/cn/articles/js_multithread</a><br>
<hr>
<p>虽然有越来越多的网站在应用AJAX技术进行开发，但是构建一个复杂的AJAX应用仍然是一个难题。造成这些困难的主要原因是什么呢？是与服务器的异步通信问题？还是GUI程序设计问题呢？通常这两项工作都是由桌面程序来完成的，那究竟为何开发一个可以实现同样功能的AJAX应用就这么困难呢？</p>
<h3>AJAX 开发中的难题</h3>
<p>让我们通过一个简单的例子来认识这个问题。假设你要建立一个树形结构的公告栏系统(BBS)，它可以根据用户请求与服务器进行交互，动态加载每篇文章的信息，而不是一次性从服务器载入所有文章信息。每篇文章有四个相关属性：系统中可以作为唯一标识的ID、发贴人姓名、文章内容以及包含其所有子文章ID的数组信息。首先假定有一个名为getArticle()的函数可以加载一篇文章信息。该函数接收的参数是要加载文章的ID，通过它可从服务器获取文章信息。它返回的对象包含与文章相关的四条属性：id，name，content和children。例程如下：</p>
<pre>function ( id ) {<br>     var a = getArticle(id);<br>     document.writeln(a.name + "<br>" + a.content);<br> } </pre>
<p>然而你也许会注意到，重复用同一个文章ID调用此函数，需要与服务器之间进行反复且无益的通信。想要解决这个问题，可以考虑使用函数 getArticleWithCache()，它相当于一个带有缓存能力的getArticle()。在这个例子中，getArticle()返回的数据只是作为一个全局变量被保存下来：</p>
<pre>var cache = {};<br> function getArticleWithCache ( id ) {<br>     if ( !cache[id] ) {<br>         cache[id] = getArticle(id);<br>     }<br>     return cache[id];<br> } </pre>
<p>现在已将读入的文章缓存起来，让我们再来考虑一下函数backgroundLoad()，它应用我们上面提到的缓存机制加载所有文章信息。其用途是，当读者在阅读某篇文章时，从后台预加载它所有子文章。因为文章数据是树状结构的，所以很容易写一个递归的算法来遍历树并且加载所有的文章：</p>
<pre>function backgroundLoad ( ids ) {<br>     for ( var i=0; i &lt; ids.length; i++ ) {<br>         var a = getArticleWithCache(ids[i]);<br>         backgroundLoad(a.children);<br>     }<br> } </pre>
<p>backgroundLoad ()函数接收一个ID数组作为参数，然后通过每个ID调用前面定义过的getArticldWithCache()方法，这样就把每个ID对应的文章缓存起来。之后再通过已加载文章的子文章ID数组递归调用backgroundLoad()方法，如此整个文章树就被缓存起来。</p>
<p>到目前为止，一切似乎看起来都很完美。然而，只要你有过开发AJAX应用的经验，你就应该知晓这种幼稚的实现方法根本不会成功，这个例子成立的基础是默认 getArticle()用的是同步通信。可是，作为一条基本原则，JavaScript要求在与服务器进行交互时要用异步通信，因为它是单线程的。就简单性而言，把每一件事情（包括GUI事件和渲染）都放在一个线程里来处理是一个很好的程序模型，因为这样就无需再考虑线程同步这些复杂问题。另一方面，他也暴露了应用开发中的一个严重问题，单线程环境看起来对用户请求响应迅速，但是当线程忙于处理其它事情时(比如说调用getArticle())，就不能对用户的鼠标点击和键盘操作做出响应。 </p>
<p>如果在这个单线程环境里进行同步通信会发生什么事情呢？同步通信会中断浏览器的执行直至获得通信结果。在等待通信结果的过程中，由于服务器的调用还没有完成，线程会停止响应用户并保持锁定状态直到调用返回。因为这个原因，当浏览器在等待服务器响应时它不能对用户行为作出响应，所以看起来像是冻结了。当执行 getArticleWithCache()和backgroundLoad()会有同样的问题，因为它们都是基于getArticle()函数的。由于下载所有的文章可能会耗费很可观的一段时间，因此对于backgroundLoad()函数来说，浏览器在此段时间内的冻结就是一个很严重的问题——既然浏览器都已经冻结，当用户正在阅读文章时就不可能首先去执行后台预加载数据，如果这样做连当前的文章都没办法读。</p>
<p>如上所述，既然同步通信在使用中会造成如此严重的问题，JavaScript就把异步通信作为一条基本原则。因此，我们可以基于异步通信改写上面的程序。 JavaScript要求以一种事件驱动的程序设计方式来写异步通信程序。在很多场合中，你都必须指定一个回调程序，一旦收到通信响应，这个函数就会被调用。例如，上面定义的getArticleWithCache()可以写成这样：</p>
<pre>var cache = {};<br> function getArticleWithCache ( id, callback ) {<br>     if ( !cache[id] ) {<br>         callback(cache[id]);<br>     } else {<br>         getArticle(id, function( a ){<br>             cache[id] = a;<br>             callback(a);<br>         });<br>     }<br> } </pre>
<p>这个程序也在内部调用了getArticle()函数。然而需要注意的是，为异步通信设计的这版getArticle()函数要接收一个函数作为第二个参数。当调用这个getArticle()函数时，与从前一样要给服务器发送一个请求，不同的是，现在函数会迅速返回而非等待服务器的响应。这意味着，当执行权交回给调用程序时，还没有得到服务器的响应。如此一来，线程就可以去执行其它任务直至获得服务器响应，并在此时调用回调函数。一旦得到服务器响应， getArticle()的第二个参数作为预先定义的回调函数就要被调用，服务器的返回值即为其参数。同样的，getArticleWithCache ()也要做些改变，定义一个回调参数作为其第二个参数。这个回调函数将在被传给getArticle()的回调函数中调用，因而它可以在服务器通信结束后被执行。</p>
<p>单是上面这些改动你可能已经认为相当复杂了，但是对backgroundLoad()函数做得改动将会更复杂，它也要被改写成可以处理回调函数的形式：</p>
<pre>function backgroundLoad ( ids, callback ) {<br>     var i = 0;<br>     function l ( ) {<br>         if ( i &lt; ids.length ) {<br>             getArticleWithCache(ids[i++], function( a ){<br>                 backgroundLoad(a.children, l);<br>             });<br>         } else {<br>             callback();<br>         }<br>     }<br>     l();<br> } </pre>
<p>改动后的backgroundLoad()函数看上去和我们以前的那个函数已经相去甚远，不过他们所实现的功能并无二致。这意味着这两个函数都接受ID数组作为参数，对于数组里的每个元素都要调用getArticleWithCache()，再应用已经获得子文章ID递归调用backgroundLoad ()。不过同样是对数组的循环访问，新函数中的就不太好辨认了，以前的程序中是用一个for循环语句完成的。为什么实现同样功能的两套函数是如此的大相径庭呢？</p>
<p>这个差异源于一个事实：任何函数在遇到有需要同服务器进行通信情况后，都必须立刻返回，例如getArticleWithCache()。除非原来的函数不在执行当中，否则应当接受服务器响应的回调函数都不能被调用。对于JavaScript，在循环过程中中断程序并在稍后从这个断点继续开始执行程序是不可能的，例如一个for语句。因此，本例利用递归传递回调函数实现循环结构而非一个传统循环语句。对那些熟悉连续传送风格(CPS)的人来说，这就是一个 CPS的手动实现，因为不能使用循环语法，所以即便如前面提到的遍历树那么简单的程序也得写得很复杂。与事件驱动程序设计相关的问题是<a href="http://www.cis.upenn.edu/~stevez/papers/LZ04a.pdf"><u><font color=#0000ff>控制流问题</font></u></a>：循环和其它控制流表达式可能比较难理解。</p>
<p>这里还有另外一个问题：如果你把一个没有应用异步通信的函数转换为一个使用异步通信的函数，那么重写的函数将需要一个回调函数作为新增参数，这为已经存在的APIs造成了很大问题，因为内在的改变没有把影响限于内部，而是导致整体混乱的APIs以及API的其它使用者的改变。</p>
<p>造成这些问题目的根本原因是什么呢？没错，正是JavaScript单线程机制导致了这些问题。在单线程里执行异步通信需要事件驱动程序设计和复杂的语句。如果当程序在等待服务器的响应时，有另外一个线程可以来处理用户请求，那么上述复杂技术就不需要了。</p>
<h3>试试多线程编程</h3>
<p>让我来介绍一下Concurrent.Thread，它是一个允许JavaScript进行多线程编程的库，应用它可以大大缓解上文提及的在AJAX开发中与异步通信相关的困难。这是一个用JavaScript写成的免费的软件库，使用它的前提是遵守Mozilla Public License和GNU General Public License这两个协议。你可以从<a href="http://jsthread.sourceforge.net/"><u><font color=#0000ff>他们的网站 </font></u></a>下载源代码。</p>
<p>马上来下载和使用源码吧！假定你已经将下载的源码保存到一个名为Concurrent.Thread.js的文件夹里，在进行任何操作之前，先运行如下程序，这是一个很简单的功能实现：</p>
<pre><code>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br> &lt;script type="text/javascript"&gt;<br>     Concurrent.Thread.create(function(){<br>         var i = 0;<br>         while ( 1 ) {<br>             document.body.innerHTML += i++ + "&lt;br&gt;";<br>         }<br>     });<br> &lt;/script&gt;</code></pre>
<p>执行这个程序将会顺序显示从0开始的数字，它们一个接一个出现，你可以滚屏来看它。现在让我们来仔细研究一下代码，他应用while(1)条件制造了一个不会中止的循环，通常情况下，象这样不断使用一个并且是唯一一个线程的JavaScript程序会导致浏览器看起来象冻结了一样，自然也就不会允许你滚屏。那么为什么上面的这段程序允许你这么做呢？关键之处在于while(1)上面的那条Concurrent.Thread.create()语句，这是这个库提供的一个方法，它可以创建一个新线程。被当做参数传入的函数在这个新线程里执行，让我们对程序做如下微调：</p>
<pre><code>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br> &lt;script type="text/javascript"&gt;<br>     function f ( i ){<br>         while ( 1 ) {<br>             document.body.innerHTML += i++ + "&lt;br&gt;";<br>         }<br>     }<br>     Concurrent.Thread.create(f, 0);<br>     Concurrent.Thread.create(f, 100000);<br> &lt;/script&gt; </code></pre>
<p><span style="FONT-FAMILY: monospace">在这个程序里有个新函数f()可以重复显示数字，它是在程序段起始定义的，接着以f()为参数调用了两次create()方法，传给create()方法的第二个参数将会不加修改地传给f()。执行这个程序，先会看到一些从0开始的小数，接着是一些从100,000开始的大数，然后又是接着前面小数顺序的数字。你可以观察到程序在交替显示小数和大数，这说明两个线程在同时运行。</span></p>
<p>让我来展示Concurrent.Thread的另外一个用法。上面的例子调用create()方法来创建新线程。不调用库里的任何APIs也有可能实现这个目的。例如，前面那个例子可以这样写：</p>
<pre><code>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br> &lt;script type="text/x-script.multithreaded-js"&gt;<br>     var i = 1;<br>     while ( 1 ) {<br>         document.body.innerHTML += i++ + "&lt;br&gt;";<br>     }<br> &lt;/script&gt; </code></pre>
<p><span style="FONT-FAMILY: monospace">在script 标签内，很简单地用JavaScript写了一个无穷循环。你应该注意到标签内的type属性，那里是一个很陌生的值(text/x- script.multithreaded-js)，如果这个属性被放在script标签内，那么Concurrent.Thread就会在一个新的线程内执行标签之间的程序。你应当记住一点，在本例一样，必须将Concurrent.Thread库包含进来。</span></p>
<p>有了Concurrent.Thread，就有可能自如的将执行环境在线程之间进行切换，即使你的程序很长、连续性很强。我们可以简要地讨论下如何执行这种操作。简言之，需要进行代码转换。粗略地讲，首先要把传递给create()的函数转换成一个字符串，接着改写直至它可以被分批分次执行。然后这些程序可以依照调度程序逐步执行。调度程序负责协调多线程，换句话说，它可以在适当的时候做出调整以便每一个修改后的函数都会得到同等机会运行。 Concurrent.Thread实际上并没有创建新的线程，仅仅是在原本单线程的基础上模拟了一个多线程环境。</p>
<p>虽然转换后的函数看起来是运行在不同的线程内，但是实际上只有一个线程在做这所有的事情。在转换后的函数内执行同步通信仍然会造成浏览器冻结，你也许会认为以前的那些问题根本就没有解决。不过你不必耽心，Concurrent.Thread提供了一个应用JavaScript 的异步通信方式实现的定制通信库，它被设计成当一个线程在等待服务器的响应时允许其它线程运行。这个通信库存于 Concurrent.Thread.Http下。它的用法如下所示：</p>
<pre><code>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br> &lt;script type="text/x-script.multithreaded-js"&gt;<br>     var req = Concurrent.Thread.Http.get(url, ["Accept", "*"]);<br>     if (req.status == 200) {<br>         alert(req.responseText);<br>     } else {<br>         alert(req.statusText);<br>     }<br> &lt;/script&gt; </code></pre>
<p>get()方法，就像它的名字暗示的那样，可以通过HTTP的GET方法获得指定URL的内容，它将目标URL作为第一个参数，将一个代表HTTP请求头的数组作为可选的第二个参数。get()方法与服务器交互，当得到服务器的响应后就返回一个XMLHttpRequest对象作为返回值。当get()方法返回时，已经收到了服务器响应，所以就没必要再用回调函数接收结果。自然，也不必再耽心当程序等待服务器的响应时浏览器冻结的情况了。另外，还有一个 post()方法可以用来发送数据到服务器：</p>
<pre><code>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br> &lt;script type="text/x-script.multithreaded-js"&gt;<br>     var req = Concurrent.Thread.Http.post(url, "key1=val1&amp;key2=val2");<br>     alert(req.statusText);<br> &lt;/script&gt;</code> </pre>
<p>post()方法将目的URL作为第一个参数，要发送的内容作为第二个参数。像get()方法那样，你也可以将请求头作为可选的第三个参数。</p>
<p>如果你用这个通信库实现了第一个例子当中的getArticle()方法，那么你很快就能应用文章开头示例的那种简单的方法写出getArticleWithCache(),backgroundLoad ()以及其它调用了getArticle()方法的函数了。即使是那版backgroundLoad()正在读文章数据，照例还有另外一个线程可以对用户请求做出响应，浏览器因此也不会冻结。现在，你能理解在JavaScript中应用多线程有多实用了？</p>
<h3>想了解更多</h3>
<p>我向你介绍了一个可以在JavaScript中应用多线程的库：Concurrent.Thread。这篇文章的内容只是很初级的东西，如果你想更深入的了解，我推荐您去看<a href="http://jsthread.sourceforge.net/cgi-bin/wiki/wiki.cgi?page=A+Tutorial"><u><font color=#0000ff>the tutorial</font></u></a>。它提供有关Concurrent.Thread用法的更多内容，并列出了可供高级用户使用的文档，是最适合起步的材料。访问<a href="http://jsthread.sourceforge.net/"><u><font color=#0000ff>他们的网站</font></u></a>也不错，那里提供更多信息。</p>
<h3>有关作者</h3>
<p><a href="http://daisukemaki.dtdns.net/"><u><font color=#0000ff>Daisuke Maki</font></u></a>：从International Christian大学文科学院自然科学分部毕业后（取得文学学士学位），又在Electro-Communications大学的研究生院信息专业攻读硕士学位。擅长Web开发和应用JavaScript的AJAX。他开发了Concurrent.Thread。2006财政年度在日本信息技术促进机构（IPA）指导的项目Explatory Software Project中应用了这个设计。</p>
<p>目前已经拥有一个工学硕士学位的他正在Electro-Communications大学的研究生院注册攻读博士学位。</p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/48001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-08-14 23:06 <a href="http://www.cnitblog.com/seeyeah/archive/2008/08/14/48001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ECMA Script Specification </title><link>http://www.cnitblog.com/seeyeah/archive/2008/06/22/45927.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sun, 22 Jun 2008 07:27:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/06/22/45927.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/45927.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/06/22/45927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/45927.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/45927.html</trackback:ping><description><![CDATA[ECMA对Javascript的各个概念作了最全面解释。<br><br><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">http://www.ecma-international.org/publications/standards/Ecma-262.htm</a>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/45927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-06-22 15:27 <a href="http://www.cnitblog.com/seeyeah/archive/2008/06/22/45927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]jQuery调用WebService</title><link>http://www.cnitblog.com/seeyeah/archive/2008/06/12/45471.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Wed, 11 Jun 2008 16:59:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/06/12/45471.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/45471.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/06/12/45471.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/45471.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/45471.html</trackback:ping><description><![CDATA[<hr>
<br>1、编写4种WebService方法<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[WebService(Namespace&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://tempuri.org/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)]<br>&nbsp;&nbsp;&nbsp;&nbsp;[WebServiceBinding(ConformsTo&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WsiProfiles.BasicProfile1_1)]<br>&nbsp;&nbsp;&nbsp;&nbsp;[ScriptService]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">令WebService成功传入Json参数，并以Json形式返回结果</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[GenerateScriptType(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(Person))]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不是必要，但推荐添加(如果Person里面再嵌套另一个复杂类型，则必要声明)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[ToolboxItem(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">)]<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WebService1&nbsp;:&nbsp;System.Web.Services.WebService<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;无任何参数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WebMethod]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;HelloWorld()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;传入参数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="name"&gt;&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WebMethod]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;Hello(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;{0}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;返回泛型列表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="i"&gt;&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WebMethod]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;CreateArray(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;list&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Add(i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;list;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;返回复杂类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="name"&gt;&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="age"&gt;&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WebMethod]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Person&nbsp;GetPerson(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;name,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;age)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Person()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;age<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;复杂类型<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Person<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;Name&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Age&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>2、编写js调用以上方法<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@&nbsp;Page&nbsp;Language</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">C#</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;AutoEventWireup</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;CodeBehind</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebForm1.aspx.cs</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Inherits</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebApplication1.WebForm1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head&nbsp;</span><span style="COLOR: #ff0000">runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">无标题页</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">style&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/css"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;input<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">200px</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">style</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #ff0000">&nbsp;src</span><span style="COLOR: #0000ff">="jquery-1[1].2.6.min.js"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">/*</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、WebService请求类型都为Post，WebService的Url为&#8220;[WebServiceUrl]/[WebMethod]&#8221;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、contentType声明为Json<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、data要用Json的字符串格式传入<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、设置了dataType为json后，result就直接为返回的Json对象。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">*/</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">调用无参数方法</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">#btnHelloWorld</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).click(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">POST</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentType:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">application/json</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebService1.asmx/HelloWorld</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{}</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:'json',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(result){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(result.d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">传入1个参数</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">#btnHello</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).click(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">POST</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentType:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">application/json</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebService1.asmx/Hello</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{name:'KiMoGiGi'}</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:'json',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(result){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(result.d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">返回泛型列表</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">#btnArray</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).click(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">POST</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentType:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">application/json</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebService1.asmx/CreateArray</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{i:10}</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:'json',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(result){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(result.d.join(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;|&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">返回复杂类型</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">#btnPerson</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).click(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">POST</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentType:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">application/json</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">WebService1.asmx/GetPerson</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{name:'KiMoGiGi',age:26}</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:'json',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(result){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;person&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;result.d;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;showText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;p&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">in</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;person){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showText.push(p&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;person[p]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(showText.join(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\r\n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="form1"</span><span style="COLOR: #ff0000">&nbsp;runat</span><span style="COLOR: #0000ff">="server"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="btnHelloWorld"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="HelloWorld"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="btnHello"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="Hello"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="btnArray"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="CreateArray"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="btnPerson"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="GetPerson"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span></div>
<br><br>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/45471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-06-12 00:59 <a href="http://www.cnitblog.com/seeyeah/archive/2008/06/12/45471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery BlockUI Plugin (v2)</title><link>http://www.cnitblog.com/seeyeah/archive/2008/06/10/45264.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 09 Jun 2008 16:22:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/06/10/45264.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/45264.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/06/10/45264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/45264.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/45264.html</trackback:ping><description><![CDATA[PS：一个Jquery的插件，显示Modal窗口<br><br>官方网址：<a href="http://www.malsup.com/jquery/block/">http://www.malsup.com/jquery/block/</a><br><br>
<hr>
使用参数：<br><br><br>
<h1 jQuery1213020482718="667">Options</h1>
BlockUI's default options look (exactly) like this:
<pre jQuery1213020482718="45"><code class=mix jQuery1213020482718="668"><span class=com jQuery1213020482718="669">//&nbsp;override&nbsp;these&nbsp;in&nbsp;your&nbsp;code&nbsp;to&nbsp;change&nbsp;the&nbsp;default&nbsp;behavior&nbsp;and&nbsp;style</span>&nbsp;<br jQuery1213020482718="670"><span class=jquery jQuery1213020482718="671">$</span>.<span class=plugin jQuery1213020482718="672">blockUI</span>.defaults&nbsp;=&nbsp;{&nbsp;<br jQuery1213020482718="673">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="674">//&nbsp;message&nbsp;displayed&nbsp;when&nbsp;blocking&nbsp;(use&nbsp;null&nbsp;for&nbsp;no&nbsp;message)</span>&nbsp;<br jQuery1213020482718="675">&nbsp;&nbsp;&nbsp;&nbsp;message:&nbsp;&nbsp;<span class=string jQuery1213020482718="676">'&lt;h1&gt;Please&nbsp;wait...&lt;/h1&gt;'</span>,&nbsp;<br jQuery1213020482718="677">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="678">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="679">//&nbsp;styles&nbsp;for&nbsp;the&nbsp;message&nbsp;when&nbsp;blocking;&nbsp;if&nbsp;you&nbsp;wish&nbsp;to&nbsp;disable</span>&nbsp;<br jQuery1213020482718="680">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="681">//&nbsp;these&nbsp;and&nbsp;use&nbsp;an&nbsp;external&nbsp;stylesheet&nbsp;then&nbsp;do&nbsp;this&nbsp;in&nbsp;your&nbsp;code:</span>&nbsp;<br jQuery1213020482718="682">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="683">//&nbsp;$.blockUI.defaults.css&nbsp;=&nbsp;{};</span>&nbsp;<br jQuery1213020482718="684">&nbsp;&nbsp;&nbsp;&nbsp;css:&nbsp;{&nbsp;&nbsp;<br jQuery1213020482718="685">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=numbers jQuery1213020482718="686">0</span>,&nbsp;<br jQuery1213020482718="687">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=numbers jQuery1213020482718="688">0</span>,&nbsp;<br jQuery1213020482718="689">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="690">'30%'</span>,&nbsp;&nbsp;<br jQuery1213020482718="691">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="692">'40%'</span>,&nbsp;&nbsp;<br jQuery1213020482718="693">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="694">'35%'</span>,&nbsp;&nbsp;<br jQuery1213020482718="695">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textAlign:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="696">'center'</span>,&nbsp;&nbsp;<br jQuery1213020482718="697">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="698">'#000'</span>,&nbsp;&nbsp;<br jQuery1213020482718="699">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="700">'3px&nbsp;solid&nbsp;#aaa'</span>,&nbsp;<br jQuery1213020482718="701">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor:<span class=string jQuery1213020482718="702">'#fff'</span>,&nbsp;<br jQuery1213020482718="703">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="704">'wait'</span>&nbsp;<br jQuery1213020482718="705">&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;<br jQuery1213020482718="706">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="707">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="708">//&nbsp;styles&nbsp;for&nbsp;the&nbsp;overlay</span>&nbsp;<br jQuery1213020482718="709">&nbsp;&nbsp;&nbsp;&nbsp;overlayCSS:&nbsp;&nbsp;{&nbsp;&nbsp;<br jQuery1213020482718="710">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor:<span class=string jQuery1213020482718="711">'#000'</span>,&nbsp;&nbsp;<br jQuery1213020482718="712">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opacity:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=string jQuery1213020482718="713">'0.6'</span>&nbsp;&nbsp;<br jQuery1213020482718="714">&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;<br jQuery1213020482718="715">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="716">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="717">//&nbsp;z-index&nbsp;for&nbsp;the&nbsp;blocking&nbsp;overlay</span>&nbsp;<br jQuery1213020482718="718">&nbsp;&nbsp;&nbsp;&nbsp;baseZ:&nbsp;<span class=numbers jQuery1213020482718="719">1000</span>,&nbsp;<br jQuery1213020482718="720">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="721">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="722">//&nbsp;set&nbsp;these&nbsp;to&nbsp;true&nbsp;to&nbsp;have&nbsp;the&nbsp;message&nbsp;automatically&nbsp;centered</span>&nbsp;<br jQuery1213020482718="723">&nbsp;&nbsp;&nbsp;&nbsp;centerX:&nbsp;<span class=keywords jQuery1213020482718="724">true</span>,&nbsp;<span class=com jQuery1213020482718="725">//&nbsp;&lt;--&nbsp;only&nbsp;effects&nbsp;element&nbsp;blocking&nbsp;(page&nbsp;block&nbsp;controlled&nbsp;via&nbsp;css&nbsp;above)</span>&nbsp;<br jQuery1213020482718="726">&nbsp;&nbsp;&nbsp;&nbsp;centerY:&nbsp;<span class=keywords jQuery1213020482718="727">true</span>,&nbsp;<br jQuery1213020482718="728">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="729">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="730">//&nbsp;allow&nbsp;body&nbsp;element&nbsp;to&nbsp;be&nbsp;stetched&nbsp;in&nbsp;ie6;&nbsp;this&nbsp;makes&nbsp;blocking&nbsp;look&nbsp;better</span>&nbsp;<br jQuery1213020482718="731">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="732">//&nbsp;on&nbsp;"short"&nbsp;pages.&nbsp;&nbsp;disable&nbsp;if&nbsp;you&nbsp;wish&nbsp;to&nbsp;prevent&nbsp;changes&nbsp;to&nbsp;the&nbsp;body&nbsp;height</span>&nbsp;<br jQuery1213020482718="733">&nbsp;&nbsp;&nbsp;&nbsp;allowBodyStretch:&nbsp;<span class=keywords jQuery1213020482718="734">true</span>,&nbsp;<br jQuery1213020482718="735">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="736">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="737">//&nbsp;be&nbsp;default&nbsp;blockUI&nbsp;will&nbsp;supress&nbsp;tab&nbsp;navigation&nbsp;from&nbsp;leaving&nbsp;blocking&nbsp;content;</span>&nbsp;<br jQuery1213020482718="738">&nbsp;&nbsp;&nbsp;&nbsp;constrainTabKey:&nbsp;<span class=keywords jQuery1213020482718="739">true</span>,&nbsp;<br jQuery1213020482718="740">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="741">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="742">//&nbsp;fadeOut&nbsp;time&nbsp;in&nbsp;millis;&nbsp;set&nbsp;to&nbsp;0&nbsp;to&nbsp;disable&nbsp;fadeout&nbsp;on&nbsp;unblock</span>&nbsp;<br jQuery1213020482718="743">&nbsp;&nbsp;&nbsp;&nbsp;fadeOut:&nbsp;&nbsp;<span class=numbers jQuery1213020482718="744">400</span>,&nbsp;<br jQuery1213020482718="745">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br jQuery1213020482718="746">&nbsp;&nbsp;&nbsp;&nbsp;<span class=com jQuery1213020482718="747">//&nbsp;suppresses&nbsp;the&nbsp;use&nbsp;of&nbsp;overlay&nbsp;styles&nbsp;on&nbsp;FF/Linux&nbsp;(due&nbsp;to&nbsp;significant&nbsp;performance&nbsp;issues&nbsp;with&nbsp;opacity)</span>&nbsp;<br jQuery1213020482718="748">&nbsp;&nbsp;&nbsp;&nbsp;applyPlatformOpacityRules:&nbsp;<span class=keywords jQuery1213020482718="749">true</span>&nbsp;<br jQuery1213020482718="750">};&nbsp;<br jQuery1213020482718="751"></code></pre>
Changing the blockUI options is simple and can be done in one of two ways:
<ol jQuery1213020482718="752">
    <li jQuery1213020482718="753">Globally, by directly overriding the values in the <code class=inline jQuery1213020482718="754">$.blockUI.defaults</code> object
    <li jQuery1213020482718="755">Locally, by passing an options object to the <code class=inline jQuery1213020482718="756">blockUI</code> (or <code class=inline jQuery1213020482718="757">block</code>) function. </li>
</ol>
<h1 jQuery1213020482718="758">Global Overrides</h1>
You can change the default options by simply declaring different values for them. For example:
<pre jQuery1213020482718="47"><code class=mix jQuery1213020482718="759"><span class=com jQuery1213020482718="760">//&nbsp;change&nbsp;message&nbsp;border</span>&nbsp;<br jQuery1213020482718="761"><span class=jquery jQuery1213020482718="762">$</span>.<span class=plugin jQuery1213020482718="763">blockUI</span>.defaults.css.border&nbsp;=&nbsp;<span class=string jQuery1213020482718="764">'5px&nbsp;solid&nbsp;red'</span>;&nbsp;<br jQuery1213020482718="765">&nbsp;<br jQuery1213020482718="766"><span class=com jQuery1213020482718="767">//&nbsp;make&nbsp;fadeOut&nbsp;effect&nbsp;shorter</span>&nbsp;<br jQuery1213020482718="768"><span class=jquery jQuery1213020482718="769">$</span>.<span class=plugin jQuery1213020482718="770">blockUI</span>.defaults.fadeOut&nbsp;=&nbsp;<span class=numbers jQuery1213020482718="771">200</span>;&nbsp;<br jQuery1213020482718="772"></code></pre>
<h1 jQuery1213020482718="773">Local Overrides</h1>
Local overrides are achieved by passing an object to the <code class=inline jQuery1213020482718="774">blockUI</code> (or <code class=inline jQuery1213020482718="775">block</code>) function. The <strong jQuery1213020482718="776">exact same options are available</strong> to the local options object as are available in the global object. For example:
<pre jQuery1213020482718="48"><code class=mix jQuery1213020482718="777"><span class=com jQuery1213020482718="778">//&nbsp;change&nbsp;message&nbsp;border</span>&nbsp;<br jQuery1213020482718="779"><span class=jquery jQuery1213020482718="780">$</span>.<span class=plugin jQuery1213020482718="781">blockUI</span>({&nbsp;css:&nbsp;{<span class=aname jQuery1213020482718="782">&nbsp;border</span>&nbsp;=&nbsp;<span class=string jQuery1213020482718="783">'5px&nbsp;solid&nbsp;red'</span>}&nbsp;});&nbsp;<br jQuery1213020482718="784">&nbsp;<br jQuery1213020482718="785">...&nbsp;<br jQuery1213020482718="786">&nbsp;<br jQuery1213020482718="787"><span class=com jQuery1213020482718="788">//&nbsp;make&nbsp;fadeOut&nbsp;effect&nbsp;shorter</span>&nbsp;<br jQuery1213020482718="789"><span class=jquery jQuery1213020482718="790">$</span>.<span class=plugin jQuery1213020482718="791">blockUI</span>({&nbsp;fadeOut:&nbsp;<span class=numbers jQuery1213020482718="792">200</span>&nbsp;});&nbsp;<br jQuery1213020482718="793">&nbsp;<br jQuery1213020482718="794">...&nbsp;<br jQuery1213020482718="795">&nbsp;<br jQuery1213020482718="796"><span class=com jQuery1213020482718="797">//&nbsp;use&nbsp;a&nbsp;different&nbsp;message</span>&nbsp;<br jQuery1213020482718="798"><span class=jquery jQuery1213020482718="799">$</span>.<span class=plugin jQuery1213020482718="800">blockUI</span>({&nbsp;message:&nbsp;<span class=string jQuery1213020482718="801">'Hold&nbsp;on!'</span>&nbsp;});&nbsp;<br jQuery1213020482718="802"></code></pre>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/45264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-06-10 00:22 <a href="http://www.cnitblog.com/seeyeah/archive/2008/06/10/45264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery Ajax 全解析 </title><link>http://www.cnitblog.com/seeyeah/archive/2008/06/07/45127.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 07 Jun 2008 15:36:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/06/07/45127.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/45127.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/06/07/45127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/45127.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/45127.html</trackback:ping><description><![CDATA[<p>本文地址: <a href="http://www.cnblogs.com/QLeelulu/archive/2008/04/20/1163021.html" jQuery1212845305171="16"><u><font color=#0000ff>jQuery Ajax 全解析</font></u></a></p>
<p>本文作者：<a href="http://qleelulu.cnblogs.com/" target=_blank jQuery1212845305171="17" fade="45560802"><u><font color=#0000ff>QLeelulu</font></u></a></p>
<p>转载请标明出处！</p>
<p>jQuery确实是一个挺好的轻量级的JS框架，能帮助我们快速的开发JS应用，并在一定程度上改变了我们写JavaScript代码的习惯。</p>
<p>废话少说，直接进入正题，我们先来看一些简单的方法，这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法，当然，如果要处理复杂的逻辑，还是需要用到jQuery.ajax()的(这个后面会说到).</p>
<p><font size=4><font color=#bb0000><strong>1. load</strong>( url, [data], [callback] ) ：载入远程 HTML 文件代码并插入至 DOM 中。</font></font></p>
<p><strong>url </strong>(String) : 请求的HTML页的URL地址。
<p><strong>data </strong>(Map) : (可选参数) 发送至服务器的 key/value 数据。
<p><strong>callback </strong>(Callback) : (可选参数) 请求完成时(<font color=#bb0000>不需要是success的</font>)的回调函数。
<p>这个方法默认使用 GET 方式来传递的，如果[data]参数有传递数据进去，就会自动转换为POST方式的。jQuery 1.2 中，可以指定选择符，来筛选载入的 HTML 文档，DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some &gt; selector"。</p>
<p>这个方法可以很方便的动态加载一些HTML文件，例如表单。</p>
<p>示例代码：</p>
<pre>$("<span style="COLOR: #8b0000">.ajax.load</span>").load("<span style="COLOR: #8b0000">http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html .post</span>",
<span style="COLOR: #0000ff">function</span> (responseText, textStatus, XMLHttpRequest){
<span style="COLOR: #0000ff">this</span>;<span style="COLOR: #008000">//在这里this指向的是当前的DOM对象，即$(".ajax.load")[0]</span>
<span style="COLOR: #008000">//alert(responseText);//请求返回的内容</span>
<span style="COLOR: #008000">//alert(textStatus);//请求状态：success，error</span>
<span style="COLOR: #008000">//alert(XMLHttpRequest);//XMLHttpRequest对象</span>
});</pre>
<p>
<div class="ajax load">这里将显示结果。 </div>
<input id=btnload type=button value=Load jQuery1212845305171="7">
<p>&#160;</p>
<p><strong><font color=#bb0000>注：</font></strong>不知道为什么URL写绝对路径在FF下会出错，知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径，所以在FF下你将会出错并不会看到返回结果。<font color=#ff00ff>还有get()和post()示例都是跨域调用的，发现传上来后没办法获取结果，所以把运行按钮去掉了。</font>
<p>&nbsp;
<p><font size=4><font color=#bb0000><strong>2. jQuery.get</strong>( url, [data], [callback] )：使用GET方式来进行异步请求</font></font>
<blockquote>
<p>参数：
<p><strong>url </strong>(String) :&nbsp; 发送请求的URL地址.
<p><strong>data </strong>(Map) : (可选) 要发送给服务器的数据，以 Key/value 的键值对形式表示，会做为QueryString附加到请求URL中。
<p><strong>callback </strong>(Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。</p>
</blockquote>
<p>这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数，请使用 $.ajax。示例代码：
<pre>		$.get("<span style="COLOR: #8b0000">./Ajax.aspx</span>", {Action:"<span style="COLOR: #8b0000">get</span>",Name:"<span style="COLOR: #8b0000">lulu</span>"}, <span style="COLOR: #0000ff">function</span> (data, textStatus){
<span style="COLOR: #008000">//返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.</span>
<span style="COLOR: #0000ff">this</span>; <span style="COLOR: #008000">// 在这里this指向的是Ajax请求的选项配置信息，请参考下图</span>
<span style="COLOR: #0000ff">alert</span>(data);
<span style="COLOR: #008000">//alert(textStatus);//请求状态：success，error等等。<br>                                  当然这里捕捉不到error，因为error的时候根本不会运行该回调函数</span>
<span style="COLOR: #008000">//alert(this);</span>
});</pre>
<p>点击发送请求：
<p>jQuery.get()回调函数里面的 this ，指向的是Ajax请求的选项配置信息：
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_4.png" jQuery1212845305171="18" fade="45560563"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=289 alt=image src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_1.png" width=466 border=0></a>
<p>&nbsp;
<p><font size=4><font color=#bb0000><strong>3. jQuery.post</strong>( url, [data], [callback], [type] ) ：使用POST方式来进行异步请求</font></font>
<p>
<blockquote>
<p>参数：
<p><strong>url </strong>(String) : 发送请求的URL地址.
<p><strong>data </strong>(Map) : (可选) 要发送给服务器的数据，以 Key/value 的键值对形式表示。
<p><strong>callback </strong>(Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。</p>
<p><strong>type</strong> (String) : (可选)官方的说明是：Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等)</p>
</blockquote>
<p>这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数，请使用 $.ajax。示例代码：</p>
<p>Ajax.aspx：</p>
<pre>Response.ContentType = "<span style="COLOR: #8b0000">application/json</span>";
Response.Write("<span style="COLOR: #8b0000">{result: '</span>" + Request["<span style="COLOR: #8b0000">Name</span>"] + "<span style="COLOR: #8b0000">,你好！(这消息来自服务器)'}</span>");</pre>
jQuery 代码：
<pre>$.post("<span style="COLOR: #8b0000">Ajax.aspx</span>", { Action: "<span style="COLOR: #8b0000">post</span>", Name: "<span style="COLOR: #8b0000">lulu</span>" },
<span style="COLOR: #0000ff">function</span> (data, textStatus){
<span style="COLOR: #008000">// data 可以是 xmlDoc, jsonObj, html, text, 等等.</span>
<span style="COLOR: #008000">//this; // 这个Ajax请求的选项配置信息，请参考jQuery.get()说到的this</span>
<span style="COLOR: #0000ff">alert</span>(data.result);
}, "<span style="COLOR: #8b0000">json</span>");</pre>
<p>点击提交：
<p>这里设置了请求的格式为"json"：
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_6.png" jQuery1212845305171="19" fade="45560734"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=125 alt=image src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_2.png" width=440 border=0></a>
<p>如果你设置了请求的格式为"json"，此时你没有设置Response回来的ContentType 为：Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。
<p>注意一下，<span style="COLOR: #0000ff">alert</span>(data.result); 由于设置了Accept报头为&#8220;json&#8221;，这里返回的data就是一个对象，并不需要用eval()来转换为对象。
<p>&nbsp;
<p><font color=#bb0000><font size=4><strong>4. jQuery.getScript</strong>( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件</font>。</font>
<blockquote>
<h4>参数</h4>
<p><strong>url </strong>(String) : 待载入 JS 文件地址。
<p><strong>callback </strong>(Function) : (可选) 成功载入后回调函数。</p>
</blockquote>
<p>jQuery 1.2 版本之前，getScript 只能调用同域 JS 文件。 1.2中，您可以跨域调用 JavaScript 文件。注意：Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本，请加入延时函数。
<p>这个方法可以用在例如当只有编辑器focus()的时候才去加载编辑器需要的JS文件.下面看一些示例代码：</p>
加载并执行 test.js。
<p><strong>jQuery 代码:</strong>
<p>$.getScript("test.js");
<hr>
<p>加载并执行 AjaxEvent.js ，成功后显示信息。
<p><strong>jQuery 代码:</strong>
<pre>$.getScript("<span style="COLOR: #8b0000">AjaxEvent.js</span>", <span style="COLOR: #0000ff">function</span>(){
<span style="COLOR: #0000ff">alert</span>("<span style="COLOR: #8b0000">AjaxEvent.js 加载完成并执行完成.你再点击上面的Get或Post按钮看看有什么不同？</span>");
});</pre>
<p><input id=btngetScript type=button value=加载并运行Ajax全局事件脚本 jQuery1212845305171="5"> <input id=btnremoveScript disabled type=button value=取消Ajax全局事件 jQuery1212845305171="6">
<p>加载完后请重新点击一下上面的 Load 请求看看有什么不同。
<p><font color=#bb0000 size=4><strong>jQuery Ajax 事件</strong></font>
<p>Ajax请求会产生若干不同的事件，我们可以订阅这些事件并在其中处理我们的逻辑。在jQuery这里有两种Ajax事件：局部事件 和 全局事件。
<p><strong>局部事件</strong>就是在每次的Ajax请求时在方法内定义的，例如：
<pre> $.ajax({
beforeSend: <span style="COLOR: #0000ff">function</span>(){
<span style="COLOR: #008000">// Handle the beforeSend event</span>
},
complete: <span style="COLOR: #0000ff">function</span>(){
<span style="COLOR: #008000">// Handle the complete event</span>
}
<span style="COLOR: #008000">// ...</span>
});</pre>
<p><strong>全局事件</strong>是每次的Ajax请求都会触发的，它会向DOM中的所有元素广播，在上面 getScript() 示例中加载的脚本就是全局Ajax事件。全局事件可以如下定义：</p>
<pre> $("<span style="COLOR: #8b0000">#loading</span>").bind("<span style="COLOR: #8b0000">ajaxSend</span>", <span style="COLOR: #0000ff">function</span>(){
$(<span style="COLOR: #0000ff">this</span>).show();
}).bind("<span style="COLOR: #8b0000">ajaxComplete</span>", <span style="COLOR: #0000ff">function</span>(){
$(<span style="COLOR: #0000ff">this</span>).hide();
});</pre>
<p>或者：</p>
<pre> $("<span style="COLOR: #8b0000">#loading</span>").ajaxStart(<span style="COLOR: #0000ff">function</span>(){
$(<span style="COLOR: #0000ff">this</span>).show();
}); </pre>
<p>我们可以在特定的请求将全局事件禁用，只要设置下 global 选项就可以了：
<pre> $.ajax({
url: "<span style="COLOR: #8b0000">test.html</span>",
global: <span style="COLOR: #0000ff">false</span>,<span style="COLOR: #008000">// 禁用全局Ajax事件.</span>
<span style="COLOR: #008000">// ...</span>
});</pre>
<p>下面是jQuery官方给出的完整的Ajax事件列表：
<li><strong>ajaxStart</strong> (Global Event)<br>This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.
<ul>
    <li><strong>beforeSend</strong> (Local Event)<br>This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.)
    <li><strong>ajaxSend</strong> (Global Event)<br>This global event is also triggered before the request is run.
    <li><strong>success</strong> (Local Event)<br>This event is only called if the request was successful (no errors from the server, no errors with the data).
    <li><strong>ajaxSuccess</strong> (Global Event)<br>This event is also only called if the request was successful.
    <li><strong>error</strong> (Local Event)<br>This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request).
    <li><strong>ajaxError</strong> (Global Event)<br>This global event behaves the same as the local error event.
    <li><strong>complete</strong> (Local Event)<br>This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.
    <li><strong>ajaxComplete</strong> (Global Event)<br>This event behaves the same as the complete event and will be triggered every time an Ajax request finishes. </li>
</ul>
<li><strong>ajaxStop</strong> (Global Event)<br>This global event is triggered if there are no more Ajax requests being processed.
<p>具体的全局事件请参考API文档。<br>好了，下面开始说jQuery里面功能最强的Ajax请求方法 $.ajax();&nbsp;&nbsp; </p>
<p>&nbsp;
<p><font size=4><font color=#bb0000><strong>jQuery.ajax</strong>( options ) : 通过 HTTP 请求加载远程数据</font></font>
<p>这个是jQuery 的底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。
<p>$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象，但特殊情况下可用于手动终止请求。
<p><strong>注意：</strong> 如果你指定了 dataType 选项，请确保服务器返回正确的 MIME 信息，(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。见 <a href="http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests" jQuery1212845305171="20"><u><font color=#0000ff>Specifying the Data Type for AJAX Requests</font></u></a> 。<br>当设置 datatype 类型为 'script' 的时候，所有的远程(不在同一个域中)POST请求都回转换为GET方式。
<p>$.ajax() 只有一个参数：参数 key/value 对象，包含各配置及回调函数信息。详细参数选项见下。
<p>jQuery 1.2 中，您可以跨域加载 JSON 数据，使用时需将数据类型设置为 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jQuery1212845305171="21"><u><font color=#0000ff>JSONP</font></u></a>。使用 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jQuery1212845305171="22"><u><font color=#0000ff>JSONP</font></u></a> 形式调用函数时，如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。数据类型设置为 "jsonp" 时，jQuery 将自动调用回调函数。(这个我不是很懂)
<p>参数列表：</p>
<p>
<table cellSpacing=2 cellPadding=2 width=600 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=90><font color=#bb0000>参数名</font></td>
            <td vAlign=top width=83><font color=#bb0000>类型</font></td>
            <td vAlign=top width=419><font color=#bb0000>描述</font></td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>url </strong></td>
            <td vAlign=top width=83>String</td>
            <td vAlign=top width=419>(默认: 当前页地址) 发送请求的地址。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>type</strong></td>
            <td vAlign=top width=83>String</td>
            <td vAlign=top width=419>(默认: "GET") 请求方式 ("POST" 或 "GET")， 默认为 "GET"。注意：其它 HTTP 请求方法，如 PUT 和 DELETE 也可以使用，但仅部分浏览器支持。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>timeout</strong></td>
            <td vAlign=top width=83>Number</td>
            <td vAlign=top width=419>设置请求超时时间（毫秒）。此设置将覆盖全局设置。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>async </strong></td>
            <td vAlign=top width=83>Boolean</td>
            <td vAlign=top width=419>(默认: true) 默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>beforeSend </strong></td>
            <td vAlign=top width=83>Function</td>
            <td vAlign=top width=419>发送请求前可修改 XMLHttpRequest 对象的函数，如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。<br>
            <pre><span style="COLOR: #0000ff">function</span> (XMLHttpRequest) {
            <span style="COLOR: #0000ff">this</span>; <span style="COLOR: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>cache </strong></td>
            <td vAlign=top width=83>Boolean</td>
            <td vAlign=top width=419>(默认: true) jQuery 1.2 新功能，设置为 false 将不会从浏览器缓存中加载请求信息。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>complete </strong></td>
            <td vAlign=top width=83>Function</td>
            <td vAlign=top width=419>请求完成后回调函数 (请求成功或失败时均调用)。参数： XMLHttpRequest 对象，成功信息字符串。<br>
            <pre><span style="COLOR: #0000ff">function</span> (XMLHttpRequest, textStatus) {
            <span style="COLOR: #0000ff">this</span>; <span style="COLOR: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>contentType </strong></td>
            <td vAlign=top width=83>String</td>
            <td vAlign=top width=419>(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>data </strong></td>
            <td vAlign=top width=83>Object,<br>String</td>
            <td vAlign=top width=419>发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组，jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&amp;foo=bar1&amp;foo=bar2'。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>dataType </strong></td>
            <td vAlign=top width=83>String</td>
            <td vAlign=top width=419>
            <p>预期服务器返回的数据类型。如果不指定，jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText，并作为回调函数参数传递，可用值:
            <p>"xml": 返回 XML 文档，可用 jQuery 处理。
            <p>"html": 返回纯文本 HTML 信息；包含 script 元素。
            <p>"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。
            <p>"json": 返回 JSON 数据 。
            <p>"jsonp": <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jQuery1212845305171="23"><u><font color=#0000ff>JSONP</font></u></a> 格式。使用 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/" jQuery1212845305171="24"><u><font color=#0000ff>JSONP</font></u></a> 形式调用函数时，如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>error </strong></td>
            <td vAlign=top width=83>Function</td>
            <td vAlign=top width=419>(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数：XMLHttpRequest 对象，错误信息，（可能）捕获的错误对象。<br>
            <pre><span style="COLOR: #0000ff">function</span> (XMLHttpRequest, textStatus, errorThrown) {
            <span style="COLOR: #008000">// 通常情况下textStatus和errorThown只有其中一个有值 </span>
            <span style="COLOR: #0000ff">this</span>; <span style="COLOR: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>global </strong></td>
            <td vAlign=top width=83>Boolean</td>
            <td vAlign=top width=419>(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件，如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>ifModified </strong></td>
            <td vAlign=top width=83>Boolean</td>
            <td vAlign=top width=419>(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>processData </strong></td>
            <td vAlign=top width=83>Boolean</td>
            <td vAlign=top width=419>(默认: true) 默认情况下，发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息，请设置为 false。</td>
        </tr>
        <tr>
            <td vAlign=top width=90><strong>success </strong></td>
            <td vAlign=top width=83>Function</td>
            <td vAlign=top width=419>请求成功后回调函数。这个方法有两个参数：服务器返回数据，返回状态<br>
            <pre><span style="COLOR: #0000ff">function</span> (data, textStatus) {
            <span style="COLOR: #008000">// data could be xmlDoc, jsonObj, html, text, etc...</span>
            <span style="COLOR: #0000ff">this</span>; <span style="COLOR: #008000">// the options for this ajax request</span>
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>这里有几个Ajax事件参数：<strong>beforeSend </strong>，<strong>success </strong>，<strong>complete ，error 。</strong>我们可以定义这些事件来很好的处理我们的每一次的Ajax请求。注意一下，这些Ajax事件里面的 <font color=#0000ff>this</font> 都是指向Ajax请求的选项信息的(请参考说 get() 方法时的this的图片)。<br>请认真阅读上面的参数列表，如果你要用jQuery来进行Ajax开发，那么这些参数你都必需熟知的。
<h4>示例代码，获取博客园首页的文章题目：</h4>
<pre>$.ajax({
type: "<span style="COLOR: #8b0000">get</span>",
url: "<span style="COLOR: #8b0000">http://www.cnblogs.com/rss</span>",
beforeSend: <span style="COLOR: #0000ff">function</span>(XMLHttpRequest){
<span style="COLOR: #008000">//ShowLoading();</span>
},
success: <span style="COLOR: #0000ff">function</span>(data, textStatus){
$("<span style="COLOR: #8b0000">.ajax.ajaxResult</span>").html("<span style="COLOR: #8b0000"></span>");
$("<span style="COLOR: #8b0000">item</span>",data).each(<span style="COLOR: #0000ff">function</span>(i, domEle){
$("<span style="COLOR: #8b0000">.ajax.ajaxResult</span>").append("<span style="COLOR: #8b0000">&lt;li&gt;</span>"+$(domEle).children("<span style="COLOR: #8b0000">title</span>").text()+"<span style="COLOR: #8b0000">&lt;/li&gt;</span>");
});
},
complete: <span style="COLOR: #0000ff">function</span>(XMLHttpRequest, textStatus){
<span style="COLOR: #008000">//HideLoading();</span>
},
error: <span style="COLOR: #0000ff">function</span>(){
<span style="COLOR: #008000">//请求出错处理</span>
}
});</pre>
<p><input id=btnajax type=button value=读取首页RSS jQuery1212845305171="4">
<p class="ajax ajaxResult">这里将显示首页文章列表。</p>
<p class="ajax ajaxResult">&nbsp;</p>
<p>&#160;</p>
<p><font color=#bb0000 size=4><strong>其他</strong></font> </p>
<p><font color=#bb0000><strong>jQuery.ajaxSetup</strong>( options ) : 设置全局 AJAX 默认选项。</font></p>
<p>设置 AJAX 请求默认地址为 "/xmlhttp/"，禁止触发全局 AJAX 事件，用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。
<p><strong>jQuery 代码:</strong>
<pre>$.ajaxSetup({
url: "<span style="COLOR: #8b0000">/xmlhttp/</span>",
global: <span style="COLOR: #0000ff">false</span>,
type: "<span style="COLOR: #8b0000">POST</span>"
});
$.ajax({ data: myData });</pre>
<p>&nbsp;</p>
<p><strong><font color=#bb0000 size=4>serialize() 与 serializeArray()</font></strong></p>
<p>serialize() : 序列表表格内容为字符串。</p>
<p>serializeArray() : 序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。 </p>
<p>示例：</p>
<p>HTML代码：</p>
<pre><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span> <span style="COLOR: #ff0000">id</span>=<span style="COLOR: #0000ff">"results"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">b</span><span style="COLOR: #0000ff">&gt;</span>Results: <span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">b</span><span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">select</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"single"</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>Single<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>Single2<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">select</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">select</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"multiple"</span> <span style="COLOR: #ff0000">multiple</span>=<span style="COLOR: #0000ff">"multiple"</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option</span> <span style="COLOR: #ff0000">selected</span>=<span style="COLOR: #0000ff">"selected"</span><span style="COLOR: #0000ff">&gt;</span>Multiple<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>Multiple2<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option</span> <span style="COLOR: #ff0000">selected</span>=<span style="COLOR: #0000ff">"selected"</span><span style="COLOR: #0000ff">&gt;</span>Multiple3<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span>
<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">select</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">/&gt;</span>
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input</span> <span style="COLOR: #ff0000">type</span>=<span style="COLOR: #0000ff">"checkbox"</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"check"</span> <span style="COLOR: #ff0000">value</span>=<span style="COLOR: #0000ff">"check1"</span><span style="COLOR: #0000ff">/&gt;</span> check1
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input</span> <span style="COLOR: #ff0000">type</span>=<span style="COLOR: #0000ff">"checkbox"</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"check"</span> <span style="COLOR: #ff0000">value</span>=<span style="COLOR: #0000ff">"check2"</span>
<span style="COLOR: #ff0000">checked</span>=<span style="COLOR: #0000ff">"checked"</span><span style="COLOR: #0000ff">/&gt;</span> check2
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input</span> <span style="COLOR: #ff0000">type</span>=<span style="COLOR: #0000ff">"radio"</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"radio"</span> <span style="COLOR: #ff0000">value</span>=<span style="COLOR: #0000ff">"radio1"</span>
<span style="COLOR: #ff0000">checked</span>=<span style="COLOR: #0000ff">"checked"</span><span style="COLOR: #0000ff">/&gt;</span> radio1
<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input</span> <span style="COLOR: #ff0000">type</span>=<span style="COLOR: #0000ff">"radio"</span> <span style="COLOR: #ff0000">name</span>=<span style="COLOR: #0000ff">"radio"</span> <span style="COLOR: #ff0000">value</span>=<span style="COLOR: #0000ff">"radio2"</span><span style="COLOR: #0000ff">/&gt;</span> radio2
<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span> </pre>
<p><a style="BACKGROUND-COLOR: rgb(255,255,231)" href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_8.png" jQuery1212845305171="25" fade="45560807"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=106 alt=image src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_3.png" width=812 border=0></a> </p>
<p><strong><font color=#bb0000>serializeArray() 结果为：</font></strong>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_10.png" jQuery1212845305171="26" fade="45560526"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=338 alt=image src="http://www.cnblogs.com/images/cnblogs_com/QLeelulu/WindowsLiveWriter/jQueryAjax_B934/image_thumb_4.png" width=513 border=0></a>
<p>&nbsp;
<p><strong><font color=#bb0000>一些资源</font></strong>
<p>一个jQuery的Ajax Form表单插件：<a href="http://www.malsup.com/jquery/form/" jQuery1212845305171="27"><u><font color=#0000ff>http://www.malsup.com/jquery/form/</font></u></a>
<p>一个专门生成Loading图片的站点：<a title=http://ajaxload.info/ href="http://ajaxload.info/" jQuery1212845305171="28"><u><font color=#0000ff>http://ajaxload.info/</font></u></a>&nbsp;&nbsp; 大家觉得那些Loading比较炫的可以在这里跟帖晒一下，方便大家取用，嘎嘎 </p>
</li>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/45127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-06-07 23:36 <a href="http://www.cnitblog.com/seeyeah/archive/2008/06/07/45127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析 innerHTML 性能优化的原理 </title><link>http://www.cnitblog.com/seeyeah/archive/2008/05/11/43608.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sun, 11 May 2008 14:52:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/05/11/43608.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/43608.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/05/11/43608.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/43608.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/43608.html</trackback:ping><description><![CDATA[摘至：<a href="http://fins.javaeye.com/blog/183373">http://fins.javaeye.com/blog/183373</a><br>
<hr>
昨天看了 lveyo老兄的"innerHTML的性能问题" 一文 <a href="http://lveyo.javaeye.com/blog/182891" target=_blank><u><font color=#108ac6>http://lveyo.javaeye.com/blog/182891</font></u></a> <br><br>该文介绍了一篇老外的关于提高innerHTML性能的文章. <br><br>老外的方法非常的怪异且神奇. <br><br>很多朋友在惊叹之余 对于背后的原理非常感兴趣. <br>受hax的提醒, 我看了一下webkit的代码.在这里我将分析的结果分享出来 <br><br>说的不一定对 还请大家多多拍砖. <br><br><br>浏览器在 el.innerHTML = newHTML 时所做的工作: <br><br>==================================== <br>原始方法 <br><br>1) 创建一个fragment(document碎片) <br>2) 将 newHTML 设置到 fragment 内部 (这里怎么设置的不必关心,反正不是用的innerHTML 呵呵) <br>3) 清除el下的所有子节点 , 类似 el.removeChildren() <br>4) 将fragment加入到 el内, 类似 el.appendChild(fragment) <br><br><br>==================================== <br>文章里的新方法 <br><br>1)克隆el节点(不包含子节点),相当于 <br>newEl=document.createElement(el.tagName); <br>然或将el的所有属性赋值给 newEl (通过 el.getAttribute newEl.setAttribute) <br><br>2) 创建一个fragment(document碎片) <br>3) 将 newHTML 设置到 fragment 内部 (这里怎么设置的不必关心,反正不是用的innerHTML 呵呵) <br>4) 清除 newEl 下的所有子节点 , 类似 newEl.removeChildren() <br>5) 将 fragment 加入到 newEl 内, 类似 newEl.appendChild(fragment) <br>6) 用 fragment 替换 el. 相当于 el.parentNode.replaceChild(newEl, el); <br><br>新方法看起来比原始方法更麻烦, 但是为什么速度会更快呢? <br><br>关键点就是在 新方法的步骤 4 5 6 . <br>首先看4: <br>newEl 是clone的el,但是没有子结点,所以removeChildren很快就返回.相当于没有执行. <br>而且就算newEL有子结点,由于newEl不是一个在dom树里的节点, 也省去了其中复杂的一步
<pre class=java style="DISPLAY: none" name="code">        if (n-&gt;inDocument())  n-&gt;removedFromDocument();
</pre>
<br>而 el.removeChildren 这个操作 相比之下自然要耗时很多.原因有三:removeChild操作比较复杂;el有子节点;el和el的子结点都在dom树内. <br><br><br>再来看5 <br>newEl 和 fragment 本身都是脱离dom树独立存在的,这个操作速度也要比el.appendChild(fragment)快. <br><br>再来看6. <br>6的操作就是 在el.parentNode中移除el,然后再在原始位置加入newEl. 这个步骤并没有速度优势. <br>但是 4 5 6这3个操作加起来,当el和newHTML足够复杂时,还是要比原始方法的 3 4 步更快 <br><br><br>以上就是我的分析 有不对的地方 欢迎大家抛砖. <br>同时欢迎大家来贴一下 IE 和 ff的实现方式 
<img src ="http://www.cnitblog.com/seeyeah/aggbug/43608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-05-11 22:52 <a href="http://www.cnitblog.com/seeyeah/archive/2008/05/11/43608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cross Site AJAX [转载]</title><link>http://www.cnitblog.com/seeyeah/archive/2008/04/16/42450.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Wed, 16 Apr 2008 14:04:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/04/16/42450.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/42450.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/04/16/42450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/42450.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/42450.html</trackback:ping><description><![CDATA[<p>一般情形下，为安全起见，浏览器不允许你在客户端通过XMLHttpRequest访问别的域(参考连接1,2)，即使是同一域的子域也不行，譬如www.joycode.com&nbsp;到 blog.joycode.com。(你可以通过某些设置来访问子域，但因为这方法不是很通行，所有就不考虑了，但如果你感兴趣，参考连接2。)
<p>但很明显，在不少情形下，访问别的网站，获取别的网站的信息/服务是非常有用的，特别是在这个Web 2.0时代。
<p>常用的跨站访问的方法有3种(参考连接3，4)：
<ol>
    <li>在同一域的服务器端建立一个代理，浏览器向该代理网址发送请求，然后该代理向其他域的网址发请求，在获取回复后，或作处理或按原样发回到浏览器
    <li>使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的&lt;script&gt;，将其src属性指向别的网站的网址，这个网址返回的内容必须是合法的Javascript脚本，常用的是JSON消息。
    <li>使用IFRAME。在页面内嵌或动态生成指向别的网站的IFRAME，然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。改变一个网页的anchor hash fragment并不会使浏览器重新装载网页，所以一个网页的状态得以保持，而网页本身则可以通过一个计时器(timer)来察觉自己anchor hash的变化，从而相应改变自己的状态(参考<a href="http://blog.joycode.com/saucer/archive/2006/09/13/83457.aspx"><u><font color=#0000ff>这个帖子</font></u></a>中提及的<a href="http://www.nikhilk.net/Entry.aspx?id=139" target=_blank><u><font color=#0000ff>Nikhil Kothari的历史控件</font></u></a>中的方法)。 <a href="http://blog.monstuff.com/" target=_blank><u><font color=#0000ff>Julien Couvreur</font></u></a>在他的《<a href="http://blog.monstuff.com/archives/000304.html" target=_blank><u><font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font><font color=#0000ff>-document messaging hack</font></u></a>》里描述了一个更复杂的应用情形，<br>"....<br>For example, if you have page A containing an iframe B in a different domain,then B can create a new iframe and load it with a url in the same domain as A. The url that is loaded doesn't generate a request to the server if it is properly cached and only the fragment identifier is used to pass changing information. Page A can now get the DOM handle on the new iframe and successfully retrieve the information transmitted in the url by B...." (大体这样，网页A包含了一个IFRAME B，B的网页来自一个不同的域。然后B页可以生成一个IFRAME C，把它指向与网页A同域的某个地址，因为是A与C同域，网页A可以访问C里的信息，反之亦然。) </li>
</ol>
<p><a href="http://atlas.asp.net/Default.aspx?tabid=47"><u><font color=#0000ff>ASP.NET <font style="COLOR: blue; BACKGROUND-COLOR: yellow">AJAX</font>扩展(即Atlas)</font></u></a>提供了一个桥(bridge)机制让你在服务器端配置来访问别的网站，并同时支持POX和SOAP这2种协议。想了解其中细节，请参考Atlas文档里的<a href="http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx" target=_blank><u><font color=#0000ff>《Building Mash-ups with "Atlas"》</font></u></a>。当然你完全可以自己建立一个web service，通过它来访问其他网站并返回信息。
<p>据说，Atlas中的 IFrameExecutor 可以实现跨域的调用，我按照MSDN博客<a href="http://blogs.msdn.com/federaldev/default.aspx" target=_blank><u><font color=#0000ff>Federal Developer Weblog</font></u></a>的这篇帖子<a href="http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx" target=_blank><u><font color=#0000ff>《Calling web services hosted outside of your application with &#8220;Atlas&#8221;》</font></u></a>上的步骤试了一下，但在Windows 2003 Server SP1上得到却是&#8220;Access is denied&#8221;的错误信息。然后我下载了<a href="http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip"><u><font color=#0000ff>该文中的项目</font></u></a>，试验的结果仍旧是&#8220;Access is denied&#8221;。也许需要改动一些浏览器中的什么设置才能成功，但这不是我的目的，我需要一个在普通设置下都能成功的例子。
<p>按需(On-Demand) Javascript脚本的实现是很简单的，譬如我有这样一个网页，(想测试的话，需要改动其中的网址)
<div style="MARGIN: 2em"><code>
<p>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language="javascript" type="text/javascript"&gt;<br>function loadContent()<br>{<br>var s=document.createElement('SCRIPT');<br>s.src='<a href="http://www.anotherdomain.com/TestCrossJS.aspx?f=setDivContent';"><u><font color=#0000ff>http://www.anotherdomain.com/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>JS.aspx?f=setDivContent';</font></u></a><br>document.body.appendChild(s);<br>}
<p>function setDivContent(v)<br>{<br>var dv = document.getElementById("dv");<br>dv.innerHTML = v; <br>}<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;div id="dv"&gt;&lt;/div&gt;
<p>&lt;input type="button" value="Click Me" onclick="loadContent()"&gt;<br>&lt;/body&gt;<br>&lt;/html&gt; </code></p>
</div>
<p>其中的www.anotherdomain.com/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>JS.aspx是这样的，
<div style="MARGIN: 2em"><code>
<p>&lt;script language="C#" runat="server"&gt;<br>void Page_Load(object sender, EventArgs e)<br>{<br>&nbsp; string f = Request.QueryString["f"];<br>&nbsp; Response.Clear();<br>&nbsp; Response.ContentType = "application/x-javascript";<br>&nbsp; Response.Write(String.Format(@"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0}('{1}');",&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime.Now));<br>&nbsp; Response.End();<br>}<br>&lt;/script&gt; </code></p>
</div>
<p>点击&#8220;Click Me&#8221;按钮，生成一个新的script tag，下载对应的 Javascript 脚本，结束时回调其中的setDivContent()，从而更新网页上一个div的内容。
<p>IFRAME的方法好像很流行，除了<a href="http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75" target=_blank><u><font color=#0000ff>dojo工具包支持</font></u></a>外，据微软的<a href="http://www.25hoursaday.com/weblog/default.aspx" target=_blank><u><font color=#0000ff>Dare Obasanjo</font></u></a>说(参考连接9)，<a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15" target=_blank><u><font color=#0000ff>Windows Live Contacts Gadget使用了这个方法来获取Hotmail的address book</font></u></a>。最近，<a href="http://www.plaxo.com/" target=_blank><u><font color=#0000ff>Plaxo</font></u></a>公司的开发人员 Joseph Smarr在七月的OSCON 2006会议上作了一个题为<a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html" target=_blank><u><font color=#0000ff>《<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-<font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font> <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Ajax</font>: Challenges and Techniques for Building Rich Web 2.0 Mashups》</font></u></a>的讲座[来源：<a href="http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/" target=_blank><u><font color=#800080>Kevin Yank--OSCON 2006: </font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font><font color=#800080>-</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font><font color=#800080> </font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">Ajax</font></u></a>]，<a href="http://www.plaxo.com/api" target=_blank><u><font color=#0000ff>他们将这个方法做成了一个平台</font></u></a>，允许合作伙伴间合作，他们开发的方案叫&#8220;The JavaScript Wormhole(虫洞)&#8221;，据说准备将其推广为一个标准。他讲座的PPT可以在<a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html" target=_blank><u><font color=#0000ff>这里</font></u></a><a href="http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt"><u><font color=#0000ff>下载</font></u></a>，里面对这个方案做了说明，非常值得看一下。
<p>现在将IFRAME的方法简单示范如下:
<p>1. <a href="http://domain1/TestCross.html:"><u><font color=#0000ff>http://domain1/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>.html:</font></u></a>
<div style="MARGIN: 2em"><code>
<p>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language="javascript" type="text/javascript"&gt;<br>var url = "<a href='http://domain2/TestCross.html";'><u><font color=#0000ff>http://domain2/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>.html"</font></u></a><br>var oldHash = null;<br>var timer = null;
<p>function getHash() <br>{<br>var hash = window.location.hash;<br>if ((hash.length &gt;= 1) &amp;&amp; (hash.charAt(0) == '#')) <br>{<br>hash = hash.substring(1);<br>}
<p>return hash;<br>}<br>function sendRequest()<br>{<br>var d = document;<br>var t = d.getElementById('request');<br>var f = d.getElementById('alienFrame');<br>f.src = url + "#" + t.value + "&lt;br/&gt;" + new Date();<br>}
<p>function setDivHtml(v)<br>{<br>var d = document;<br>var dv = d.getElementById('response');<br>dv.innerHTML = v;<br>}
<p>function idle()<br>{<br>var newHash = getHash();
<p>if (newHash != oldHash)<br>{<br>setDivHtml(newHash);<br>oldHash = newHash;<br>}
<p>timer = window.setTimeout(idle, 100);<br>}
<p>function window.onload()<br>{<br>timer = window.setTimeout(idle, 100);<br>}<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;
<p>请求：&lt;input type="text" id="request"&gt; &lt;input type="button" value="发送" onclick="sendRequest()" /&gt;&lt;br/&gt;<br>回复：&lt;div id="response"&gt;&lt;/div&gt;
<p>&lt;iframe id="alienFrame" src="<a href='http://domain2/TestCross.html"'><u><font color=#0000ff>http://domain2/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>.html"</font></u></a>&gt;&lt;/iframe&gt;
<p>&lt;/body&gt;<br>&lt;/html&gt; </code></p>
</div>
<p>2. <a href="http://domain2/TestCross.html:"><u><font color=#0000ff>http://domain2/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>.html:</font></u></a>
<div style="MARGIN: 2em"><code>
<p>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language="javascript" type="text/javascript"&gt;<br>var url = "<a href='http://domain1/TestCross.html";'><u><font color=#0000ff>http://domain1/Test<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>.html"</font></u></a><br>var oldHash = null;<br>var timer = null;
<p>function getHash() <br>{<br>var hash = window.location.hash;<br>if ((hash.length &gt;= 1) &amp;&amp; (hash.charAt(0) == '#')) <br>{<br>hash = hash.substring(1);<br>}
<p>return hash;<br>}<br>function sendRequest()<br>{<br>var d = document;<br>var t = d.getElementById('request');<br>var f = parent;<br>//alert(f.document); //试着去掉这个注释，你会得到&#8220;Access is denied&#8221;<br>f.location.href = url + "#" + t.value + "&lt;br/&gt;" + new Date();<br>}
<p>function setDivHtml(v)<br>{<br>var d = document;<br>var dv = d.getElementById('response');<br>dv.innerHTML = v;<br>}
<p>function idle()<br>{<br>var newHash = getHash();
<p>if (newHash != oldHash)<br>{<br>setDivHtml(newHash);<br>oldHash = newHash;<br>}
<p>timer = window.setTimeout(idle, 100);<br>}
<p>function window.onload()<br>{<br>timer = window.setTimeout(idle, 100);<br>}<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;
<p>请求：&lt;input type="text" id="request"&gt; &lt;input type="button" value="发送" onclick="sendRequest()" /&gt;&lt;br/&gt;<br>回复：&lt;div id="response"&gt;&lt;/div&gt;
<p>&lt;/body&gt;<br>&lt;/html&gt; </code></p>
</div>
<p>两个网页基本相同，第一个网页内嵌一个IFRAME，在点击&#8220;发送&#8221;按钮后，会将文本框里的内容通过hash fragment传给IFRAME。点击IFRAME里的&#8220;发送&#8221;按钮后，它会将文本框里的内容通过hash fragment传给父窗口。因为是只改动了hash fragment，浏览器不会重新load网页内容，这里使用了一个计时器来检测URL变化，如果变化了，就更新其中一个div的内容 。
<p>
<p>这个方法是不是个安全漏洞？考虑到微软的Windows Live都在使用这个方法，估计不是，<img src="http://blog.joycode.com/emoticons/emotion-1.gif">。这个方法是不是很安全？考虑到这个方法只有在2个网站协作的情形才能成功，安全问题好像不是很大，除非其中涉及的网站本身有XSS的问题。</p>
<p>【参考连接】 </p>
<p>1. Security Considerations: Dynamic HTML<br><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp"><u><font color=#0000ff>http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp</font></u></a>
<p>2. About <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-Frame Scripting and Security<br><a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp"><u><font color=#0000ff>http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp</font></u></a>
<p>3. <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-Domain Proxy<br><a href="http://ajaxpatterns.org/Cross-Domain_Proxy"><u><font color=#0000ff>http://<font style="COLOR: blue; BACKGROUND-COLOR: yellow">ajax</font>patterns.org/<font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-Domain_Proxy</font></u></a>
<p>4. <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font> Domain XMLHttpRequest using an IFrame Proxy<br><a href="http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75"><u><font color=#0000ff>http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75</font></u></a>
<p>5. Back Button Support for Atlas UpdatePanels<br><a href="http://www.nikhilk.net/BackButtonSupport.aspx"><u><font color=#0000ff>http://www.nikhilk.net/BackButtonSupport.aspx</font></u></a>
<p>6. <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-document messaging hack<br><a href="http://blog.monstuff.com/archives/000304.html"><u><font color=#0000ff>http://blog.monstuff.com/archives/000304.html</font></u></a>
<p>7. Building Mash-ups with "Atlas"<br><a href="http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx"><u><font color=#0000ff>http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx</font></u></a>
<p>8. Calling web services hosted outside of your application with &#8220;Atlas&#8221;<br><a href="http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx"><u><font color=#0000ff>http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx</font></u></a>
<p><a href="http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip"><u><font color=#0000ff>http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip</font></u></a>
<p>9. <font style="COLOR: blue; BACKGROUND-COLOR: yellow">AJAX</font> Tip: Passing Messages Between iframes <br><a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15"><u><font color=#0000ff>http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15</font></u></a>
<p>10. OSCON <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-<font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font> <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Ajax</font> Slides<br><a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html"><u><font color=#0000ff>http://blog.plaxo.com/archives/2006/07/oscon_<font style="COLOR: blue; BACKGROUND-COLOR: yellow">cross</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font>.html</font></u></a>
<p><a href="http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt"><u><font color=#0000ff>http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt</font></u></a>
<p>11. OSCON 2006: <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Cross</font>-<font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font> <font style="COLOR: blue; BACKGROUND-COLOR: yellow">Ajax</font><br><a href="http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/"><u><font color=#800080>http://www.</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font><font color=#800080>point.com/blogs/2006/07/28/oscon-2006-</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">cross</font><font color=#800080>-</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">site</font><font color=#800080>-</font><font style="COLOR: blue; BACKGROUND-COLOR: yellow">ajax</font><font color=#800080>/</font></u></a></p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/42450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-04-16 22:04 <a href="http://www.cnitblog.com/seeyeah/archive/2008/04/16/42450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原】简单分析“腾讯招聘”网站Ajax分页</title><link>http://www.cnitblog.com/seeyeah/archive/2008/03/25/41472.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Tue, 25 Mar 2008 15:36:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/03/25/41472.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/41472.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/03/25/41472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/41472.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/41472.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 链接http://hr.tencent.com/pages/position/morelist.shtml?location=sz&amp;sort=tec主要JS：http://hr.tencent.com/scripts/hr.jshttp://hr.tencent.com/scripts/xmlparser.js页面场景：其中右下角的分页是无须刷新页面的，怎么实现的呢？分析代码：1、初始化启...&nbsp;&nbsp;<a href='http://www.cnitblog.com/seeyeah/archive/2008/03/25/41472.html'>阅读全文</a><img src ="http://www.cnitblog.com/seeyeah/aggbug/41472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-03-25 23:36 <a href="http://www.cnitblog.com/seeyeah/archive/2008/03/25/41472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript的私有变量</title><link>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40992.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sun, 16 Mar 2008 02:09:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40992.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/40992.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/40992.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/40992.html</trackback:ping><description><![CDATA[JavaScript，不能创建私有变量？不会吧！<br><br>摘至：<a title=JavaScript中的私有成员 href="http://shiningray.cn/private-members-in-javascript.html" target=_blank>JavaScript中的私有成员</a><a title=JavaScript的私有变量 href="http://shiningray.cn/private-members-in-javascript.html"><br></a>原文：<a title="Private Members in JavaScript&#13;&#10;" href="http://javascript.crockford.com/private.html" target=_blank>Private Members in JavaScript </a><a href="http://javascript.crockford.com/"><br></a><br>
<hr>
<br>
<p><a href="http://www.crockford.com/javascript"><u><font color=#0000ff>JavaScript</font></u></a> 是世界上最被误解的语言。很多人认为它缺乏信息隐藏的特性所以对象不能有私有实例变量和方法。但这是一个误解。JavaScript对象同样可以拥有私有变量。下面就讲解一下：</p>
<h2>对象</h2>
<p>JavaScript根本上都是关于的对象（Object）的。数组（Array）是对象，函数（Function）是对象，Object就不说了。那什么是对象？对象是名称-值的配对的集合。名称是字符串，值可以是字符串、数字、布尔值和对象（包括数组和函数）。对象常常实现为哈希表以快速存取值。</p>
<p>如果一个值是函数，我们可以将它视为方法<em>method</em>。当调用一个对象的方法时，<tt>this </tt>变量就会被设为该对象。这个方法就可以通过<tt>this</tt>变量访问实例变量。</p>
<p>对象是由构造器<em>constructor</em>产生的，它是初始化对象的函数。构造器提供了其它语言中类提供的特性，包括静态方法和变量。</p>
<h2>公共成员</h2>
<p>对象的成员都是 <em>public</em> 公共成员。任何函数都可以访问、修改或者删除这些成员。有两种主要的途径给新的对象加入成员：</p>
<h3>构造器中</h3>
<p>这个技术一般用来初始化公共实例变量。构造器的<tt>this</tt>变量是用来向对象添加成员的。</p>
<pre>function Container(param) {    this.member = param;}</pre>
<p>这样，如果我们构造一个新的对象</p>
<pre>var myContainer = new Container('abc');</pre>
<p>那么<tt>myContainer.member </tt>就会包含<tt>&#8216;abc&#8217;</tt>。</p>
<h3>原型中</h3>
<p>这个技巧一般用来添加公共方法。当一个成员被检索且没有在对象中发现的时候，那么它就会从对象构造器的 <tt>prototype </tt>成员中去获取它。这个原型机制可用来实现继承。它也保存内存。要为一个构造器生成的所有对象加入一个方法，将函数加入构造器的<tt>prototype </tt>中:</p>
<pre>Container.prototype.stamp = function (string) {
return this.member + string;
}</pre>
<p>这样，我们可以调用这个方法</p>
<pre>myContainer.stamp('def')</pre>
<p>它会返回<tt>&#8216;abcdef&#8217;</tt>.</p>
<h2>私有成员</h2>
<p>私有<em>Private</em>成员要由构造器生成。构造器中的普通的<tt><em>var</em></tt>变量和参数都成为私有成员。</p>
<pre>function Container(param) {
this.member = param;
var secret = 3;
var self = this;}</pre>
<p>这个构造器有三个私有实例变量：<tt>param</tt>, <tt>secret</tt>, 和 <tt>self</tt>。它们被附加到了对象上，但它们无法从外部访问，同时它们也无法被这个对象的公共方法所访问。他们只对私有成员可见。私有方法则是构造器内部的函数。</p>
<pre>function Container(param) {
function dec() {
if (secret &gt; 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var self = this;
}</pre>
<p>私有方法 <tt>dec </tt>检查 <tt>secret </tt>实例变量。如果它大于<tt>0</tt>，就减少<tt>secret </tt>的大小并返回 <tt>true </tt>。否则它返回 <tt>false </tt>。这个可以限制对象使用三次。</p>
<p>按照惯例，我们给出一个私有的 <tt>self </tt>参数。这个可以令对象对私有方法可见。这种做法是因为<tt>ECMAScript Language Specification</tt>中的一个错误，这个错误令 <tt>this </tt>不能正确地对内部函数设置。</p>
<p>私有方法无法被公共方法调用。要令私有方法有用，我们需要引入一种特权方法。</p>
<h2>特权成员</h2>
<p>一个特权A <em>privileged</em> 方法可以访问私有的变量和方法，同时它对公共域可见。也可以删除或替换一个特权方法，但不能改变它。</p>
<p>特权方法是用 <tt>this </tt>在构造器中分配的。</p>
<pre>function Container(param) {
function dec() {
if (secret &gt; 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var self = this;
this.service = function () {
if (dec()) {
return self.member;
} else {
return null;
}
};
}</pre>
<p><tt>service</tt> 就是一个特权方法。前三次调用会返回<tt>&#8216;abc&#8217;</tt>。<br>之后 ，它会返回 <tt>null</tt>。<tt>service</tt>调用的私有的 <tt>dec </tt>方法，而<br><tt>dec</tt>又访问了私有的 <tt>secret</tt>变量。<tt>service</tt>对其它的对象和方法是可见的，但不能直接访问私有成员。</p>
<h2>闭包</h2>
<p>这种公共、私有和特权成员的模式是可行的原因是由于JavaScript有 <em>closure</em>闭包。这个意味着一个内部的函数总是可以访问这个函数外部的变量和参数，甚至在外部的函数返回之后。这是这个语言的一个极其强大的特性。目前没有哪本关于JavaScript编程的书展示了如何发掘这个特性。大多数都没有提到。</p>
<p>私有和特权成员只能在对象构造的时候生成。公共成员可以在任意时刻添加。</p>
<h2>模式</h2>
<h3>公共（Public）</h3>
<pre>function <em>Constructor</em>(&#8230;) {
this.<em>membername</em> = <em>value</em>;
}
<em>Constructor</em>.prototype.<em>membername</em> = <em>value</em>;</pre>
<h3>私有（Private）</h3>
<pre>function <em>Constructor</em>(&#8230;) {
var self =  this;
var <em>membername</em> =  <em>value</em>;
function  <em>membername</em>(&#8230;)  {&#8230;}
}</pre>
<p>注意，实际上函数语句</p>
<pre>function  <em>membername</em>(&#8230;)  {&#8230;}
</pre>
<p>是以下语句的缩写，两者相同：</p>
<pre>var  <em>membername</em> = function  <em>membername</em>(&#8230;)  {&#8230;};</pre>
<h3>特权（Privileged）</h3>
<pre>function <em>Constructor</em>(&#8230;) {
this.<em>membername</em> =  function (&#8230;)  {&#8230;};
}
</pre>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/40992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-03-16 10:09 <a href="http://www.cnitblog.com/seeyeah/archive/2008/03/16/40992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript Closures</title><link>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40981.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 15 Mar 2008 16:32:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40981.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/40981.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/03/16/40981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/40981.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/40981.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 深入理解Javascript的&#8220;闭包&#8221;概念！引用：http://jibbering.com/faq/faq_notes/closures.htmlIntroductionClosureA "closure" is an expression (typically a function) that can have free variables tog...&nbsp;&nbsp;<a href='http://www.cnitblog.com/seeyeah/archive/2008/03/16/40981.html'>阅读全文</a><img src ="http://www.cnitblog.com/seeyeah/aggbug/40981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-03-16 00:32 <a href="http://www.cnitblog.com/seeyeah/archive/2008/03/16/40981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>英语技术文章【20080303】</title><link>http://www.cnitblog.com/seeyeah/archive/2008/03/03/40407.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 03 Mar 2008 15:12:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/03/03/40407.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/40407.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/03/03/40407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/40407.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/40407.html</trackback:ping><description><![CDATA[1、<strong>Writing Object-Oriented JavaScript<br></strong>详细介绍用OO的方式写JS<br><a href="http://www.codeproject.com/KB/aspnet/JsOOP1.aspx">http://www.codeproject.com/KB/aspnet/JsOOP1.aspx</a><br><a href="http://www.codeproject.com/KB/aspnet/JsOOP2.aspx">http://www.codeproject.com/KB/aspnet/JsOOP2.aspx</a><br><a href="http://www.codeproject.com/KB/aspnet/JsOOP3.aspx">http://www.codeproject.com/KB/aspnet/JsOOP3.aspx</a><br><br>2、<span class=ArticleTopTitle id=ctl00_ArticleTopHeader_ArticleTitle><strong>Declarative QueryString Parameter Binding</strong><br>使用Attribute绑定QueryString值到变量的方法，Attribute的又一个有趣的使用方法。<br><a href="http://www.codeproject.com/KB/aspnet/WebParameter.aspx">http://www.codeproject.com/KB/aspnet/WebParameter.aspx</a><br><br></span>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/40407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-03-03 23:12 <a href="http://www.cnitblog.com/seeyeah/archive/2008/03/03/40407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个ExtJS的综合示例</title><link>http://www.cnitblog.com/seeyeah/archive/2008/01/23/39258.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Wed, 23 Jan 2008 15:23:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/01/23/39258.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/39258.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/01/23/39258.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/39258.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/39258.html</trackback:ping><description><![CDATA[<span class=hilite1>摘至：javaeye BBS<br><br>ExtJS</span>算是一重量级的客户端框架了,如何把他与传统的Web应用集成？是所有的地方都用Ext，还是在某些地方使用，另外是每一个页面都引入ext-all.js，还是让整个应用只加载在这个大家伙一次？我们又该如何开发自定义的控件，如何充分使用javascript的面向对象特性对我们的应用进行封装呢？ <br><br>下面推荐我们团队的williamRaym及冷雨所做的一个<span class=hilite1>ExtJS</span>综合示例，是一个<span class=hilite1>ExtJS</span>2.0+Spring2.r+JPA(Hibernate3.2)+EasyJWeb-1.0技术构造开发的单用户Blog应用，比较简单， 有兴趣的朋友可以看一看，相关Ext应用代码可以在登录进入系统后可以直接另存为即可。 <br><br>　　示例应用的地址： <a href="http://wlr.easyjf.com/" target=_blank><u><font color=#0000ff>http://wlr.easyjf.com/</font></u></a> <br><br>　　后台管理：用户名为admin　密码也是admin <br><br>　　下面是一些截图： <br><br>　　Blog后台登录 <br>　　<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/easyjf/22.PNG" _counted="undefined"> <br><br><br>　　后台主页 <br>　　<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/easyjf/2.PNG" _counted="undefined"> <br><br><br>　　分类管理 <br>　　<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/easyjf/3.PNG" _counted="undefined"> <br><br>　　发布日志 <br>　　<img src="http://www.blogjava.net/images/blogjava_net/williamraym/4.PNG" _counted="undefined"> <br><br>　　用户管理 <br>　　<img src="http://www.blogjava.net/images/blogjava_net/williamraym/5.PNG" _counted="undefined"> <br><br>　　上传照片 <br>　　<img src="http://www.blogjava.net/images/blogjava_net/williamraym/6.PNG" _counted="undefined"> <br><br>　　这是一个简单的单用户博客，有文章发布、上传图片、评论等常用功能，后台使用ext做的界面。代码过段时间会完善之后会发布出来提供下载。 
<img src ="http://www.cnitblog.com/seeyeah/aggbug/39258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-01-23 23:23 <a href="http://www.cnitblog.com/seeyeah/archive/2008/01/23/39258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DomHelper - Create Elements using DOM, HTML fragments and Templates </title><link>http://www.cnitblog.com/seeyeah/archive/2008/01/10/38728.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 10 Jan 2008 15:28:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/01/10/38728.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/38728.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/01/10/38728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/38728.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/38728.html</trackback:ping><description><![CDATA[From：<a class=post-title href="http://www.jackslocum.com/blog/2006/10/06/domhelper-create-elements-using-dom-html-fragments-or-templates/" rel=bookmark><u><font color=#800080>DomHelper - Create Elements using DOM, HTML fragments and Templates</font></u></a> <br>
<hr>
<div class=content contentIndex="1">
<blockquote><strong>Update: DomHelper vs. Scriptaculous Builder vs. MochiKit DOM</strong> <br>I had some time to fool around tonight so I created <a href="http://www.jackslocum.com/blog/examples/domhelper.php"><u><font color=#0000ff>this page</font></u></a> with live head to head benchmarks against prototype+Scriptaculous and MochiKit's excellent DOM library. Check it out and see for yourself. The results are unbelievable.</blockquote><span class=comment-mark id=mark-1 title="1 comment" contentIndex="1"><span class=comment-mark-text></span></span></div>
<div class=content contentIndex="2">If you are doing JavaScript development, then at some point or another you have probably had to use DOM to create elements. Like everything else with DOM, creating elements can be extremely verbose, leading to bloated code and spending too much time doing something that should be simple. </div>
<div class=content contentIndex="3">Creating elements using DOM can also have poor performance, especially in Internet Explorer. To maximize performance and maintain standards, any DOM creation classes should support both DOM and HTML fragments. HTML fragments are extremely fast in Internet Explorer, sometimes as much as 300% faster. <span class=comment-mark id=mark-3 title="3 comments" contentIndex="3"><span class=comment-mark-text>3</span></span></div>
<div class=content contentIndex="4">The DomHelper class in the 0.32.2 release provides a layer of abstraction from DOM and transparently supports creating elements via DOM or using HTML fragments. It also has the ability to create HTML fragment templates from your DOM building code.<span class=comment-mark id=mark-4 title="1 comment" contentIndex="4"><span class=comment-mark-text>1</span></span></div>
<div class="content content-title" contentIndex="5"><strong>Simple Examples</strong></div>
<div class=content contentIndex="6">To save me from typing it out every time, the examples below are going to assume that a shorthand variable <em>dh</em> has being defined for YAHOO.ext.DomHelper.</div>
<div class=content contentIndex="7">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>dh</span><span class=hl-default> = </span><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>;</span></code></pre>
</div>
<div class=content contentIndex="8">Let's look at a simple example:</div>
<div class=content contentIndex="9">
<pre class=highlighted><code><span class=hl-comment>// The context element 'my-div' can either be the id or the actual node
</span><span class=hl-reserved>var </span><span class=hl-identifier>list</span><span class=hl-default> = </span><span class=hl-identifier>dh</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>my-div</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>ul</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>cls</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>my-list</span><span class=hl-quotes>'</span><span class=hl-brackets>})</span><span class=hl-default>;</span></code></pre>
<span class=comment-mark id=mark-9 title="2 comments" contentIndex="9"><span class=comment-mark-text></span></span></div>
<div class=content contentIndex="10">Since DomHelper transparently uses DOM or HTML fragments, it manages appending the elements as well. This is a nice feature since it will save you from having to manually append everything after creating it.<span class=comment-mark id=mark-10 title="2 comments" contentIndex="10"><span class=comment-mark-text>2</span></span></div>
<div class=content contentIndex="11">Let's expand the example:</div>
<div class=content contentIndex="12">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>list</span><span class=hl-default> = </span><span class=hl-identifier>dh</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>my-div</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>{
</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>ul</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>cls</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>my-list</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>children</span><span class=hl-code>: </span><span class=hl-brackets>[
{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item0</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item 0</span><span class=hl-quotes>'</span><span class=hl-brackets>}</span><span class=hl-code>,
</span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item1</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item 1</span><span class=hl-quotes>'</span><span class=hl-brackets>}</span><span class=hl-code>,
</span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item2</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item 2</span><span class=hl-quotes>'</span><span class=hl-brackets>}</span><span class=hl-code>,
</span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item3</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item 3</span><span class=hl-quotes>'</span><span class=hl-brackets>}</span><span class=hl-code>,
</span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item4</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item 4</span><span class=hl-quotes>'</span><span class=hl-brackets>}
]
})</span><span class=hl-default>;</span></code></pre>
</div>
<div class=content contentIndex="13">All attributes on the passed object "o" are assumed to be element attributes, except for 4 special attributes:</div>
<div class=content contentIndex="14">
<ul class=list>
    <li><em>tag</em> - The tag name of the element
    <li><em>children</em> - An array of the same kind of element definition objects to be created and appended. These can be nested as deep as you want.
    <li><em>cls</em> - The class attribute of the element. "class" is a reserved word and className is too long. This will end up being either the "class" attribute on a HTML fragment or className for a DOM node, depending on whether DomHelper is using fragments or DOM.
    <li><em>html</em> - The innerHTML for the element. </li>
</ul>
<span class=comment-mark id=mark-14 title="2 comments" contentIndex="14"><span class=comment-mark-text></span></span></div>
<div class=content contentIndex="15">Here's a list of the insertion methods supported:</div>
<div class=content contentIndex="16">
<ul class=list>
    <li><em>append(&lt;HTMLElement/String&gt; el, &lt;Object&gt; o)</em> - Creates new DOM element(s) defined by o and appends them to el
    <li><em>insertBefore(&lt;HTMLElement/String&gt; el, &lt;Object&gt; o)</em> - Creates new DOM element(s) defined by o and inserts them before el
    <li><em>insertAfter(&lt;HTMLElement/String&gt; el, &lt;Object&gt; o)</em> - Creates new DOM element(s) defined by o and inserts them after el
    <li><em>overwrite(&lt;HTMLElement/String&gt; el, &lt;Object&gt; o)</em> - Creates new DOM element(s) defined by o and overwrites the contents of el with them
    <li><em>createTemplate(&lt;Object&gt; o)</em> - Creates a template from the DOM element(s) defined by o (See below)
    <li><em>insertHtml(&lt;String&gt; where, &lt;HTMLElement&gt; el, &lt;String&gt; html)</em> - Inserts fragments into the DOM. It supports four insertion points related to el (which are named after the same points in IE's insertAdjacentHTML): beforeBegin, afterBegin, beforeEnd, afterEnd. </li>
</ul>
<span class=comment-mark id=mark-16 title="2 comments" contentIndex="16"><span class=comment-mark-text></span></span></div>
<div class="content content-title" contentIndex="17"><strong>OK, I've seen this before. What's so special about this implementation?</strong></div>
<div class=content contentIndex="18">Under the hood when you are creating your elements, DomHelper will transparently create HTML fragments when it can. Using HTML fragments instead of DOM can significantly boost performance. If you don't like performance boosts and you want to force it to use DOM, you can:</div>
<div class=content contentIndex="19">
<pre class=highlighted><code><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>.</span><span class=hl-identifier>useDom</span><span class=hl-default> = </span><span class=hl-reserved>true</span><span class=hl-default>;</span></code></pre>
<span class=comment-mark id=mark-19 title="1 comment" contentIndex="19"><span class=comment-mark-text></span></span></div>
<div class=content contentIndex="20">The real power is in the built-in templating. The "o" parameter for createTemplate() has the same syntax as all the other methods only it doesn't create or append any elements. Instead it returns a Template object which can be used over and over to insert new elements. Let's revisit the example above, and use a template this time:</div>
<div class=content contentIndex="21">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>list</span><span class=hl-default> = </span><span class=hl-identifier>dh</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>my-div</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>{</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>ul</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>cls</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>my-list</span><span class=hl-quotes>'</span><span class=hl-brackets>})</span><span class=hl-default>;
</span><span class=hl-reserved>var </span><span class=hl-identifier>tpl</span><span class=hl-default> = </span><span class=hl-identifier>dh</span><span class=hl-default>.</span><span class=hl-identifier>createTemplate</span><span class=hl-brackets>({</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>li</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>item{0}</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>List Item {0}</span><span class=hl-quotes>'</span><span class=hl-brackets>})</span><span class=hl-default>;
</span><span class=hl-reserved>for</span><span class=hl-brackets>(</span><span class=hl-reserved>var </span><span class=hl-identifier>i</span><span class=hl-code> = </span><span class=hl-number>0</span><span class=hl-code>; </span><span class=hl-identifier>i</span><span class=hl-code> &lt; </span><span class=hl-number>5</span><span class=hl-code>, </span><span class=hl-identifier>i</span><span class=hl-code>++</span><span class=hl-brackets>){
</span><span class=hl-identifier>tpl</span><span class=hl-code>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-identifier>list</span><span class=hl-code>, </span><span class=hl-brackets>[</span><span class=hl-identifier>i</span><span class=hl-brackets>])</span><span class=hl-code>;
</span><span class=hl-brackets>}</span></code></pre>
</div>
<div class=content contentIndex="22">Template objects support the same insertion methods of DomHelper. The 2nd parameter to the insertion methods is either an array (for numeric template parameters, like the above example) or an object (for named parameters).</div>
<div class=content contentIndex="23">The Template object can also be used on it's own:</div>
<div class=content contentIndex="24">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>html</span><span class=hl-default> = </span><span class=hl-quotes>'</span><span class=hl-string>&lt;a id="{0}" href="{1}" class="nav"&gt;{2}&lt;/a&gt;</span><span class=hl-quotes>'</span><span class=hl-default>;
</span><span class=hl-reserved>var </span><span class=hl-identifier>tpl</span><span class=hl-default> = </span><span class=hl-reserved>new </span><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>.</span><span class=hl-identifier>Template</span><span class=hl-brackets>(</span><span class=hl-identifier>html</span><span class=hl-brackets>)</span><span class=hl-default>;
</span><span class=hl-identifier>tpl</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>blog-roll</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>[</span><span class=hl-quotes>'</span><span class=hl-string>link1</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-quotes>'</span><span class=hl-string>http://www.jackslocum.com/</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-quotes>"</span><span class=hl-string>Jack's Site</span><span class=hl-quotes>"</span><span class=hl-brackets>])</span><span class=hl-default>;
</span><span class=hl-identifier>tpl</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>blog-roll</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>[</span><span class=hl-quotes>'</span><span class=hl-string>link2</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-quotes>'</span><span class=hl-string>http://www.dustindiaz.com/</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-quotes>"</span><span class=hl-string>Dustin's Site</span><span class=hl-quotes>"</span><span class=hl-brackets>])</span><span class=hl-default>;</span></code></pre>
</div>
<div class=content contentIndex="25">Here's the same example using named parameters:</div>
<div class=content contentIndex="26">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>html</span><span class=hl-default> = </span><span class=hl-quotes>'</span><span class=hl-string>&lt;a id="{id}" href="{url}" class="nav"&gt;{text}&lt;/a&gt;</span><span class=hl-quotes>'</span><span class=hl-default>;
</span><span class=hl-reserved>var </span><span class=hl-identifier>tpl</span><span class=hl-default> = </span><span class=hl-reserved>new </span><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>.</span><span class=hl-identifier>Template</span><span class=hl-brackets>(</span><span class=hl-identifier>html</span><span class=hl-brackets>)</span><span class=hl-default>;
</span><span class=hl-identifier>tpl</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>blog-roll</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>{
</span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>link1</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>url</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>http://www.jackslocum.com/</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>text</span><span class=hl-code>: </span><span class=hl-quotes>"</span><span class=hl-string>Jack's Site</span><span class=hl-quotes>"
</span><span class=hl-brackets>})</span><span class=hl-default>;
</span><span class=hl-identifier>tpl</span><span class=hl-default>.</span><span class=hl-identifier>append</span><span class=hl-brackets>(</span><span class=hl-quotes>'</span><span class=hl-string>blog-roll</span><span class=hl-quotes>'</span><span class=hl-code>, </span><span class=hl-brackets>{
</span><span class=hl-identifier>id</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>link2</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>url</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>http://www.dustindiaz.com/</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>text</span><span class=hl-code>: </span><span class=hl-quotes>"</span><span class=hl-string>Dustin's Site</span><span class=hl-quotes>"
</span><span class=hl-brackets>})</span><span class=hl-default>;</span></code></pre>
<span class=comment-mark id=mark-26 title="1 comment" contentIndex="26"><span class=comment-mark-text></span></span></div>
<div class="content content-title" contentIndex="27"><strong>Compiling Templates</strong></div>
<div class=content contentIndex="28">It's probably not shocking that the templates are applied using regular expressions. The performance is great, but if you are adding a bunch of DOM elements using the same template, you can increase performance even further by "compiling" the template. The way "compile()" works is the template is parsed and broken up at the different variable points and a dynamic function is created and eval'ed. The generated function performs string concatenation of these parts and the passed variables instead of using regular expressions. <span class=comment-mark id=mark-28 title="1 comment" contentIndex="28"><span class=comment-mark-text>1</span></span></div>
<div class=content contentIndex="29">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>html</span><span class=hl-default> = </span><span class=hl-quotes>'</span><span class=hl-string>&lt;a id="{id}" href="{url}" class="nav"&gt;{text}&lt;/a&gt;</span><span class=hl-quotes>'</span><span class=hl-default>;
</span><span class=hl-reserved>var </span><span class=hl-identifier>tpl</span><span class=hl-default> = </span><span class=hl-reserved>new </span><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>.</span><span class=hl-identifier>Template</span><span class=hl-brackets>(</span><span class=hl-identifier>html</span><span class=hl-brackets>)</span><span class=hl-default>;
</span><span class=hl-identifier>tpl</span><span class=hl-default>.</span><span class=hl-identifier>compile</span><span class=hl-brackets>()</span><span class=hl-default>;
</span><span class=hl-comment>//... use template like normal</span></code></pre>
</div>
<div class="content content-title" contentIndex="30"><strong>Benchmarks</strong></div>
<div class=content contentIndex="31">I did some benchmarking while creating these classes to see how different things would perform. I executed the code below in a loop 1000 times, which creates and appends 3000 new elements. I also had a non-template version which built the exact same thing.<span class=comment-mark id=mark-31 title="3 comments" contentIndex="31"><span class=comment-mark-text>3</span></span></div>
<div class=content contentIndex="32">
<pre class=highlighted><code><span class=hl-reserved>var </span><span class=hl-identifier>spec</span><span class=hl-default> = </span><span class=hl-brackets>{
</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>div</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>style</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>width:100%;border:1px solid blue;</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>cls</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>wtf</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>children</span><span class=hl-code>: </span><span class=hl-brackets>[{
</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>a</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>href</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>{url}</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>children</span><span class=hl-code>: </span><span class=hl-brackets>[{
</span><span class=hl-identifier>tag</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>span</span><span class=hl-quotes>'</span><span class=hl-code>,
</span><span class=hl-identifier>html</span><span class=hl-code>: </span><span class=hl-quotes>'</span><span class=hl-string>{text}</span><span class=hl-quotes>'
</span><span class=hl-brackets>}]
}]
}</span><span class=hl-default>;
</span><span class=hl-reserved>var </span><span class=hl-identifier>template</span><span class=hl-default> = </span><span class=hl-identifier>YAHOO</span><span class=hl-default>.</span><span class=hl-identifier>ext</span><span class=hl-default>.</span><span class=hl-identifier>DomHelper</span><span class=hl-default>.</span><span class=hl-identifier>createTemplate</span><span class=hl-brackets>(</span><span class=hl-identifier>spec</span><span class=hl-brackets>)</span><span class=hl-default>;</span></code></pre>
</div>
<div class=content contentIndex="33">Below are the average times by browser. Notice the HUGE difference in IE6, 1.35 to .300. The DOM implemenation in IE6 must be written in VB with that performance <img class=wp-smiley alt=;) src="http://www.jackslocum.com/blog/wp-includes/images/smilies/icon_wink.gif"> . Opera 9's performance creating nodes is amazing as usual. </div>
<div class=content contentIndex="34"><style type=text/css>#bench TD {
BORDER-RIGHT: #dddddd 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #dddddd 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #dddddd 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #dddddd 1px solid; BORDER-COLLAPSE: collapse
}
</style></div>
<div class=content contentIndex="35">
<table id=bench style="MARGIN-BOTTOM: 15px" cellSpacing=0 cellPadding=5 border=0>
    <tbody>
        <tr style="BACKGROUND: #eeeeee">
            <td>Insertion Method</td>
            <td>IE7 beta 2</td>
            <td>IE6</td>
            <td>FF 1.5</td>
            <td>Opera 9</td>
        </tr>
        <tr>
            <td>DOM</td>
            <td>.730</td>
            <td><strong>1.35</strong></td>
            <td>.420</td>
            <td>.280</td>
        </tr>
        <tr>
            <td>HTML Fragments</td>
            <td>.360</td>
            <td>.380</td>
            <td>.400</td>
            <td>.260</td>
        </tr>
        <tr>
            <td>Template</td>
            <td>.320</td>
            <td>.335</td>
            <td>.385</td>
            <td>.220</td>
        </tr>
        <tr>
            <td>Compiled Template</td>
            <td>.295</td>
            <td>.300</td>
            <td>.350</td>
            <td>.210</td>
        </tr>
    </tbody>
</table>
<span class=comment-mark id=mark-35 title="2 comments" contentIndex="35"><span class=comment-mark-text></span></span></div>
<div class=content contentIndex="36">The overall performance improvement of using DomHelper alone was good enough to&nbsp; merit the work. I can't wait to replace the Grid component's row building code with compiled templates.</div>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/38728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-01-10 23:28 <a href="http://www.cnitblog.com/seeyeah/archive/2008/01/10/38728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJs tutorial</title><link>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38580.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 07 Jan 2008 16:54:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38580.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/38580.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/38580.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/38580.html</trackback:ping><description><![CDATA[<a href="http://203.93.254.59:8889/extdoc/html/index.html">http://203.93.254.59:8889/extdoc/html/index.html</a><br><br>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/38580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-01-08 00:54 <a href="http://www.cnitblog.com/seeyeah/archive/2008/01/08/38580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tutorial:What is that Scope all about (Chinese)</title><link>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38578.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Mon, 07 Jan 2008 16:17:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38578.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/38578.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2008/01/08/38578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/38578.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/38578.html</trackback:ping><description><![CDATA[原文：<a href="http://extjs.com/learn/Tutorial:What_is_that_Scope_all_about_%28Chinese%29">http://extjs.com/learn/Tutorial:What_is_that_Scope_all_about_%28Chinese%29</a><br>
<table>
    <tbody>
        <tr>
            <td style="COLOR: #333399"><strong>Summary:</strong> 本教程讲解了Javascript中的作用域（scope）几个要点和变量可见度（variables visibility）等的问题。 </td>
        </tr>
        <tr>
            <td style="COLOR: #333399"><strong>Author:</strong> Jozef Sakalos(译者：<a class="external text" title=http://extjs.com/forum/member.php?u=572 href="http://extjs.com/forum/member.php?u=572" rel=nofollow><u><font color=#0000ff>Frank Cheung</font></u></a>) </td>
        </tr>
        <tr>
            <td style="COLOR: #333399"><strong>Published:</strong> August 27, 2007 </td>
        </tr>
        <tr>
            <td style="COLOR: #333399"><strong>Ext Version:</strong> 1.1+ / 2.0+ </td>
        </tr>
    </tbody>
</table>
<br>
<hr>
<span class=mw-headline>事前准备</span>
<p>学习本教程的最佳方法是随手准备好<a class="external text" title=http://firefox.com href="http://firefox.com/" rel=nofollow>Firefox</a>中的工具<a class="external text" title=http://getfirebug.com href="http://getfirebug.com/" rel=nofollow>Firebug</a>。这样使得您可以即刻测试教程的例子。 </p>
<p>如果机子上还没有FireFox和FireBug，就应该尽快安装一套来用。</p>
<a name=.E5.AE.9A.E4.B9.89></a>
<h3><span class=editsection><a title="Edit section: 定义" href="http://extjs.com/learn/w/index.php?title=Tutorial:What_is_that_Scope_all_about_%28Chinese%29&amp;action=edit&amp;section=2"><img src="http://extjs.com/learn/w/skins/extjs/page_edit.png"></a></span> <span class=mw-headline>定义</span></h3>
<p><strong>作用域scope</strong><br>1.（名词）某样事物执行、操作、拥有控制权的那么一个区域 <a class="external autonumber" title=http://www.tfd.com/scope href="http://www.tfd.com/scope" rel=nofollow>[1]</a><br>2. （名词） 编写程序时，程序之中变量的可见度；例如，一个函数能否使用另外一个函数所创建的变量。<a class="external autonumber" title=http://computing-dictionary.tfd.com/scope href="http://computing-dictionary.tfd.com/scope" rel=nofollow>[2]</a><br></p>
<p>可是这能够说明什么问题呢？ 每当有人在说&#8220;这是作用域的问题&#8221;或&#8220;作用域搞错了&#8221;的时候，那就是说某个函数运行起来的时候，找不到正确变量的位置。这样我们便知道应该从哪一方面入手，查找出问题所在。 </p>
<a name=.E6.AD.A3.E5.BC.8F.E5.BC.80.E5.A7.8B></a>
<h3><span class=editsection><a title="Edit section: 正式开始" href="http://extjs.com/learn/w/index.php?title=Tutorial:What_is_that_Scope_all_about_%28Chinese%29&amp;action=edit&amp;section=3"><img src="http://extjs.com/learn/w/skins/extjs/page_edit.png"></a></span> <span class=mw-headline>正式开始</span></h3>
<p>实际上每一个你定义的函数都是某个对象的方法。甚至是这样的写法： </p>
<pre class="source source-javascript"><span class=kw2><strong><font color=#003366>function</font></strong></span> fn<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font> <span class=br0><font color=#66cc66>{</font></span>
<span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span><span class=nu0><font color=#cc0000>11</font></span><span class=br0><font color=#66cc66>)</font></span>;
<span class=br0><font color=#66cc66>}</font></span></pre>
<p>老兄你不是故弄玄虚吧～。做一个这样的演示可真得是简单得要命。没错！本例不需要任何Javascript文件，服务器或html。你只要打开firefox，弹出firebug,点击console tab。在Firefox状态栏上面看到有&gt;&gt;&gt;提示的地方就可以输入了。 </p>
<p>输入： </p>
<pre class="source source-javascript"><span class=kw2><strong><font color=#003366>function</font></strong></span> fn<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font> <span class=br0><font color=#66cc66>{</font></span> <span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span><span class=nu0><font color=#cc0000>11</font></span><span class=br0><font color=#66cc66>)</font></span>; <span class=br0><font color=#66cc66>}</font></span>;</pre>
<p>然后回车。一切安然...你刚才做的实际上是定义了一个函数fn。接着试试： </p>
<pre class="source source-javascript">fn<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;</pre>
<p>然后回车。得到11的警告窗口？还不错吧？接着试试： </p>
<pre class="source source-javascript">window.<span class=me1><font color=#006600>fn</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;
<span class=kw1><strong><font color=#000066>this</font></strong></span>.<span class=me1><font color=#006600>fn</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;</pre>
<p>得到一样的结果吧？这是因为函数fn是window对象的一个方法，在第二行的"this"的作用域实际指向了windows对象。不过多数情况中你不需要像这样window.myFunction(...)地调用函数，这样太麻烦了，程序员工作起来会很不方便。 </p>
<a name=window.E5.AF.B9.E8.B1.A1></a>
<h3><span class=editsection><a title="Edit section: window对象" href="http://extjs.com/learn/w/index.php?title=Tutorial:What_is_that_Scope_all_about_%28Chinese%29&amp;action=edit&amp;section=4"><img src="http://extjs.com/learn/w/skins/extjs/page_edit.png"></a></span> <span class=mw-headline>window对象</span></h3>
<p><strong>window</strong> 对象总是存在的，你可理解其为一个浏览器窗口对象。它包含了其它所有的对象如<strong>document</strong> 和所有的全局变量。 </p>
<p>你可以打开Firebug，切换到 <strong>Script</strong> 页面并在Firebug右侧的<strong>New watch expression...</strong> 里面输入 <strong>window</strong>。观察window对象究竟有什么在里面。 </p>
<p>接着，尝试找出我们之前定义过的<strong>fn</strong>函数。 </p>
<p><strong>另外，每个frame或iframe拥有其自身的window对象，其自身的全局空间。</strong> </p>
<a name=.E7.90.86.E8.A7.A3.E4.BD.9C.E7.94.A8.E5.9F.9F></a>
<h3><span class=editsection><a title="Edit section: 理解作用域" href="http://extjs.com/learn/w/index.php?title=Tutorial:What_is_that_Scope_all_about_%28Chinese%29&amp;action=edit&amp;section=5"><img src="http://extjs.com/learn/w/skins/extjs/page_edit.png"></a></span> <span class=mw-headline>理解作用域</span></h3>
<p>接下的内容开始有点复杂了。切换到Firebug <strong>Console</strong>标签页然后输入： </p>
<pre class="source source-javascript"><span class=kw2><strong><font color=#003366>var</font></strong></span> o1 = <span class=br0><font color=#66cc66>{</font></span>testvar:<span class=nu0><font color=#cc0000>22</font></span>, fun:<span class=kw2><strong><font color=#003366>function</font></strong></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font> <span class=br0><font color=#66cc66>{</font></span> <span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span><span class=st0><font color=#3366cc>'o1: '</font></span> + <span class=kw1><strong><font color=#000066>this</font></strong></span>.<span class=me1><font color=#006600>testvar</font></span><span class=br0><font color=#66cc66>)</font></span>; <font color=#66cc66><span class=br0>}</span><span class=br0>}</span></font>;
<span class=kw2><strong><font color=#003366>var</font></strong></span> o2 = <span class=br0><font color=#66cc66>{</font></span>testvar:<span class=nu0><font color=#cc0000>33</font></span>, fun:<span class=kw2><strong><font color=#003366>function</font></strong></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font> <span class=br0><font color=#66cc66>{</font></span> <span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span><span class=st0><font color=#3366cc>'o2: '</font></span> + <span class=kw1><strong><font color=#000066>this</font></strong></span>.<span class=me1><font color=#006600>testvar</font></span><span class=br0><font color=#66cc66>)</font></span>; <font color=#66cc66><span class=br0>}</span><span class=br0>}</span></font>;</pre>
<p>结果是什么？你声明了<strong>o1</strong> 和 <strong>o2</strong>两个对象，分别都有一些属性和方法，但值不同。 </p>
<p><br>接着试试： </p>
<pre class="source source-javascript">fun<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;
window.<span class=me1><font color=#006600>fun</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;
<span class=kw1><strong><font color=#000066>this</font></strong></span>.<span class=me1><font color=#006600>fun</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;</pre>
<p>出错了，是吧？因为window对象（等价于this）并没有fun的方法。试一试下面的： </p>
<pre class="source source-javascript">o1.<span class=me1><font color=#006600>fun</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;
o2.<span class=me1><font color=#006600>fun</font></span><font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;</pre>
<p>22和33出来了？非常好！ </p>
<p>接下来这部分的内容最复杂啦。基于这个原始的函数，如果对象的数量多的话，你必须为每个对象加上这个函数－明显是重复劳动了。这样说吧，o1.fun写得非常清晰的而且为了搞掂它已经占用了我一个星期的开发时间。想象一下代码到处散布着<strong>this</strong>变量，怎么能不头疼？如果要将调用（执行）的o1.fun方法但<strong>this</strong>会执行o2,应该怎么实现呢？试一试下面的： </p>
<pre class="source source-javascript">o1.<span class=me1><font color=#006600>fun</font></span>.<span class=me1><font color=#006600>call</font></span><span class=br0><font color=#66cc66>(</font></span>o2<span class=br0><font color=#66cc66>)</font></span>;</pre>
<p>明白了吗？当执行o1的fun方法时你强行将变量<strong>this</strong>指向到o2这个对象，换句话说，更加严谨地说:<strong>o1.fun的方法在对象o2的作用域下运行。</strong> </p>
<p>当运行一个函数，一个对象的方法时，你可将作用域当作<strong>this值的变量</strong>。 </p>
<a name=.E5.8F.98.E9.87.8F.E7.9A.84.E5.8F.AF.E8.A7.81.E5.BA.A6></a>
<h3><span class=editsection><a title="Edit section: 变量的可见度" href="http://extjs.com/learn/w/index.php?title=Tutorial:What_is_that_Scope_all_about_%28Chinese%29&amp;action=edit&amp;section=6"><img src="http://extjs.com/learn/w/skins/extjs/page_edit.png"></a></span> <span class=mw-headline>变量的可见度</span></h3>
<p>变量的可见度和作用域的关系非常密切。我们已经了解到，可在任何对象的外部，声明变量，或在全局的函数（函数也是变量的一种）也可以，更严格说，它们是全局对象<strong>window</strong>的属性。 <strong>全局变量在任何地方都可见；无论函数的内部还是外部。如果你在某一个函数内修改了一个全局变量，其它函数也会得知这个值是修改过的。</strong> </p>
<p>对象可以有它自己的属性（像上面的<strong>testvar</strong>）,这些属性允许从内部或是外部均是可见的。试： </p>
<pre class="source source-javascript"><span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span>o1.<span class=me1><font color=#006600>testvar</font></span><span class=br0><font color=#66cc66>)</font></span>; <span class=co1><em><font color=#009900>// 从外部访问o1的属性testvar</font></em></span></pre>
<p>从内部访问的演示可在两个测试对象的<strong>fun</strong>方法找到。 </p>
<p>用关键字<strong>var</strong>在内部声明，相当于声明局部变量（局部声明也是在一条链上，即Scope Chain 作用域链上,Frank注）： </p>
<pre class="source source-javascript">i = <span class=nu0><font color=#cc0000>44</font></span>;
<span class=kw2><strong><font color=#003366>function</font></strong></span> fn2<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font> <span class=br0><font color=#66cc66>{</font></span>
<span class=kw2><strong><font color=#003366>var</font></strong></span> i = <span class=nu0><font color=#cc0000>55</font></span>;
<span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span>i<span class=br0><font color=#66cc66>)</font></span>;
<span class=br0><font color=#66cc66>}</font></span>
fn2<font color=#66cc66><span class=br0>(</span><span class=br0>)</span></font>;</pre>
<p>将得到什么？对了，55。声明在函数fn2的变量<strong>i</strong>是一个本地变量（局部变量），和等于44的全局变量<strong>i</strong> 44没什么关系。 But: </p>
<pre class="source source-javascript"><span class=kw3><font color=#000066>alert</font></span><span class=br0><font color=#66cc66>(</font></span>i<span class=br0><font color=#66cc66>)</font></span>;</pre>
<p>这会访问全局变量<strong>i</strong>，显示44。 </p>
<p>希望本文能帮助读者彻底理解作用域变量可见性的含义。</p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/38578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2008-01-08 00:17 <a href="http://www.cnitblog.com/seeyeah/archive/2008/01/08/38578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读GI源码、学JS编程——Javascript动态加载技术。 </title><link>http://www.cnitblog.com/seeyeah/archive/2007/04/18/25845.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Tue, 17 Apr 2007 17:20:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/04/18/25845.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/25845.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/04/18/25845.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/25845.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/25845.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt">From&nbsp; <a class=headermaintitle id=Header1_HeaderTitle href="http://www.cnblogs.com/city22/">city22</a></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体"><br><br>在大型</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">RIA<span lang=ZH-CN>中，动态加载技术十分重要，毕竟几百</span>K<span lang=ZH-CN>甚至</span>M<span lang=ZH-CN>级别的脚本让用户等待加载完了再浏览是不可能。大多数成熟的</span>framework<span lang=ZH-CN>都有动态加载技术的实现，就是说先加载一个最基础功能，然后利用动态加载技术慢慢把所有的脚本加进来，或者说需要某个功能的时候再加载某个模块所</span><span style="mso-spacerun: yes">&nbsp; </span><span lang=ZH-CN>需要的</span>javascript<span lang=ZH-CN>的文件。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">好了不说那么多</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">P<span lang=ZH-CN>话了，尽快进入正题来看看</span>GI<span lang=ZH-CN>是怎么实现的动态加载技术。其实</span>GI<span lang=ZH-CN>的</span>load<span lang=ZH-CN>做的很复杂，因为他涉及到了进度条阿等等很多乱七八糟的东西，我们就不分析那么多东西了，来看看他最基础的东西是如何实现的吧。</span>GI<span lang=ZH-CN>中的动态加载有两种，一种是用的是</span>XMLHttpRequest<span lang=ZH-CN>来请求脚本内容，另一种则是加入一个</span> &lt;script&gt;<span lang=ZH-CN>标签的方式来动态加入脚本以达到动态加载的功能。网上也许还有其它得方法，但其它得方法也都是根据这两种演变来的，还是以这两种为基础得。我们来看看它是如何实现的。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">首先是第一种<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;@private&nbsp;@jsxobf-clobber&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassLoader_prototype.loadJSFileSync&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(strURI)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;req&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;jsx3.net.Request();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req.open(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GET</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;strURI,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req.send();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(req.getStatus()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;jsx3.net.Request.STATUS_OK)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;script&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;req.getResponseText();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsx3.eval(script);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">呵呵，</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">XMLHttpRequest<span lang=ZH-CN>的</span>GET<span lang=ZH-CN>请求就可以吧</span>js<span lang=ZH-CN>文件拿下来，然后用</span>eval<span lang=ZH-CN>执行所有的脚本，这样就达到了加载脚本的功能了。方法也很简单，也就不用多介绍什么了吧。不过我记着有人说过</span>js<span lang=ZH-CN>必须要</span>UTG-8<span lang=ZH-CN>格式存的，但测试了一下，不用好像也可以。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">我们看在</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">package<span lang=ZH-CN>。</span>Js<span lang=ZH-CN>文件里面有个有意思的方法</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"></span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体"><o:p></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;Ensures&nbsp;that&nbsp;one&nbsp;or&nbsp;more&nbsp;classes&nbsp;is&nbsp;available&nbsp;before&nbsp;this&nbsp;method&nbsp;returns.&nbsp;Any&nbsp;class&nbsp;that&nbsp;fails&nbsp;to&nbsp;load&nbsp;will<br>&nbsp;&nbsp;&nbsp;*&nbsp;throw&nbsp;an&nbsp;error.&nbsp;Only&nbsp;classes&nbsp;that&nbsp;can&nbsp;be&nbsp;found&nbsp;by&nbsp;the&nbsp;system&nbsp;class&nbsp;loader&nbsp;may&nbsp;be&nbsp;loaded&nbsp;in&nbsp;this&nbsp;manner.<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;strClass&nbsp;{String<img src="http://www.cnblogs.com/Images/dot.gif">}&nbsp;the&nbsp;fully-qualified&nbsp;names&nbsp;of&nbsp;the&nbsp;classes&nbsp;to&nbsp;load.<br>&nbsp;&nbsp;&nbsp;*&nbsp;@since&nbsp;3.2<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;jsx3.require&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(strClass)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;arguments.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;className&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;arguments[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;jsx3._REQUIRE_MAP[className]&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;className;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(jsx3.Class.forName(className)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsx3.CLASS_LOADER.loadClass(className);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;};<br></span></div>
<br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes">需要说明的是</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes">jsx3.ClASS_LOADER.loadClass()<span lang=ZH-CN>方法中其实就是调用了</span>loadJSFileSync()<span lang=ZH-CN>方法，这个方法就是在调用类之前如果该类没有被加载将会在被</span>load<span lang=ZH-CN>一次做到需要什么才用什么，不会把所有</span>Javascipt<span lang=ZH-CN>都加载进来。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">然后我们再来看第二种方法，添加标签的方式来</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">load<span lang=ZH-CN>脚本<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*&nbsp;@private&nbsp;@jsxobf-clobber&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassLoader_prototype.loadScript&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(strSrc,&nbsp;strId)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;instance&nbsp;a&nbsp;new&nbsp;DOM&nbsp;element</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;element&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.src&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strSrc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.type&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'text</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">javascript';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.language&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'javascript';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;set&nbsp;up&nbsp;onload&nbsp;handler</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;me&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.IE)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.onreadystatechange&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.readyState;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(state&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">loaded</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">interactive</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">complete</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.onreadystatechange&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me._loaded[strSrc]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me._publish({subject:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;type:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;src:strSrc});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.MOZ&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.KON)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.onload&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.onload&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me._loaded[strSrc]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me._publish({subject:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;type:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;src:strSrc});&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.jsxid&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strSrc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;bind&nbsp;the&nbsp;element&nbsp;to&nbsp;the&nbsp;browser&nbsp;DOM&nbsp;to&nbsp;begin&nbsp;loading&nbsp;the&nbsp;resource</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].appendChild(element);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体"><br>呵呵，相信大家都能看懂吧，就是在</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">head<span lang=ZH-CN>标签中加入了</span>script<span lang=ZH-CN>标签，</span>src<span lang=ZH-CN>当然就是重点了，而如何判断脚本加载结束，也明确的告诉我们，在</span>IE<span lang=ZH-CN>下用</span>onreadystatechange<span lang=ZH-CN>，在</span>Firefox<span lang=ZH-CN>下用</span>onload<span lang=ZH-CN>。呵呵，好像很简单吧。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">到这里，我突然想到一个问题，</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">script<span lang=ZH-CN>标签好像功能很强大啊，竟然可以用来读服务器上的</span>Javascript<span lang=ZH-CN>文件，跟</span>XMLHttpRequest<span lang=ZH-CN>有同样的功能啊，看来这个东西可以被我们来利用一下了，做点手脚也许会有不同的效果哦，来看。</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">首先我们写一个</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">Handlers<span lang=ZH-CN>用来模拟一个</span>Javascript<span lang=ZH-CN>文件，然后用这个</span>handler<span lang=ZH-CN>来生成返回的内容，</span><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"></span><o:p></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">httpHandlers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">add&nbsp;</span><span style="COLOR: #ff0000">verb</span><span style="COLOR: #0000ff">="*"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="JsTest.JsHandler"</span><span style="COLOR: #ff0000">&nbsp;path</span><span style="COLOR: #0000ff">="demo2.js"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">httpHandlers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;JsHandler:IHttpHandler,IRequiresSessionState<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ProcessRequest(HttpContext&nbsp;context)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;action&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.Request[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">action</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.Response.Write(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">alert(\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello&nbsp;world&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;+&nbsp;action&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt; TEXT-INDENT: 17.25pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">这个</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">Handler<span lang=ZH-CN>中我只是返回了一段</span>alert<span lang=ZH-CN>，呵呵，下面用</span>script<span lang=ZH-CN>来加载他吧，刚才看到的一样，只是</span>script<span lang=ZH-CN>中</span>src<span lang=ZH-CN>我们做了点手脚，嘿嘿指向的是</span>demo2.js?action=city22<span lang=ZH-CN>，哈哈看到了吧，就是个</span>GET<span lang=ZH-CN>访问方式啊！<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">window.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;script</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;script.type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'text</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">javascript';<br>&nbsp;&nbsp;&nbsp;&nbsp;script.language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'javascript';<br>&nbsp;&nbsp;&nbsp;&nbsp;script.src</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo2.js?action=city22</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">head</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].appendChild(script);<br>}<br></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">测试成功，哈，看来还真是能模拟一个</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">XMLHttpRequest<span lang=ZH-CN>了。<br><img height=165 alt="" src="http://www.cnblogs.com/images/cnblogs_com/city22/testSuccess.jpg" width=390 border=0></span><o:p></o:p></span></p>
</span><o:p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 10pt"><span lang=ZH-CN style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">不过有人肯定该问了，这个有什么用</span><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-fareast-font-family: 宋体">XMLHttpRequest<span lang=ZH-CN>已经很好用了啊，干嘛在来个这东西。我感觉这东西在一定的领域还是能发挥作用的。</span>XMLHttpRequest<span lang=ZH-CN>不能垮站访问，这是个问题，也就是说你在</span>www.a.net/index.html<span lang=ZH-CN>上写了一段</span>XMLHttpRequest<span lang=ZH-CN>不能调用</span>www.b.net<span lang=ZH-CN>上的任何东西，即使改动</span>document.domian <span lang=ZH-CN>也不可以，唉多可惜。当然了</span>Iframe<span lang=ZH-CN>给我们解决了这个问题，但是</span>script<span lang=ZH-CN>标签又给了我们新的选择，我们完全可以模拟</span>open(),send()<span lang=ZH-CN>，等这些方法，返回的脚本中使用变量作为返回内容来模拟</span>responseText<span lang=ZH-CN>。看来跨站问题又有了新的解决思路了。以后</span>script<span lang=ZH-CN>标签值得我们去深入研究一下咯。</span></span></p>
</span></span></span></o:p></o:p></o:p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/25845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-04-18 01:20 <a href="http://www.cnitblog.com/seeyeah/archive/2007/04/18/25845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中的this关键字 </title><link>http://www.cnitblog.com/seeyeah/archive/2007/03/17/24184.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 17 Mar 2007 10:25:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/03/17/24184.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/24184.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/03/17/24184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/24184.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/24184.html</trackback:ping><description><![CDATA[
		<p>Copy From <a class="headermaintitle" id="Header1_HeaderTitle" href="http://www.cnblogs.com/beginor/"><font face="Trebuchet MS">Beginor</font></a><br /></p>
		<div class="postbody">
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">在JavaScript中，this通常绑定到函数被调用的对象上，这种默认绑定在多数情况下是正常的，但是在某些情况下，this的这种绑定会丢失，比如，将函数作为参数传递给另外一个函数，这种默认的绑定就丢失了，例如：</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">
						<font face="Courier New" size="2">var myObj = {<br />   name: 'A nice demo!',<br />   fx: function() {<br />      alert(this.name);<br />   }<br />};<br /><br />function runFx(fx) {<br />   fx();<br />}<br /><br />window.name = 'I am a nice window';<br /><br />myObj.fx();  // 在这里，将会提示 A nice demo!<br /><br />runFx(myObj.fx); // 在这里，得到的提示将会是 I am a nice window</font>
				</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">为什么会出现这种情况呢？因为在第二次调用中，myObj.fx作为参数传递给了runFx，在函数runFx中执行时fx丢失了对myObj的默认绑定，而绑定到了runFx的默认绑定window上，所以第二次调用时得到的提示为I am a nice window，而这个往往不是我们需要的结果。</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">在Ajax横行的今天，要编写复杂的客户端组件，不可避免的要将函数名作为参数传递，Prototype注意到了这个问题，MS ASP.Net Ajax也注意到了这个问题，不知道你注意了没有？</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">Prototype提供的解决方案是bind方法，在Prototype的官方文档给出的描述是：Provides aguaranteed-binding equivalent of the original function, possibly with pre-filled arguments. 上面的例子如果使用Prototype的话，可以修改如下：</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">
						<font face="Courier New" size="2">var myObj = {<br />   name: 'A nice demo!',<br />   fx: function() {<br />      alert(this.name);<br />   }<br />};<br /><br />function runFx(fx) {<br />   fx();<br />}<br /><br />window.name = 'I am a nice window';<br /><br />myObj.fx();  // 在这里，将会提示 A nice demo!<br /><br />var fx2 = myObj.fx.bind(myObj) // 先做一个绑定，<br />runFx(fx2); // 在这里，得到的提示将会是 A nide demo !这个往往是我们需要的结果</font>
				</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">MS Ajax提供的解决方案是Function.createDelegate函数，createDelegate方法是个静态方法，可以直接调用。如果使用MS Ajax库的话，可以将上面的例子修改为：</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">
						<font face="Courier New" size="2">var myObj = {<br />   name: 'A nice demo!',<br />   fx: function() {<br />      alert(this.name);<br />   }<br />};<br /><br />function runFx(fx) {<br />   fx();<br />}<br /><br />window.name = 'I am a nice window';<br /><br />myObj.fx();  // 在这里，将会提示 A nice demo!<br /><br />var fx2 = Function.createDelegate(myObj, myObj.fx) // 按照微软的说法，先做一个委托，<br />runFx(fx2); // 在这里，得到的提示将会是 A nide demo !这个往往是我们需要的结果</font>
				</p>
				<p style="BORDER-RIGHT: #c0c0c0 1px solid; BORDER-TOP: #c0c0c0 1px solid; BORDER-LEFT: #c0c0c0 1px solid; BORDER-BOTTOM: #c0c0c0 1px solid">这看起来只是一个小问题，但是如果不注意的话却会造成很大的问题。引用Prototype中的原话：As discussed on the general Function page,binding can be a pretty tricky thing sometimes.</p>
		</div>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/24184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-03-17 18:25 <a href="http://www.cnitblog.com/seeyeah/archive/2007/03/17/24184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何限制用户在文本框输入的字数</title><link>http://www.cnitblog.com/seeyeah/archive/2007/02/02/22558.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 01 Feb 2007 16:56:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/02/02/22558.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/22558.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/02/02/22558.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/22558.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/22558.html</trackback:ping><description><![CDATA[最近开发一个项目，有一个新闻的模块，用户需要对标题进行控制，希望在输入的时候就不允许超过规定的字数，而不是提交到服务器再判断。<br />显然，这只能使用javascript来完成这一艰巨的任务了。<br />首先，既然要限制字数，肯定要想办法实时获取用户在文本框里输入的文字的数量。input控件有个length的属性，可以方便地获取字数。可是，它所返回的字数无论是中文还是英文或者数字，1个字就算1个字。客户要限制字数的原因是为了页面显示的时候排版不会乱，因此一个汉字需要按2个英文字符来计算。这样的话，这个默认的length就无用武之地了。<br />怎么区分中文和英文呢？查阅了一下资料，string对象有一个叫charCodeAt(index)的方法，可以获取字符串中某一个字符的编码。我们都知道，字母数字的ascii编码都小于255而汉字的编码肯定大于255，因此我们可以使用此方法来判断字符串占用多少英文字符的宽度。 
<div class="code">function GetCharLength(str)<br />{<br /> var iLength = 0;<br /> for(var i = 0;i&lt;str.length;i++)<br /> {<br /> if(str.charCodeAt(i) &gt;255)<br /> {<br /> iLength += 2;<br /> }<br /> else<br /> {<br /> iLength += 1;<br /> }<br /> }<br /> return iLength;<br />}</div><br />字数统计有了，接下去我们需要实时地捕获用户的输入。我们可以采取在input文本框的onkeyup事件中加入字符串检测函数的调用即可。<br />在检测完字符长度后，对于那些超长的，我们将采用自后往前截断的方法将多余的字符去除。<br />字符截断代码如下： 
<div class="code">function CutStr(Str,Len)<br />{<br /> var CurStr = "";<br /> for(var i = 0;i&lt;Str.length;i++)<br /> {<br /> CurStr += Str.charAt(i);<br /> if(GetCharLength(CurStr )&gt;Len)<br /> {<br /> return Str.substring(0,i);<br /> }<br /> }<br /> return CurStr ;<br />}</div>至此，一个简单的限制用户输入字符数的方案完成了。<br />接下去，我们考虑一些改进。<br />1、javascript中，可以使用正则表达式来搜索字符串里的字符并替换，我们可以用此方法来获取字符串占用的宽度，代码如下： 
<div class="code">String.prototype.len=function(){ <br />return this.replace(/[^\x00-\xff]/g,"**").length; <br />} </div>这段代码为string对象建立了一个len的属性，用户可以直接使用string.len来获取字符串所占用的宽度。在这里，我们使用了一个小技巧，通过正则表达式将编码在255以外的字符换成2个*，这样就可以统计了。<br />其实这个replace还有其它用法，比如要限制用户只能输入数字，可以使用 
<div class="code">&lt;input onChange="value=value.replace(/[^\d]/g,'')" &gt; </div>只能输入数字和英文 /[\W]/g <br />只能输入汉字的 /[^\u4E00-\u9FA5]/g <br /><br />2、微软拼音输入法对keyup事件很敏感，在某些情况下会把文本框里原有的字符全部去除（其实，主要因为用微软拼音输入法，虽然中文字没有上去，但是拼音字母已经作为内容存在文本框内，从而会激发判断函数。而一旦拼音比较长，会使字符超长，产生截断操作。因为是重写了框里的文本，截断操作之后，光标将移到最后一位，从而导致整个输入法的异常）<br />发现这个问题后，我又测试了其它一些输入法，发现这些输入法输入中文的方式各不一样，微软全拼输入法和智能ABC输入法也不同。考虑到还有其它各种输入法，因此采用在焦点移出的时候onBlur进行判断和截断操作。这样是最安全的。<br /><br />以下是完整的代码： 
<div class="code">&lt;script language="javascript"&gt; <br />&lt;!-- <br /> <br />String.prototype.len=function(){ <br />return this.replace(/[^\x00-\xff]/g,"**").length; <br />} <br /> <br />//Set maxlength for multiline TextBox <br />function setMaxLength(object,length) <br />{ <br /> <br /> var result = true; <br /> var controlid = document.selection.createRange().parentElement().id; <br /> var controlValue = document.selection.createRange().text; <br /> var tempString=object.value; <br /> <br /> var tt=""; <br /> for(var i=0;i&lt;length;i++) <br /> { <br /> if(tt.len()&lt;length) <br /> tt=tempString.substr(0,i+1); <br /> else <br /> break; <br /> } <br /> if(tt.len()&gt;length) <br /> tt=tt.substr(0,tt.length-1); <br />   object.value=tt; <br />} <br /> <br />//Check maxlength for multiline TextBox when paste <br />function limitPaste(object,length) <br />{ <br /> var tempLength = 0; <br /> if(document.selection) <br /> { <br /> if(document.selection.createRange().parentElement().id == object.id) <br /> { <br /> tempLength = document.selection.createRange().text.len(); <br /> } <br /> } <br /> var tempValue = window.clipboardData.getData("Text"); <br /> tempLength = object.value.len() + tempValue.len() - tempLength; <br /> <br /> if (tempLength &gt; length) <br /> { <br /> tempLength -= length; <br /> var tt=""; <br /> for(var i=0;i&lt;tempValue.len()-tempLength;i++) <br /> { <br /> if(tt.len()&lt;(tempValue.len()-tempLength)) <br /> tt=tempValue.substr(0,i+1); <br /> else <br /> break; <br /> } <br /> if(tt.len()&lt;=0) <br /> { <br /> window.event.returnValue=false; <br /> <br /> } <br /> else <br /> { <br /> tempValue=tt; <br /> window.clipboardData.setData("Text", tempValue); <br /> window.event.returnValue = true; <br /> } <br /> } <br /> <br /> <br />} <br /> <br />function PressLength() <br />{ <br /> <br /> if(event.srcElement.type=="text" || event.srcElement.type=="textarea" ) <br /> { <br /> if(event.srcElement.length!=null) <br /> setMaxLength(event.srcElement,event.srcElement.length); <br /> <br /> } <br />} <br /> <br />function LimitLength() <br />{ <br /> <br /> if(event.srcElement.type=="text" || event.srcElement.type=="textarea" ) <br /> { <br /> if(event.srcElement.length!=null) <br /> limitPaste(event.srcElement,event.srcElement.length); <br /> } <br />} <br />document.documentElement.attachEvent('onBlur', PressLength); <br />document.documentElement.attachEvent('onpaste', LimitLength); <br /> <br />//--&gt; <br /> &lt;/script&gt; <br /><br /></div><hr />
From http://www.gaozhe.net/article.asp?id=11<img src ="http://www.cnitblog.com/seeyeah/aggbug/22558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-02-02 00:56 <a href="http://www.cnitblog.com/seeyeah/archive/2007/02/02/22558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript 垂直滚动AD条 [From Taobao]</title><link>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22051.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 18 Jan 2007 14:20:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22051.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/22051.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/22051.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/22051.html</trackback:ping><description><![CDATA[
		<p>-----------------Js<br />// JavaScript Document<br />function SlideBox(container, frequency, direction) {<br /> if (typeof(container) == 'string') {<br />  container = document.getElementById(container);<br /> }<br /> this.container = container;<br /> this.frequency = frequency;<br /> this.direction = direction;<br /> this.films = [];<br /> var divs = this.container.getElementsByTagName('div');<br /> for (var i = 0; i &lt; divs.length; i++) {<br />  if (divs[i].className == 'slideFilm') {<br />   divs[i].onmouseover = function(self)<br />    {<br />     return function()<br />      {<br />       self._mouseover()<br />      };<br />    }(this);<br />   divs[i].onmouseout = function(self){return function(){self._mouseout()};}(this);<br />   this.films[this.films.length] = divs[i];<br />  }<br /> }<br /> this._playTimeoutId = null;<br /> this._slideTimeoutId = null;<br /> this._slidable = true;<br /> var isIE5 = navigator.userAgent.toLowerCase().indexOf("msie 5")&gt;0;<br /> if (!isIE5)<br />  this._loop();<br />}</p>
		<p>SlideBox.prototype = {<br /> _loop : function() {<br />  var sb = this;<br />  this._playTimeoutId = setTimeout(function(){sb._slide()}, this.frequency);<br /> },</p>
		<p> _slide : function() {<br />  var sb = this;<br />  var _slide = function() {<br />   if (!sb._slidable) return;<br />   var c = sb.container;<br />   if (sb.direction == 'top') {<br />    if (c.scrollTop &lt; c.offsetHeight-2) {<br />     c.scrollTop += 2;<br />    } else {<br />     clearInterval(sb._slideTimeoutId);<br />     sb._loop();<br />     var ul = c.getElementsByTagName('ul')[0];<br />     ul.appendChild(c.getElementsByTagName('li')[0]);<br />     c.scrollTop = 0;<br />    }<br />   } else if (sb.direction == 'left') {<br />    if (c.scrollLeft &lt; c.offsetWidth-2) {<br />     c.scrollLeft += 2;<br />    } else {<br />     clearInterval(sb._slideTimeoutId);<br />     sb._loop();<br />     var ul = c.getElementsByTagName('ul')[0];<br />     ul.appendChild(c.getElementsByTagName('li')[0]);<br />     c.scrollLeft = 0;<br />    }<br />   }<br />  }<br />  this._slideTimeoutId = setInterval(_slide, 10);<br /> },</p>
		<p> _mouseover : function() {<br />  this._slidable = false;<br /> },</p>
		<p> _mouseout : function() {<br />  this._slidable = true;<br /> }<br />}<br /><br /><br />-------------------------------HTML Example<br />&lt;html&gt;<br /> &lt;head&gt;<br />  &lt;title&gt;Untitled&lt;/title&gt;<br />  &lt;style&gt;<br />  /* AD top */<br />#ADList{<br /> float:left;<br /> width:380px;<br /> height:191px;<br />}<br />#ADList ul{<br /> margin:0;<br /> padding:0;<br /> list-style-type:none;<br />}<br />#ADListRoll{<br /> height:25px; <br /> width:380px; <br /> /*background:url(<a href="http://pics.taobao.com/bao/album/chl/fp/home_roll_bg.gif">http://pics.taobao.com/bao/album/chl/fp/home_roll_bg.gif</a>) left top no-repeat;*/<br /> line-height:25px; <br /> padding:0 5px;<br /> color:#69F;<br />}<br />#ADListRoll a{<br /> color:#565656;<br />}<br />#ADListText,#ADListImg{<br /> margin-top:6px;<br />}<br />#ADListText ul {<br /> margin-left:10px;<br />}<br />#ADListText ul li{<br /> float:left;<br /> line-height:16px;<br /> line-height:20px;<br /> padding:0;<br /> margin:0;<br /> width:170px;<br /> display:block;<br /> padding-left:12px;<br /> /*background:transparent url(<a href="http://pics.taobao.com/bao/album/sys/misc/top_icon.gif">http://pics.taobao.com/bao/album/sys/misc/top_icon.gif</a>) 3px 7px no-repeat;*/<br />}<br />#ADListImg li{<br /> float:left;<br /> width:76px;<br /> text-align:center;<br />}<br />#ADListImg li img{<br /> border:1px #ccc solid;<br /> margin-bottom:5px;<br /> display:block;<br />}<br />#ADListRollContainer{height:25px;line-height:25px;overflow:hidden;float:left; }</p>
		<p>#ADListRollContainer ul { list-style: none; margin:0px; padding:0;  cursor:pointer;}</p>
		<p>#ADListRollContainer li { display: block;}</p>
		<p>#ADListRollContainer li div { height:25px; line-height:25px; margin:0 0 0 5px; padding:0;}<br />  &lt;/style&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br />  &lt;div id="ADList"&gt;<br />   &lt;div id="ADListRoll"&gt;<br />    &lt;div id="ADListRollContainer"&gt;<br />     &lt;ul&gt;<br />      &lt;li&gt;<br />       &lt;div class="slideFilm"&gt;1.&lt;a href="<a href="http://search1.taobao.com/browse/1801/t-false---------2048------g,giydambrhizdamrvhe5tembqgeydumrqgi2toozsgaydamb2giydamzuhmzdaobwgy5dgmrtguzdwmrqha4daortgi2tmni--g,hmzdambqge5ndw5sx652jqhnhmzdambrga5ndw6lvi5tembqgaydurltorswktdbovsgk4rp2hc4vk6axt36yozsga4dmnr2ztmmr456vo52vt5vyhidwmrqha4daowquhi7s--g,ojsxgzlsozsv64dsnfrwkwztguwdcmbqgaydambqgboq---g,2hnq-------2-------b-y-40-list-coefp-0-all-1801.htm">http://search1.taobao.com/browse/1801/t-false---------2048------g,giydambrhizdamrvhe5tembqgeydumrqgi2toozsgaydamb2giydamzuhmzdaobwgy5dgmrtguzdwmrqha4daortgi2tmni--g,hmzdambqge5ndw5sx652jqhnhmzdambrga5ndw6lvi5tembqgaydurltorswktdbovsgk4rp2hc4vk6axt36yozsga4dmnr2ztmmr456vo52vt5vyhidwmrqha4daowquhi7s--g,ojsxgzlsozsv64dsnfrwkwztguwdcmbqgaydambqgboq---g,2hnq-------2-------b-y-40-list-coefp-0-all-1801.htm</a>"<br />         target="_blank"&gt;雅诗兰黛ANR眼霜小样50元起&lt;/a&gt;<br />       &lt;/div&gt;<br />      &lt;/li&gt;<br />      &lt;li&gt;<br />       &lt;div class="slideFilm"&gt;2.&lt;a href="<a href="http://search1.taobao.com/browse/15-1512/t-g,hm5twoz3hm5twoz3-----g,g4ztsmbmmq4deobmiuztkobmg4ztombmjm3tsmddfq3demztfrhdomzmky4tembmie3dmobmg42taqzmiq4taobmgmzdkmbmo44dgmbmmm4dkobmieytembqfrndglclgi--or-2048----2--------y-40-list-coefp-0-all-1512.htm1512.htm">http://search1.taobao.com/browse/15-1512/t-g,hm5twoz3hm5twoz3-----g,g4ztsmbmmq4deobmiuztkobmg4ztombmjm3tsmddfq3demztfrhdomzmky4tembmie3dmobmg42taqzmiq4taobmgmzdkmbmo44dgmbmmm4dkobmieytembqfrndglclgi--or-2048----2--------y-40-list-coefp-0-all-1512.htm1512.htm</a>"<br />         target="_blank"&gt;淘宝人气拍照手机促销(行货)&lt;/a&gt;&lt;/div&gt;<br />      &lt;/li&gt;<br />      &lt;li&gt;<br />       &lt;div class="slideFilm"&gt;3.&lt;a href="<a href="http://list.taobao.com/browse/99-50001031/t-false--------yes---------------------2-------b-y-40-list-coefp-0-all-50001031.htm">http://list.taobao.com/browse/99-50001031/t-false--------yes---------------------2-------b-y-40-list-coefp-0-all-50001031.htm</a>"<br />         target="_blank"&gt;迎新年游戏货币打折出售&lt;/a&gt;&lt;/div&gt;<br />      &lt;/li&gt;<br />     &lt;/ul&gt;<br />    &lt;/div&gt;<br />   &lt;/div&gt;<br />  &lt;/div&gt;<br />  &lt;script type="text/javascript" src="slidebox.js"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript"&gt;<br />  new SlideBox('ADListRollContainer', 2000, 'top');<br />  &lt;/script&gt;<br /> &lt;/body&gt;<br />&lt;/html&gt;</p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/22051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-01-18 22:20 <a href="http://www.cnitblog.com/seeyeah/archive/2007/01/18/22051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript 扩展Date</title><link>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22049.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 18 Jan 2007 14:17:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22049.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/22049.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2007/01/18/22049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/22049.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/22049.html</trackback:ping><description><![CDATA[
		<br />  /*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/   <br />  String.prototype.createDate   =   function(){   <br />          if(this   ==   "")   return   new   Date();   <br />  var   regThree   =   /^\D*(\d{2,4})\D+(\d{1,2})\D+(\d{1,2})\D*$/;   <br />  var   regSix   =   /^\D*(\d{2,4})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D*$/;   <br />  var   str   =   "";   <br />  var   date   =   null;   <br />  if(regThree.test(this)){   <br />  str   =   this.replace(/\s/g,"").replace(regThree,"$1/$2/$3");   <br />  date   =   new   Date(str);   <br />  }   <br />  else   if(regSix.test(this)){   <br />  str   =   this.match(regSix);   <br />  date   =   new   Date(str[1],str[2]-1,str[3],str[4],str[5],str[6]);   <br />  }   <br />  if(isNaN(date)) return   new   Date();   <br />  else   return   date;   <br />  }   <br />    <br />  /*   <br />    *   功能:根据输入表达式返回日期字符串   <br />    *   参数:dateFmt:字符串,由以下结构组成           <br />    *             yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,   <br />    *             mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.   <br />    *             isFmtWithZero   :   是否用0进行格式化,true   or   false   <br />  */   <br />  Date.prototype.parseString   =   function(dateFmt,isFmtWithZero){   <br />  dateFmt   =   (dateFmt   ==   null?"yy-mm-dd"   :   dateFmt);   <br />  isFmtWithZero   =   (isFmtWithZero   ==   null?true   :   isFmtWithZero);   <br />  if(typeof(dateFmt)   !=   "string"   )   <br />  throw   (new   Error(-1,   'parseString()方法需要字符串类型参数!'));   <br />  var   weekArr=[["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],   <br />      ["SUN","MON","TUR","WED","THU","FRI","SAT"]];   <br />  var   monthArr=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];   <br />  var   str=dateFmt;   <br />  str   =   str.replace(/yy/g,this.getFullYear());   <br />  str   =   str.replace(/YY/g,this.getYear());   <br />  str   =   str.replace(/mm/g,(this.getMonth()+1).toString().fmtWithZero(isFmtWithZero));   <br />  str   =   str.replace(/MM/g,monthArr[this.getMonth()]);   <br />  str   =   str.replace(/dd/g,this.getDate().toString().fmtWithZero(isFmtWithZero));   <br />  str   =   str.replace(/hh/g,this.getHours().toString().fmtWithZero(isFmtWithZero));   <br />  str   =   str.replace(/mi/g,this.getMinutes().toString().fmtWithZero(isFmtWithZero));   <br />  str   =   str.replace(/ss/g,this.getSeconds().toString().fmtWithZero(isFmtWithZero));   <br />  str   =   str.replace(/ms/g,this.getMilliseconds().toString().fmtWithZeroD(isFmtWithZero));   <br />  str   =   str.replace(/we/g,weekArr[0][this.getDay()]);   <br />  str   =   str.replace(/WE/g,weekArr[1][this.getDay()]);   <br />  return   str;   <br />  }   <br />  /*将一位数字格式化成两位,如:   9   to   09*/   <br />  String.prototype.fmtWithZero   =   function(isFmtWithZero){   <br />  if(isFmtWithZero)   <br />  return   (this&lt;10?"0"+this:this);   <br />  else   return   this;   <br />  }   <br />  String.prototype.fmtWithZeroD   =   function(isFmtWithZero){   <br />  if(isFmtWithZero)   <br />  return   (this&lt;10?"00"+this:(this&lt;100?"0"+this:this));   <br />  else   return   this;   <br />  }   <br />    <br />  /*   功能   :   返回与某日期相距N天(N个24小时)的日期   <br />    *   参数   :   num   number类型   可以为正负整数或者浮点数,默认为1;   <br />    *                 type   0(秒)   or   1(天),默认为天   <br />    *   返回   :   新的PowerDate类型   <br />    */   <br />  Date.prototype.dateAfter=function(num,type){   <br />  num   =   (num   ==   null?1:num);   <br />  if(typeof(num)!="number")   throw   new   Error(-1,"dateAfterDays(num,type)的num参数为数值类型.");   <br />  type   =   (type==null?1:type);   <br />  var   arr   =   [1000,86400000];   <br />  var   dd   =   this.valueOf();   <br />  dd   +=   num*arr[type];   <br />  return   new   Date(dd);   <br />  }   <br />    <br />  //判断是否是闰年,返回true   或者   false   <br />  Date.prototype.isLeapYear   =   function   (){   <br />  var   year   =   this.getFullYear();   <br />  return   (0==year%4   &amp;&amp;   ((year   %   100   !=   0)||(year   %   400   ==   0)));   <br />  }   <br />    <br />  //返回该月天数   <br />  Date.prototype.getDaysOfMonth   =   function   (){   <br />  return   (new   Date(this.getFullYear(),this.getMonth()+1,0)).getDate();   <br />  }   <br />    <br />  //转换成大写日期(中文)   <br />  Date.prototype.getChinaDate   =     function(){   <br />  var   year   =   this.getFullYear().toString();   <br />  var   month=   this.getMonth()+1;   <br />  var   day   =   this.getDate();   <br />  var   arrNum   =   ["零","一","二","三","四","五","六","七","八","九","十","十一","十二"];   <br />  var   strTmp="";   <br />  for(var   i=0,j=year.length;i&lt;j;i++){   <br />  strTmp   +=   arrNum[year.charAt(i)];   <br />  }   <br />  strTmp   +=   "年";   <br />  strTmp   +=   arrNum[month]+"月";   <br />  if(day&lt;10)   <br />  strTmp   +=   arrNum[day];   <br />  else   if   (day   &lt;20)   <br />  strTmp   +=   "十"+arrNum[day-10];   <br />  else   if   (day   &lt;30   )   <br />  strTmp   +=   "二十"+arrNum[day-20];   <br />  else     <br />  strTmp   +=   "三十"+arrNum[day-30];   <br />  strTmp   +=   "日";   <br />  return   strTmp;   <br />  }   <br />  //日期比较函数,参数date:为Date类型,如this日期晚于参数:1,相等:0   早于:   -1   <br />  Date.prototype.dateCompare   =   function(date){   <br />  if(typeof(date)   !=   "object"   ||   !(/Date/.test(date.constructor)))   <br />    throw   new   Error(-1,"dateCompare(date)的date参数为Date类型.");   <br />  var   d   =   this.getTime()   -   date.getTime();   <br />  return   d&gt;0?1:(d==0?0:-1);   <br />  }   <br />    <br />  /*功能:返回两日期之差   <br />    *参数:pd       PowerDate对象   <br />    *         type:   返回类别标识.yy:年,mm:月,ww:周,dd:日,hh:小时,mi:分,ss:秒,ms:毫秒   <br />    *         intOrFloat   :返回整型还是浮点型值   0:整型,不等于0:浮点型   <br />    *         output   :   输出提示,如:时间差为#周!   <br />    */   <br />  Date.prototype.calDateDistance   =   function   (date,type,intOrFloat,output){   <br />  if(typeof(date)   !=   "object"   ||   !(/Date/.test(date.constructor)))   <br />    throw   new   Error(-1,"calDateDistance(date,type,intOrFloat)的date参数为Date类型.");   <br />  type   =   (type==null?'dd':type);   <br />  if(!((new   RegExp(type+",","g")).test("yy,mm,ww,dd,hh,mi,ss,ms,")))   <br />    throw   new   Error(-1,"calDateDistance(pd,type,intOrFloat,output)的type参数为非法.");   <br />  var   iof   =   (intOrFloat==null?0:intOrFloat);   <br />  var   miSecMain   =   this.valueOf();   <br />  var   miSecSub     =   date.valueOf();   <br />  var   num=0;   <br />  switch(type){   <br />  case   "yy":   num   =   this.getFullYear()   -   date.getFullYear();   break;   <br />  case   "mm":   num   =   (this.getFullYear()   -   date.getFullYear())*12+this.getMonth()-date.getMonth();   break;   <br />  case   "ww":   num   =   ((miSecMain-miSecSub)/7/86400000).fmtRtnVal(iof);   break;   <br />  case   "dd":   num   =   ((miSecMain-miSecSub)/86400000).fmtRtnVal(iof);   break;   <br />  case   "hh":   num   =   ((miSecMain-miSecSub)/3600000).fmtRtnVal(iof);   break;   <br />  case   "mi":   num   =   ((miSecMain-miSecSub)/60000).fmtRtnVal(iof);   break;   <br />  case   "ss":   num   =   ((miSecMain-miSecSub)/1000).fmtRtnVal(iof);   break;   <br />  case   "ms":   num   =   (miSecMain-miSecSub);break;   <br />  default:     break;   <br />  }   <br />  if(output)   <br />  return   output.replace(/#/g,"   "+num+"   ");   <br />  else   return   num;   <br />  }   <br />  //返回整数或者两位小数的浮点数   <br />  Number.prototype.fmtRtnVal   =   function   (intOrFloat){   <br />  return   (intOrFloat   ==   0   ?   Math.floor(this)   :   parseInt(this*100)/100);   <br />  }   <br />  //根据当前日期所在年和周数返回周日的日期   <br />  Date.prototype.RtnByWeekNum   =   function   (weekNum){   <br />  if(typeof(weekNum)   !=   "number")   <br />  throw   new   Error(-1,"RtnByWeekNum(weekNum)的参数是数字类型.");   <br />  var   date   =   new   Date(this.getFullYear(),0,1);   <br />  var   week   =   date.getDay();   <br />  week   =   (week==0?7:week);   <br />  return   date.dateAfter(weekNum*7-week,1);   <br />  }   <br />  //根据日期返回该日期所在年的周数   <br />  Date.prototype.getWeekNum   =   function   (){   <br />  var   dat   =   new   Date(this.getFullYear(),0,1);   <br />  var   week   =   dat.getDay();   <br />  week   =   (week==0?7:week);   <br />  var   days   =   this.calDateDistance(dat,"dd")+1;   <br />  return   ((days   +   6   -   this.getDay()   -   7   +   week)/7);   <br />  }   <br /><img src ="http://www.cnitblog.com/seeyeah/aggbug/22049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2007-01-18 22:17 <a href="http://www.cnitblog.com/seeyeah/archive/2007/01/18/22049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript 简繁体转换</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/29/21255.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Thu, 28 Dec 2006 16:49:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/29/21255.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/21255.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/29/21255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/21255.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/21255.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Untitled</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> charPYStr(){<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> '啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽劲荆兢觉决诀绝均菌钧军君峻俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座';<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> ftPYStr(){<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> '啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翺襖傲奧懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙壩霸罷爸白柏百擺佰敗拜稗斑班搬扳般頒板版扮拌伴瓣半辦絆邦幫梆榜膀綁棒磅蚌鎊傍謗苞胞包褒剝薄雹保堡飽寶抱報暴豹鮑爆杯碑悲卑北輩背貝鋇倍狽備憊焙被奔苯本笨崩繃甭泵蹦迸逼鼻比鄙筆彼碧蓖蔽畢斃毖幣庇痹閉敝弊必辟壁臂避陛鞭邊編貶扁便變卞辨辯辮遍標彪膘表鼈憋別癟彬斌瀕濱賓擯兵冰柄丙秉餅炳病並玻菠播撥缽波博勃搏鉑箔伯帛舶脖膊渤泊駁捕蔔哺補埠不布步簿部怖擦猜裁材才財睬踩采彩菜蔡餐參蠶殘慚慘燦蒼艙倉滄藏操糙槽曹草廁策側冊測層蹭插叉茬茶查碴搽察岔差詫拆柴豺攙摻蟬饞讒纏鏟産闡顫昌猖場嘗常長償腸廠敞暢唱倡超抄鈔朝嘲潮巢吵炒車扯撤掣徹澈郴臣辰塵晨忱沈陳趁襯撐稱城橙成呈乘程懲澄誠承逞騁秤吃癡持匙池遲弛馳恥齒侈尺赤翅斥熾充衝沖蟲崇寵抽酬疇躊稠愁籌仇綢瞅醜臭初出櫥廚躇鋤雛滁除楚礎儲矗搐觸處揣川穿椽傳船喘串瘡窗幢床闖創吹炊捶錘垂春椿醇唇淳純蠢戳綽疵茨磁雌辭慈瓷詞此刺賜次聰蔥囪匆從叢湊粗醋簇促躥篡竄摧崔催脆瘁粹淬翠村存寸磋撮搓措挫錯搭達答瘩打大呆歹傣戴帶殆代貸袋待逮怠耽擔丹單鄲撣膽旦氮但憚淡誕彈蛋當擋黨蕩檔刀搗蹈倒島禱導到稻悼道盜德得的蹬燈登等瞪凳鄧堤低滴迪敵笛狄滌翟嫡抵底地蒂第帝弟遞締顛掂滇碘點典靛墊電佃甸店惦奠澱殿碉叼雕凋刁掉吊釣調跌爹碟蝶叠諜疊丁盯叮釘頂鼎錠定訂丟東冬董懂動棟侗恫凍洞兜抖鬥陡豆逗痘都督毒犢獨讀堵睹賭杜鍍肚度渡妒端短鍛段斷緞堆兌隊對墩噸蹲敦頓囤鈍盾遁掇哆多奪垛躲朵跺舵剁惰墮蛾峨鵝俄額訛娥惡厄扼遏鄂餓恩而兒耳爾餌洱二貳發罰筏伐乏閥法琺藩帆番翻樊礬釩繁凡煩反返範販犯飯泛坊芳方肪房防妨仿訪紡放菲非啡飛肥匪誹吠肺廢沸費芬酚吩氛分紛墳焚汾粉奮份忿憤糞豐封楓蜂峰鋒風瘋烽逢馮縫諷奉鳳佛否夫敷膚孵扶拂輻幅氟符伏俘服浮涪福袱弗甫撫輔俯釜斧脯腑府腐赴副覆賦複傅付阜父腹負富訃附婦縛咐噶嘎該改概鈣蓋溉幹甘杆柑竿肝趕感稈敢贛岡剛鋼缸肛綱崗港杠篙臯高膏羔糕搞鎬稿告哥歌擱戈鴿胳疙割革葛格蛤閣隔鉻個各給根跟耕更庚羹埂耿梗工攻功恭龔供躬公宮弓鞏汞拱貢共鈎勾溝苟狗垢構購夠辜菇咕箍估沽孤姑鼓古蠱骨谷股故顧固雇刮瓜剮寡挂褂乖拐怪棺關官冠觀管館罐慣灌貫光廣逛瑰規圭矽歸龜閨軌鬼詭癸桂櫃跪貴劊輥滾棍鍋郭國果裹過哈骸孩海氦亥害駭酣憨邯韓含涵寒函喊罕翰撼捍旱憾悍焊汗漢夯杭航壕嚎豪毫郝好耗號浩呵喝荷菏核禾和何合盒貉閡河涸赫褐鶴賀嘿黑痕很狠恨哼亨橫衡恒轟哄烘虹鴻洪宏弘紅喉侯猴吼厚候後呼乎忽瑚壺葫胡蝴狐糊湖弧虎唬護互滬戶花嘩華猾滑畫劃化話槐徊懷淮壞歡環桓還緩換患喚瘓豢煥渙宦幻荒慌黃磺蝗簧皇凰惶煌晃幌恍謊灰揮輝徽恢蛔回毀悔慧卉惠晦賄穢會燴彙諱誨繪葷昏婚魂渾混豁活夥火獲或惑霍貨禍擊圾基機畸稽積箕肌饑迹激譏雞姬績緝吉極棘輯籍集及急疾汲即嫉級擠幾脊己薊技冀季伎祭劑悸濟寄寂計記既忌際妓繼紀嘉枷夾佳家加莢頰賈甲鉀假稼價架駕嫁殲監堅尖箋間煎兼肩艱奸緘繭檢柬堿鹼揀撿簡儉剪減薦檻鑒踐賤見鍵箭件健艦劍餞漸濺澗建僵姜將漿江疆蔣槳獎講匠醬降蕉椒礁焦膠交郊澆驕嬌嚼攪鉸矯僥腳狡角餃繳絞剿教酵轎較叫窖揭接皆稭街階截劫節莖睛晶鯨京驚精粳經井警景頸靜境敬鏡徑痙靖竟競淨炯窘揪究糾玖韭久灸九酒廄救舊臼舅咎就疚鞠拘狙疽居駒菊局咀矩舉沮聚拒據巨具距踞鋸俱句懼炬劇捐鵑娟倦眷卷絹撅攫抉掘倔爵桔傑捷睫竭潔結解姐戒藉芥界借介疥誡屆巾筋斤金今津襟緊錦僅謹進靳晉禁近燼浸盡勁荊兢覺決訣絕均菌鈞軍君峻俊竣浚郡駿喀咖卡咯開揩楷凱慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕顆科殼咳可渴克刻客課肯啃墾懇坑吭空恐孔控摳口扣寇枯哭窟苦酷庫褲誇垮挎跨胯塊筷儈快寬款匡筐狂框礦眶曠況虧盔巋窺葵奎魁傀饋愧潰坤昆捆困括擴廓闊垃拉喇蠟臘辣啦萊來賴藍婪欄攔籃闌蘭瀾讕攬覽懶纜爛濫琅榔狼廊郎朗浪撈勞牢老佬姥酪烙澇勒樂雷鐳蕾磊累儡壘擂肋類淚棱楞冷厘梨犁黎籬狸離漓理李裏鯉禮莉荔吏栗麗厲勵礫曆利傈例俐痢立粒瀝隸力璃哩倆聯蓮連鐮廉憐漣簾斂臉鏈戀煉練糧涼梁粱良兩輛量晾亮諒撩聊僚療燎寥遼潦了撂鐐廖料列裂烈劣獵琳林磷霖臨鄰鱗淋凜賃吝拎玲菱零齡鈴伶羚淩靈陵嶺領另令溜琉榴硫餾留劉瘤流柳六龍聾嚨籠窿隆壟攏隴樓婁摟簍漏陋蘆盧顱廬爐擄鹵虜魯麓碌露路賂鹿潞祿錄陸戮驢呂鋁侶旅履屢縷慮氯律率濾綠巒攣孿灤卵亂掠略掄輪倫侖淪綸論蘿螺羅邏鑼籮騾裸落洛駱絡媽麻瑪碼螞馬罵嘛嗎埋買麥賣邁脈瞞饅蠻滿蔓曼慢漫謾芒茫盲氓忙莽貓茅錨毛矛鉚卯茂冒帽貌貿麽玫枚梅酶黴煤沒眉媒鎂每美昧寐妹媚門悶們萌蒙檬盟錳猛夢孟眯醚靡糜迷謎彌米秘覓泌蜜密冪棉眠綿冕免勉娩緬面苗描瞄藐秒渺廟妙蔑滅民抿皿敏憫閩明螟鳴銘名命謬摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌謀牟某拇牡畝姆母墓暮幕募慕木目睦牧穆拿哪呐鈉那娜納氖乃奶耐奈南男難囊撓腦惱鬧淖呢餒內嫩能妮霓倪泥尼擬你匿膩逆溺蔫拈年碾攆撚念娘釀鳥尿捏聶孽齧鑷鎳涅您檸獰凝甯擰濘牛扭鈕紐膿濃農弄奴努怒女暖虐瘧挪懦糯諾哦歐鷗毆藕嘔偶漚啪趴爬帕怕琶拍排牌徘湃派攀潘盤磐盼畔判叛乓龐旁耪胖抛咆刨炮袍跑泡呸胚培裴賠陪配佩沛噴盆砰抨烹澎彭蓬棚硼篷膨朋鵬捧碰坯砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬篇偏片騙飄漂瓢票撇瞥拼頻貧品聘乒坪蘋萍平憑瓶評屏坡潑頗婆破魄迫粕剖撲鋪仆莆葡菩蒲埔樸圃普浦譜曝瀑期欺棲戚妻七淒漆柒沏其棋奇歧畦崎臍齊旗祈祁騎起豈乞企啓契砌器氣迄棄汽泣訖掐洽牽扡釺鉛千遷簽仟謙乾黔錢鉗前潛遣淺譴塹嵌欠歉槍嗆腔羌牆薔強搶橇鍬敲悄橋瞧喬僑巧鞘撬翹峭俏竅切茄且怯竊欽侵親秦琴勤芹擒禽寢沁青輕氫傾卿清擎晴氰情頃請慶瓊窮秋丘邱球求囚酋泅趨區蛆曲軀屈驅渠取娶齲趣去圈顴權醛泉全痊拳犬券勸缺炔瘸卻鵲榷確雀裙群然燃冉染瓤壤攘嚷讓饒擾繞惹熱壬仁人忍韌任認刃妊紉扔仍日戎茸蓉榮融熔溶容絨冗揉柔肉茹蠕儒孺如辱乳汝入褥軟阮蕊瑞銳閏潤若弱撒灑薩腮鰓塞賽三三傘散桑嗓喪搔騷掃嫂瑟色澀森僧莎砂殺刹沙紗傻啥煞篩曬珊苫杉山刪煽衫閃陝擅贍膳善汕扇繕墒傷商賞晌上尚裳梢捎稍燒芍勺韶少哨邵紹奢賒蛇舌舍赦攝射懾涉社設砷申呻伸身深娠紳神沈審嬸甚腎慎滲聲生甥牲升繩省盛剩勝聖師失獅施濕詩屍虱十石拾時什食蝕實識史矢使屎駛始式示士世柿事拭誓逝勢是嗜噬適仕侍釋飾氏市恃室視試收手首守壽授售受瘦獸蔬樞梳殊抒輸叔舒淑疏書贖孰熟薯暑曙署蜀黍鼠屬術述樹束戍豎墅庶數漱恕刷耍摔衰甩帥栓拴霜雙爽誰水睡稅吮瞬順舜說碩朔爍斯撕嘶思私司絲死肆寺嗣四伺似飼巳松聳慫頌送宋訟誦搜艘擻嗽蘇酥俗素速粟僳塑溯宿訴肅酸蒜算雖隋隨綏髓碎歲穗遂隧祟孫損筍蓑梭唆縮瑣索鎖所塌他它她塔獺撻蹋踏胎苔擡台泰酞太態汰坍攤貪癱灘壇檀痰潭譚談坦毯袒碳探歎炭湯塘搪堂棠膛唐糖倘躺淌趟燙掏濤滔縧萄桃逃淘陶討套特藤騰疼謄梯剔踢銻提題蹄啼體替嚏惕涕剃屜天添填田甜恬舔腆挑條迢眺跳貼鐵帖廳聽烴汀廷停亭庭挺艇通桐酮瞳同銅彤童桶捅筒統痛偷投頭透凸禿突圖徒途塗屠土吐兔湍團推頹腿蛻褪退吞屯臀拖托脫鴕陀馱駝橢妥拓唾挖哇蛙窪娃瓦襪歪外豌彎灣玩頑丸烷完碗挽晚皖惋宛婉萬腕汪王亡枉網往旺望忘妄威巍微危韋違桅圍唯惟爲濰維葦萎委偉僞尾緯未蔚味畏胃餵魏位渭謂尉慰衛瘟溫蚊文聞紋吻穩紊問嗡翁甕撾蝸渦窩我斡臥握沃巫嗚鎢烏汙誣屋無蕪梧吾吳毋武五捂午舞伍侮塢戊霧晤物勿務悟誤昔熙析西硒矽晰嘻吸錫犧稀息希悉膝夕惜熄烯溪汐犀檄襲席習媳喜銑洗系隙戲細瞎蝦匣霞轄暇峽俠狹下廈夏嚇掀鍁先仙鮮纖鹹賢銜舷閑涎弦嫌顯險現獻縣腺餡羨憲陷限線相廂鑲香箱襄湘鄉翔祥詳想響享項巷橡像向象蕭硝霄削哮囂銷消宵淆曉小孝校肖嘯笑效楔些歇蠍鞋協挾攜邪斜脅諧寫械卸蟹懈泄瀉謝屑薪芯鋅欣辛新忻心信釁星腥猩惺興刑型形邢行醒幸杏性姓兄凶胸匈洶雄熊休修羞朽嗅鏽秀袖繡墟戌需虛噓須徐許蓄酗敘旭序畜恤絮婿緒續軒喧宣懸旋玄選癬眩絢靴薛學穴雪血勳熏循旬詢尋馴巡殉汛訓訊遜迅壓押鴉鴨呀丫芽牙蚜崖衙涯雅啞亞訝焉咽閹煙淹鹽嚴研蜒岩延言顔閻炎沿奄掩眼衍演豔堰燕厭硯雁唁彥焰宴諺驗殃央鴦秧楊揚佯瘍羊洋陽氧仰癢養樣漾邀腰妖瑤搖堯遙窯謠姚咬舀藥要耀椰噎耶爺野冶也頁掖業葉曳腋夜液一壹醫揖銥依伊衣頤夷遺移儀胰疑沂宜姨彜椅蟻倚已乙矣以藝抑易邑屹億役臆逸肄疫亦裔意毅憶義益溢詣議誼譯異翼翌繹茵蔭因殷音陰姻吟銀淫寅飲尹引隱印英櫻嬰鷹應纓瑩螢營熒蠅迎贏盈影穎硬映喲擁傭臃癰庸雍踴蛹詠泳湧永恿勇用幽優悠憂尤由郵鈾猶油遊酉有友右佑釉誘又幼迂淤于盂榆虞愚輿余俞逾魚愉渝漁隅予娛雨與嶼禹宇語羽玉域芋郁籲遇喻峪禦愈欲獄育譽浴寓裕預豫馭鴛淵冤元垣袁原援轅園員圓猿源緣遠苑願怨院曰約越躍鑰嶽粵月悅閱耘雲鄖勻隕允運蘊醞暈韻孕匝砸雜栽哉災宰載再在咱攢暫贊贓髒葬遭糟鑿藻棗早澡蚤躁噪造皂竈燥責擇則澤賊怎增憎曾贈紮喳渣劄軋鍘閘眨柵榨咋乍炸詐摘齋宅窄債寨瞻氈詹粘沾盞斬輾嶄展蘸棧占戰站湛綻樟章彰漳張掌漲杖丈帳賬仗脹瘴障招昭找沼趙照罩兆肇召遮折哲蟄轍者鍺蔗這浙珍斟眞甄砧臻貞針偵枕疹診震振鎮陣蒸掙睜征猙爭怔整拯正政幀症鄭證芝枝支吱蜘知肢脂汁之織職直植殖執值侄址指止趾只旨紙志摯擲至致置幟峙制智秩稚質炙痔滯治窒中盅忠鍾衷終種腫重仲衆舟周州洲謅粥軸肘帚咒皺宙晝驟珠株蛛朱豬諸誅逐竹燭煮拄矚囑主著柱助蛀貯鑄築住注祝駐抓爪拽專磚轉撰賺篆樁莊裝妝撞壯狀椎錐追贅墜綴諄准捉拙卓桌琢茁酌啄著灼濁茲咨資姿滋淄孜紫仔籽滓子自漬字鬃棕蹤宗綜總縱鄒走奏揍租足卒族祖詛阻組鑽纂嘴醉最罪尊遵昨左佐柞做作坐座';<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">简体转繁体</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> S2T(cc)<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    {<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">'';<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">cc.length;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(charPYStr().indexOf(cc.charAt(i))</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">!=-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            {<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">                str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">ftPYStr().charAt(charPYStr().indexOf(cc.charAt(i)));<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            }<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            {<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">                str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">cc.charAt(i);<br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            }<br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        }<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> str;<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    }<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">繁体转简体</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> T2S(cc)<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    {<br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">'';<br /></span><span style="COLOR: #008080">32</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">cc.length;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br /></span><span style="COLOR: #008080">33</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(ftPYStr().indexOf(cc.charAt(i))</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">!=-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /></span><span style="COLOR: #008080">34</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">                str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">charPYStr().charAt(ftPYStr().indexOf(cc.charAt(i)));<br /></span><span style="COLOR: #008080">35</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">            </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">36</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">                str</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">cc.charAt(i);<br /></span><span style="COLOR: #008080">37</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        }<br /></span><span style="COLOR: #008080">38</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> str;<br /></span><span style="COLOR: #008080">39</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    }<br /></span><span style="COLOR: #008080">40</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> ConvertCharater(type){<br /></span><span style="COLOR: #008080">41</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> txtS </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">txtS</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008080">42</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> txtT </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">txtT</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span><span style="COLOR: #008080">43</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(type</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">==</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /></span><span style="COLOR: #008080">44</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        txtS.value</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">T2S(txtT.value);<br /></span><span style="COLOR: #008080">45</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /></span><span style="COLOR: #008080">46</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">        txtT.value</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">S2T(txtS.value);<br /></span><span style="COLOR: #008080">47</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    }<br /></span><span style="COLOR: #008080">48</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">49</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">50</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">51</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">52</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="简体转繁体"</span><span style="COLOR: #ff0000"> onclick</span><span style="COLOR: #0000ff">='ConvertCharater(1);'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">53</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="繁体转简体"</span><span style="COLOR: #ff0000"> onclick</span><span style="COLOR: #0000ff">='ConvertCharater(0);'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">54</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">55</span> <span style="COLOR: #000000">简体：<br /></span><span style="COLOR: #008080">56</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">57</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">TEXTAREA </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=txtS </span><span style="COLOR: #ff0000">rows</span><span style="COLOR: #0000ff">=10 </span><span style="COLOR: #ff0000">cols</span><span style="COLOR: #0000ff">=80 </span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">TEXTAREA</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">58</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">59</span> <span style="COLOR: #000000">繁体：<br /></span><span style="COLOR: #008080">60</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">61</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">TEXTAREA </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=txtT </span><span style="COLOR: #ff0000">rows</span><span style="COLOR: #0000ff">=10 </span><span style="COLOR: #ff0000">cols</span><span style="COLOR: #0000ff">=80 </span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">TEXTAREA</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">62</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">63</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">64</span> <span style="COLOR: #000000"></span></div>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/21255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-29 00:49 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/29/21255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本打开“我的电脑”等……</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/21/20893.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Wed, 20 Dec 2006 16:12:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/21/20893.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/20893.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/21/20893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/20893.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/20893.html</trackback:ping><description><![CDATA[ function mydoc1()    //打开我的文档<br /> {<br />    var s3 = new ActiveXObject("wscript.shell");<br />    s3.run("explorer.exe ::{450D8FBA-AD25-11D0-98A8-0800361B1103}");<br /> }<br /> <br />  function  mycom()  //打开我的电脑<br /> {<br />    var s1=new ActiveXObject("wscript.shell");  <br />    s1.run("explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"); <br /> }<br /> <br /> function  mycontrol()  //打开控制面板<br /> {<br />    var s1=new ActiveXObject("wscript.shell");  <br />    s1.run("explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}"); <br /> }<br /> <br /> function  myrubbishBin()  //回收站<br /> {<br />    var s1=new ActiveXObject("wscript.shell");  <br />    s1.run("explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E}"); <br /> }<br /><img src ="http://www.cnitblog.com/seeyeah/aggbug/20893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-21 00:12 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/21/20893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从javascript语言本身谈项目实战 </title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/16/20586.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Fri, 15 Dec 2006 17:05:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/16/20586.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/20586.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/16/20586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/20586.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/20586.html</trackback:ping><description><![CDATA[
		<p>随着ajax的升温，javascript越来越得到人们的重视。重要的是，ajax在一定程度上带来了web软件架构上的变化，人们把越来越多的功能分配到客户端实现，javascript子项目规模越来越大。如何更高效的使用javascript，如何更科学的组织javascript，如何更顺利的保证项目进展？我想就我的经验谈一点浅见。</p>
		<p>一。 开发人员需要认真学习javascript语言本身<br />       由于javascript是“[url =http://www2.uuzone.com/blog/555080192/18957.htm]世界上最被误解的语言[/url]”, 大部分人对javascript语法并没有全面了解过，只是凭借看起来很像c或者java的关键字按照自己的理解写javascript代码。其实 javascript是一种很独特的语言，和c++/java有非常大的区别，要想用javascript做大一些的项目，开发人员必须老老实实的学习 javascript的语法。真正掌握了语法后，我们才不会把delete看成释放内存对象，才不会为到底参数传递是值传递还是引用传递而烦恼。真正理解了javascript的基于原型的OO方式，才可能写出具有良好架构的javascript程序。<br />       《javascript权威指南》是一本最合适的书，郑重推荐。另外ECMA262 文档可以作为参考。网上流行的jscript手册chm版本使用起来比较方便，不过这是微软的jscript实现，和标准的javascript略有区别，使用时应该注意上面的注脚信息。关于javascript的原型和OO,网上已经有很多文章介绍了，在此不再多说。</p>
		<p>二。 良好的代码来源于良好的设计<br />       只有设计优良，代码才会写的漂亮。现在的javascript子项目已经不是以前web项目中的“边角料”和散兵游勇了，在较大的ajax项目内， javascript将非常复杂，ajax的异步模型也和以前顺序执行的程序设计有所区别。所以建议做javascript前首先做好设计。推荐使用用例驱动的方式，把用例分析清楚，以便全局考虑所有可能的页面交互过程，绘出页面内一些对象之间的交互图，分析一些数据对象的状态，作出精细的 javascript设计。</p>
		<p>三。 使用设计模式，复用其他领域的设计经验<br />        如果javascript非常复杂，可以考虑使用一些模式。我想大部分做javascript的开发者都不是“javascript科班”出身吧 掌握了javascript的语言本质，就可以复用我们在其他领域的经验了。使用javascript框架或者ajax框架，使用单例模式做一个全局的数据缓冲池，或者使用观察者模式把界面对象和数据对象分离，使用命令模式实现用户的操作队列等等。</p>
		<p>四。 调试代码的技巧<br />        javascript的代码不太好调试，这是由于：</p>
		<p>    * 一般的开发人员对javascript语言本身不太精通。也就是上面提到的。<br />    * web项目包含较多的因素，复杂性加剧。服务端脚本、模板、html、js等很多环节都可能增加调试难度。<br />    * 浏览器存在兼容性问题。有可能在一个细节问题上IE、Mozilla、opera等浏览器都有差异。<br />    * 工具的缺乏。虽然mozilla的jsdebugger非常好用（还有bug，比如eval时调试器有些问题），但是其他浏览器环境下调试工具就不怎么样了。ms系统自带的script debug工具调试本地代码还可以，直接调试网站js代码表现欠佳。opera除了javascript控制台外我没有找到其他调试工具。</p>
		<p>       在此我推荐几个调试技巧：</p>
		<p>   1. 使用Mozilla firefox的jsdebugger插件。这个我不再多说了，最经典的js调试工具。在线调试远程站点的javascript效果非常棒。<br />   2. 把问题隔离，建立本地的html文件和js文件，使用ms script debug调试工具来调试。如果js模块比较独立，可以使用这个工具的。如果写hta的项目，这个工具当然是首选了。<br />   3. httpWatch 这是一个ie下的插件，非常好用，能够监视ie中的任何http会话，并能够看到http会话的原文。可以通过这个工具了解你的程序有没有和服务器产生会话，参数＆返回的数据到底是什么。<br />   4. 在网页内建立用于调试的textarea<br />      可以在网页内建立一个textarea来接受你想运行的js语句，然后加一个按钮使用js的eval函数执行你输入的代码。<br />      这种方式非常适合在线调试，网页出错后写代码输出页面内的对象值。建议写一些dump工具函数配合使用，效果更佳。<br />      我非常喜欢这种方式，可以随时使用开关打开页面内隐藏的textarea进行调试，感觉很像给一台服务器接上了终端，然后使用shell可以做任何事情 函数可以在这里重新定义，可以任意操作界面中的任何元素，调用任何对象的任何函数，输出任何你需要的运行时刻值。<br />   5. 使用异常(exception)和断言(assert)<br />      使用try{}catch(e){}结构不光可以屏蔽出错信息，让界面更友好。我们的程序可以使用异常、抛出异常来构建一种更好的出错处理机制。<br />      有这样一个故事，我在使用string.localeCompare函数时随手写了这样的代码：<br />      var iRe = str1.localeCompare(str2);<br />      switch(iRe){<br />      0: return ....<br />      1: return ....<br />      -1:return ....<br />      defalut:throw "error:localeCompare return other value"<br />      }<br />      写完就忘了，没想到我的同事在linux下使用firefox时，异常被抛出了，然后我们得知：linux firefox下localeCompare返回的不只是0/1/-1,而是返回一个具体值.<br />      这个异常抛出有效的检测出了代码的不完美。</p>
		<p>      firefox下的异常dump后能得到较为详细的调用栈信息，这一点非常好。IE的异常信息没有这么详细。</p>
		<p>      异常和断言也可以结合成为一个非常有效的调试工具。<br />      断言(assert)是在其他语言中的一种很有效的调试工具，常常以这种形式出现：<br />      assert( &lt;条件&gt; ) ;<br />      在程序处于debug状态，当条件为假时，系统中止运行并报告这个断言。由于断言是我们自己定义的，所以我们可以很容易的判断出出错的地方，进而找到bug所在。<br />      javascript语言没有提供宏，也没有提供assert，我们可以这样模拟<br />      if(_is_debug) assert = function(expression , strLable){<br />          if( !expression ) throw Error(strLable);<br />      }<br />      else assert = function(){};//_is_debug是一个全局变量<br />      这样可以实现在发生"不可能的事情"的时候，让程序在调试模式下抛出异常，在发布版本中不作理会。</p>
		<p>      可以这样输出当前栈的调用信息,弥补刚才提到的IE中异常对象没有栈信息的缺陷:<br />      function callStackInfo(){<br />      var s="",line="";<br />      var cer=arguments.callee.caller;<br />      while(cer){<br />      var sf=cer.toString();<br />      s+=line+sf.substring(sf.indexOf('function'),sf.indexOf('{'))+"\n";<br />      line=".."+line;<br />      cer=cer.caller;<br />      }<br />      return s;<br />      }</p>
		<p>       本文只就javascript在web开发，特别是在ajax方面的开发做了一些讨论，主要在于管窥如何更好的使用“纯javascript”。web开发还有很多其他方面，比如xml和Dom等实际上和javascript息息相关，但是本文没有涉及，还请见谅。欢迎各位朋友就我的讨论多提意见。<br /></p>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/20586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-16 01:05 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/16/20586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最亲密接触Dhtml&amp;JScript开发细节</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19883.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 02 Dec 2006 17:18:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19883.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19883.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19883.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19883.html</trackback:ping><description><![CDATA[From <a class="headermaintitle" id="Header1_HeaderTitle" href="http://www.cnblogs.com/birdshome/">鸟食轩</a><br /><hr /><br />脚本语法篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/08/87913.html"><font color="#1d58d1">从JavaScript函数重名看其初始化方式</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/21/95068.html"><font color="#1d58d1">在JScript中运算符"||"和"&amp;&amp;"的特殊特性</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/26/97885.html"><font color="#1d58d1">原来JScript中的关键字'var'还是有文章的</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/26/105867.html"><font color="#1d58d1">JavaScript语言中的Literal Syntax特性</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/01/108461.html"><font color="#1d58d1">JS类定义原型方法的两种实现的区别</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/03/107134.html"><font color="#1d58d1">在JavaScript中使用inline函数的问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/04/111991.html"><font color="#1d58d1">区分JS中的undefined,null,"",0和false</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/07/95931.html"><font color="#1d58d1">JavaScript中this关键字使用方法详解</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/09/102817.html"><font color="#1d58d1">function, new function, new Function</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/07/169168.html"><font color="#1d58d1">JScript中的"this"关键字使用方式补充</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/30/183766.html"><font color="#1d58d1">JavaScript语句可以不以;结尾的烦恼</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/10/14/undefined.html"><font color="#1d58d1">JScript中的undefined和"undefined"</font></a><br />        <br /><br />    脚本调试篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2004/12/30/83996.html"><font color="#1d58d1">我所使用的JavaScript调试环境(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2004/12/31/84495.html"><font color="#1d58d1">(2)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/31/84495.html"><font color="#1d58d1">(3)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/09/89064.html"><font color="#1d58d1">使用IE的地址栏来辅助调试Web页脚本</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/29/98900.html"><font color="#1d58d1">这年头居然连MSDN Library都靠不住呀</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/12/116531.html"><font color="#1d58d1">JS类库Bindows1.3中的内存释放方式</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/01/122075.html"><font color="#1d58d1">访问JavaScript对象的构造函数时失败</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/20/141489.html"><font color="#1d58d1">在with语句中跨frame的变量引用问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/26/145588.html"><font color="#1d58d1">原型方法的不同写法居然会影响调试</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/14/155417.html"><font color="#1d58d1">这么小心还是在"08"向8的转换上栽了</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/21/debugger.html"><font color="#1d58d1">使用debugger语句调试JScript的郁闷</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/09/08/232125.html"><font color="#1d58d1">被逮到一个初始状态考虑不周的Bug</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/11/23/282398.html"><font color="#1d58d1">使用页面元素属性做状态判断的隐患</font></a><br /><br />    脚本技巧篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/05/87009.html"><font color="#1d58d1">比较JavaScript中的集合及其检索效率</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/07/88377.html"><font color="#1d58d1">JScript内置对象Array中元素的删除问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/06/99564.html"><font color="#1d58d1">获取JavaScript用户自定义类的类名称</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/23/107751.html"><font color="#1d58d1">在JavaScript中也玩变量类型强行转换</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/05/113001.html"><font color="#1d58d1">在popup窗口中俘获事件的缺陷&amp;修复</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/26/126256.html"><font color="#1d58d1">怎么判断鼠标移入一个Popup窗口呢?</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/30/128589.html"><font color="#1d58d1">MyMsn beta版源代码里微软遇到问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/07/128182.html"><font color="#1d58d1">在什么时候才会用到fireEvent方法呢?</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/04/167676.html"><font color="#1d58d1">阻止shift+click页面超链接打开新窗口</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/06/168890.html"><font color="#1d58d1">用createEventObject来模拟事件参数</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/24/GetExpandoAttributes.html"><font color="#1d58d1">只遍历出JScript对象的expando属性</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/24/221398.html"><font color="#1d58d1">使用unknown类型判断当前窗口类型</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/09/01/AutoToolTip.html"><font color="#1d58d1">从此不再为Web页面中的Tooltip烦恼</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/01/08/anonymous.html"><font color="#1d58d1">使用匿名函数为setInterval传递参数</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/03/24/StringSort.html"><font color="#1d58d1">按阅读习惯来高效排列字符串的脚本</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/09/28/uniqueID_Usage.html"><font color="#1d58d1">对Web页面元素的绝对唯一引用方法</font></a><br /><br />    脚本应用篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/12/89185.html"><font color="#1d58d1">使用混合脚本编程来实现的Base64编码</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/13/87432.html"><font color="#1d58d1">使用TextRange获取输入框中光标的位置</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/15/92137.html"><font color="#1d58d1">使用混合脚本编程来实现的Base64解码</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/17/92489.html"><font color="#1d58d1">注入Script增加了一个GoogleTrack功能</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/18/93363.html"><font color="#1d58d1">关于Web页中的色彩反转遇到一点问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/19/93865.html"><font color="#1d58d1">为Web页中的Table对象创建一个映射表</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/20/93814.html"><font color="#1d58d1">使用方向键在输入框矩阵中自然的导航</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/25/96739.html"><font color="#1d58d1">JScript版CollectionBase类的一个实现</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/03/99644.html"><font color="#1d58d1">用脚本为本blog增加了几项自定义功能</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/20/95929.html"><font color="#1d58d1">设计有复杂客户端Script的服务器控件</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/22/107221.html"><font color="#1d58d1">对JScript对象的实例Clone的一个实现</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/27/109617.html"><font color="#1d58d1">JavaScript面向对象编程之Singleton类</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/08/113334.html"><font color="#1d58d1">JScript实现的一个String.Format方法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/10/112426.html"><font color="#1d58d1">单扫描的JScript版String.Format方法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/20/122246.html"><font color="#1d58d1">兼容值类型的JavaScript对象Clone方法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/09/134840.html"><font color="#1d58d1">通过n次循环获得n个自然数随机排序</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/11/19/MsnSpaces.html"><font color="#1d58d1">"舍简求繁"的MSN Spaces图片浏览器</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/01/03/UrlBuilder.html"><font color="#1d58d1">Code: UrlBuilder class in JavaScript</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/02/23/HighlightText.html"><font color="#1d58d1">利用搜索引擎引用来高亮页面关键字</font></a><br /><br />    脚本高级篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/28/95933.html"><font color="#1d58d1">在JavaScript面向对象编程中使用继承(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2005/01/30/99385.html"><font color="#1d58d1">(2)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/02/01/100145.html"><font color="#1d58d1">(3)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/02/04/101176.html"><font color="#1d58d1">(4)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/02/07/99411.html"><font color="#1d58d1">(5)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/17/105403.html"><font color="#1d58d1">JScript中的prototype(原型)属性研究(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2005/02/21/101550.html"><font color="#1d58d1">(2)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/24/108337.html"><font color="#1d58d1">在JavaScript面向对象编程中使用重载</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/28/108908.html"><font color="#1d58d1">在JScript面向对象编程中使用重载(续)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/18/119980.html"><font color="#1d58d1">JavaScript中的Object到底是什么呢?!</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/25/109158.html"><font color="#1d58d1">JavaScript对象也玩序列化和反序列化</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/04/131788.html"><font color="#1d58d1">MyMsn动态Resize页框架的布局详解</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/14/115851.html"><font color="#1d58d1">修复附加继承法中模拟重载的一缺陷</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/01/205128.html"><font color="#1d58d1">使用prototype特性编程中的效率问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/05/01/ScrollTable.html"><font color="#1d58d1">绝对的单表格支持横纵表头锁定示例</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/05/13/ScrollTableDetails.html"><font color="#1d58d1">网页中单一表格横纵表头锁定的细节</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/05/28/IE_MemoryLeak.html"><font color="#1d58d1">理解并解决IE的内存泄漏方式[翻译]</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2006/06/01/ClosureReferences.html"><font color="#1d58d1">[2]</font></a><a href="http://www.cnblogs.com/birdshome/archive/2006/06/17/Cross_Page_Leaks.html"><font color="#1d58d1">[3]</font></a><a href="http://www.cnblogs.com/birdshome/archive/2006/06/30/Pseudo_Leaks.html"><font color="#1d58d1">[4]</font></a>   <br /><br />    Ajax基础篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2004/12/26/82238.html"><font color="#1d58d1">使用XMLHTTP Request Object获取服务器数据</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2004/12/27/82274.html"><font color="#1d58d1">构建一个pool来管理无刷新页面的xmlhttp对象</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2004/12/31/84955.html"><font color="#1d58d1">把JScript函数模拟为"异步执行"方式</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/03/10/Ajax_Base.html"><font color="#1d58d1">Ajax基石脚本异步并发调用参数传递</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/05/25/AjaxIndicators.html"><font color="#1d58d1">让您的Ajax应用加载数据时界面友好</font></a><br /><br />    控件开发篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2004/12/11/75487.html"><font color="#1d58d1">使用Popup窗口创建无限级Web页菜单(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2004/12/12/75830.html"><font color="#1d58d1">(2)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/14/76651.html"><font color="#1d58d1">(3)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/16/77666.html"><font color="#1d58d1">(4)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/17/78200.html"><font color="#1d58d1">(5)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/18/78929.html"><font color="#1d58d1">(6)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/21/79822.html"><font color="#1d58d1">(7)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2004/12/23/80778.html"><font color="#1d58d1">(8)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/11/117168.html"><font color="#1d58d1">动态载入数据的无刷新TreeView控件(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2005/03/13/99776.html"><font color="#1d58d1">(2)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/03/15/117925.html"><font color="#1d58d1">(3)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/03/17/119359.html"><font color="#1d58d1">(4)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/03/19/121450.html"><font color="#1d58d1">(5)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/03/24/123046.html"><font color="#1d58d1">(6)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/03/29/127559.html"><font color="#1d58d1">(7)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/04/02/129777.html"><font color="#1d58d1">(8)</font></a><a href="http://www.cnblogs.com/birdshome/archive/2005/04/10/135043.html"><font color="#1d58d1">(9)</font></a><br /><br />    DHTML篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/03/85679.html"><font color="#1d58d1">使用CheckBox的indeterminate属性的问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/04/86507.html"><font color="#1d58d1">获取Html元素在页面中的绝对位置及问题(1)</font></a> <a href="http://www.cnblogs.com/birdshome/archive/2005/01/11/89753.html"><font color="#1d58d1">(2)</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/06/87667.html"><font color="#1d58d1">Web页中的HTML元素的排版布局规则</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/10/88454.html"><font color="#1d58d1">用户定制Web页中元素的排版布局策略</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/16/92491.html"><font color="#1d58d1">关于HTML Object中三个Style实例的区别</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/22/95818.html"><font color="#1d58d1">使用button元素自定义别具风格的按钮</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/23/96195.html"><font color="#1d58d1">用系统滚动条实现NumericUpDown的原理</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/24/96635.html"><font color="#1d58d1">系统滚动条实现的NUD控件Unusable版</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/31/html_id_name.html"><font color="#1d58d1">细说HTML元素的ID和Name属性的区别</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/18/uniqueID.html"><font color="#1d58d1">挺好玩的uniqueID&amp;uniqueNumber属性</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/14/118649.html"><font color="#1d58d1">精通CSS(层叠样式单)语法请帮忙看看</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/11/109356.html"><font color="#1d58d1">JavaScript中的5种事件使用方式解说</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/15/Scriptlets.html"><font color="#1d58d1">DHTML Scriptlets 容器对象参考手册</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/17/139022.html"><font color="#1d58d1">使用DOM来创建页面元素的一些问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/18/157782.html"><font color="#1d58d1">使用乱序标签来控制HTML的输出效果</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/27/163404.html"><font color="#1d58d1">HTML Elements 和 DHTML Objects</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/02/166705.html"><font color="#1d58d1">在使用optgroup时遇到的缺陷与修复</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/11/172535.html"><font color="#1d58d1">滚动TextArea中内容到底部的BT方法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/07/02/184928.html"><font color="#1d58d1">精确地计算Web页面中滚动条的宽度</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/05/207785.html"><font color="#1d58d1">在Web页面中控制其元素的选择状态</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/16/215700.html"><font color="#1d58d1">HTML中不支持静态Expando的元素</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/09/30/OnBeforeUnload.html"><font color="#1d58d1">使用onbeforeunload属性后的副作用</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/12/27/DropDownList.html"><font color="#1d58d1">在Option条目中填充前导空格的方法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/04/24/runtimeStyle.html"><font color="#1d58d1">关于使用runtimeStyle属性问题讨论</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/07/22/Drag_Drop.html"><font color="#1d58d1">Web开发中的Drag&amp;Drop完全手册</font></a><br /><br />    IE问题篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/01/14/91586.html"><font color="#1d58d1">IE的模态对话框里的问题还真是不少</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/15/104599.html"><font color="#1d58d1">IE的JScript解析器可能有Memory Leak</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/02/16/104967.html"><font color="#1d58d1">继续来研究JScript解析引擎的GC问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/03/23/120057.html"><font color="#1d58d1">同一页面引入多个JS文件的编码问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/04/27/146302.html"><font color="#1d58d1">处理IE中Bubble Up 事件模型的细节</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/01/148531.html"><font color="#1d58d1">搞笑的W3C和M$对DOM中属性命名</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/07/20/196396.html"><font color="#1d58d1">在XP+SP2下隐藏模态窗口的状态栏</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/07/28/202331.html"><font color="#1d58d1">判断用户浏览器是否是XP SP2的IE6</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/14/214351.html"><font color="#1d58d1">在IE模态窗口中自由查看HTML源码</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/08/27/224019.html"><font color="#1d58d1">模态窗口对字符串参数的巨无聊限制</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/09/27/Filter.html"><font color="#1d58d1">应用虑镜特效时遇到浏览器权限问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/11/25/JScriptEncode.html"><font color="#1d58d1">encode脚本和normal脚本混用的问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/01/27/IE7_XMLHttpRequest.html"><font color="#1d58d1">IE7提供XMLHttpRequest对象为兼容</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/02/20/OptGroup.html"><font color="#1d58d1">IE6使用add方法添加optGroup的bug</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/05/23/HtmAspxAsp.html"><font color="#1d58d1">IE解析完全相同html代码的不同表现</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/06/23/Control_Browser_Title.html"><font color="#1d58d1">怎样在Web开发中完美控制IE标题栏</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/09/12/IE6_MS042_Crash.html"><font color="#1d58d1">IE6 Hotfix MS-042将导致其Crash!</font></a><br /><br />    其它篇<br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/24/161375.html"><font color="#1d58d1">IIS对于Web页中相对路径解析的问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/29/164667.html"><font color="#1d58d1">关于对cross-browser支持的一些看法</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/05/30/164713.html"><font color="#1d58d1">谈一谈支持cross-browser的解决方案</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/06/20/177404.html"><font color="#1d58d1">SmartNavigation在Fx2.0中下岗了...</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2005/09/26/DOMExplorer.html"><font color="#1d58d1">关于DOM Explorer插件的功能和问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/02/11/DOMExplorer2.html"><font color="#1d58d1">DOM Explorer升级修正了大部分问题</font></a><br />        ·<a href="http://www.cnblogs.com/birdshome/archive/2006/03/08/Script56.html"><font color="#1d58d1">微软终于想通把Script56文档更新了</font></a><br /><img src ="http://www.cnitblog.com/seeyeah/aggbug/19883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-03 01:18 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/03/19883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>细说HTML元素的ID和Name属性的区别</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19882.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 02 Dec 2006 17:17:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19882.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19882.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19882.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19882.html</trackback:ping><description><![CDATA[From <a class="headermaintitle" id="Header1_HeaderTitle" href="http://www.cnblogs.com/birdshome/">鸟食轩</a><br /><hr /><br />可以说几乎每个做过Web开发的人都问过，到底元素的ID和Name有什么区别阿？为什么有了ID还要有Name呢?! 而同样我们也可以得到最classical的答案：ID就像是一个人的身份证号码，而Name就像是他的名字，ID显然是唯一的，而Name是可以重复的。<br /><br />    上周我也遇到了ID和Name的问题，在页面里输入了一个input type="hidden"，只写了一个ID='SliceInfo'，赋值后submit，在后台用Request.Params["SliceInfo"]却怎么也去不到值<img height="19" src="http://www2.cnblogs.com/Emoticons/emdgust.gif" width="19" border="0" />。后来恍然大悟因该用Name来标示，于是在input里加了个Name='SliceInfo'，就一切ok了。<br /><br />    第一段里对于ID和Name的解答说的太笼统了，当然那个解释对于ID来说是完全对的，它就是Client端HTML元素的Identity。而Name其实要复杂的多，因为Name有很多种的用途，所以它并不能完全由ID来代替，从而将其取消掉。具体用途有：<br /><br />    用途1: 作为可与服务器交互数据的HTML元素的服务器端的标示，比如input、select、textarea、和button等。我们可以在服务器端根据其Name通过Request.Params取得元素提交的值。<br />    用途2: HTML元素Input type='radio'分组，我们知道radio button控件在同一个分组类，check操作是mutex的，同一时间只能选中一个radio，这个分组就是根据相同的Name属性来实现的。<br />    用途3: 建立页面中的锚点，我们知道&lt;a href="URL"&gt;link&lt;/a&gt;是获得一个页面超级链接，如果不用href属性，而改用Name，如：&lt;a name="PageBottom"&gt;&lt;/a&gt;，我们就获得了一个页面锚点。<br />    用途4: 作为对象的Identity，如Applet、Object、Embed等元素。比如在Applet对象实例中，我们将使用其Name来引用该对象。<br />    用途5: 在IMG元素和MAP元素之间关联的时候，如果要定义IMG的热点区域，需要使用其属性usemap，使usemap="#name"(被关联的MAP元素的Name)。<br />    用途6: 某些特定元素的属性，如attribute，meta和param。例如为Object定义参数&lt;PARAM NAME = "appletParameter" VALUE = "value"&gt;或Meta中&lt;META NAME = "Author" CONTENT = "Dave Raggett"&gt;。<br /><br />    显然这些用途都不是能简单的使用ID来代替掉的，所以HTML元素的ID和Name的却别并不是身份证号码和姓名这样的区别，它们更本就是不同作用的东西。<br /><br />    当然HTML元素的Name属性在页面中也可以起那么一点ID的作用，因为在DHTML对象树中，我们可以使用document.getElementsByName来获取一个包含页面中所有指定Name元素的对象数组。Name属性还有一个问题，当我们动态创建可包含Name属性的元素时，不能简单的使用赋值element.name = "..."来添加其Name，而必须在创建Element时，使用document.createElement('&lt;element name = "myName"&gt;&lt;/element&gt;')为元素添加Name属性。这是什么意思啊？看下面的例子就明白了。
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img id="Codehighlighter1_30_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_141_Open_Text.style.display='none'; Codehighlighter1_30_141_Closed_Image.style.display='inline'; Codehighlighter1_30_141_Closed_Text.style.display='inline';" src="http://www2.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_141_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_141_Closed_Text.style.display='none'; Codehighlighter1_30_141_Open_Image.style.display='inline'; Codehighlighter1_30_141_Open_Text.style.display='inline';" src="http://www2.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_30_141_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www2.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_30_141_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> input </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> document.createElement('INPUT');<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />input.id </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> 'myId';<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />input.name </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> 'myName';<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />alert(input.outerHTML);<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div></div><p>    消息框里显示的结果是：&lt;INPUT id=myId&gt;。</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img id="Codehighlighter1_30_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_134_Open_Text.style.display='none'; Codehighlighter1_30_134_Closed_Image.style.display='inline'; Codehighlighter1_30_134_Closed_Text.style.display='inline';" src="http://www2.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_134_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_134_Closed_Text.style.display='none'; Codehighlighter1_30_134_Open_Image.style.display='inline'; Codehighlighter1_30_134_Open_Text.style.display='inline';" src="http://www2.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_30_134_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www2.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_30_134_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> input </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> document.createElement('</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">INPUT name</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">myName</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">');<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />input.id </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> 'myId';<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />alert(input.outerHTML);<br /><img src="http://www2.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div></div><p>    消息框里显示的结果是：&lt;INPUT id=myId name=myName&gt;。<br />    初始化Name属性的这个设计不是IE的缺陷，因为MSDN里说了要这么做的，可是这样设计的原理什么呢？我暂时没有想太明白<img height="19" src="http://www2.cnblogs.com/emoticons/emembarrassed.gif" width="19" border="0" />。<br /><br />    这里再顺便说一下，要是页面中有n(n&gt;1)个HTML元素的ID都相同了怎么办？在DHTML对象中怎么引用他们呢？如果我们使用ASPX页面，这样的情况是不容易发生的，因为aspnet进程在处理aspx页面时根本就不允许有ID非唯一，这是页面会被抛出异常而不能被正常的render。要是不是动态页面，我们硬要让ID重复那IE怎么搞呢？这个时候我们还是可以继续使用document.getElementById获取对象，只不过我们只能获取ID重复的那些对象中在HTML Render时第一个出现的对象。而这时重复的ID会在引用时自动变成一个数组，ID重复的元素按Render的顺序依次存在于数组中</p><img src ="http://www.cnitblog.com/seeyeah/aggbug/19882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-03 01:17 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/03/19882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>只遍历出JScript对象的expando属性</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19881.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 02 Dec 2006 17:15:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19881.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19881.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19881.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19881.html</trackback:ping><description><![CDATA[我们知道JScript的对象(不只是Object)可以像html元素对象一样，添加任意的自定义属性值。也就是说JScript的对象，天生都是Key/Value map。并且这种map结构由于使用Native的代码实现，检索效率非常之高，我曾在<a href="http://www.cnblogs.com/birdshome/archive/2005/01/05/87009.html"><font color="#1d58d1">这篇</font></a>文章里讨论过。不过在遍历这样的map时，expando导入属性和prototype导入属性存在了混淆。<br /><br />    由于JScript的prototype特性对对象的扩充非常的方便，所以我们在制作一些JScript类库的时候，一般都会使用prototype特性为对象添加方法，比如我们对Object进行如下prototype扩充： 
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Object.prototype.Clone </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() {};<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />Object.prototype.Call </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() {};<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />Object.prototype.OtherMethod </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){};</span></div></div><br />    这个时候如果再使用Object作为map结构来使用，我们就会遇到遍历这个map的错误，看下面的代码： 
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> objMap </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> {};<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />objMap['abc'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.abc';<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />objMap['def'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.def';<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />objMap['ghi'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.ghi';<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />objMap['jkl'] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> '</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.jkl';    </span></div></div><br />    遍历这个集合： 
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> DisplayMap(map)<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />{<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> values </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [];<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> ( </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> key </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> map )<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    {<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />        values.push(map[key]);<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    }<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> values;<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />Display(objMap);</span></div></div><br />    我们发现，在values里的值居然是：<span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){},</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() {},</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() {},</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.abc,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.def,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.ghi,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.jkl。</span>真是郁闷<img height="19" src="http://birdshome.cnblogs.com/Emoticons/angry_smile.gif" width="19" border="0" />! 其实这就是 <font color="#0000ff">for in </font>语句的效果，JScript也就是这么设计的，我们没有办法改变。那么我门能不能只取出objMap中expando进去的属性呢？<br /><br />    由于prototype属性的优先级很高，在对象实例生成的时候就expand到对象实例中去了。所以我们建立的任何一个对象，都会包含相同的prototype属性。这样一来就好办了，我们把objMap中的prototype属性找出来过滤掉就行了呗。参考代码如下： 
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> GetExpandoValues(map)<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />{<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> values </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [];<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> map.constructor();<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> ( </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> key </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> map )<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    {<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( obj[key] </span><span style="COLOR: #000000">!==</span><span style="COLOR: #000000"> map[key] )<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />        {<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />            values.push(map[key]);<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />        }<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    }<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> values;<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://birdshome.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />GetExpandoValues(objMap);</span></div></div><br />    获得结果为：1.abc,2.def,3.ghi,4.jkl<img height="19" src="http://birdshome.cnblogs.com/Emoticons/teeth_smile.gif" width="19" border="0" />。<br /><br /><script language="javascript"><![CDATA[
	Object.prototype.Clone = function() {};
	Object.prototype.Call = function() {};
	Object.prototype.OtherMethod = function(){};

	var objMap = {};
	objMap['abc'] = '1.abc';
	objMap['def'] = '2.def';
	objMap['ghi'] = '3.ghi';
	objMap['jkl'] = '4.jkl';	
	]]&gt;</script>
   <button onclick="alert(DisplayMap(objMap))">Display All Expand Attributes</button> <button onclick="alert(GetExpandoValues(objMap))">Display Expando Attributes</button><br /><script language="javascript"><![CDATA[
	function DisplayMap(map)
	{
		var values = [];
		for ( var key in map )
		{
			values.push(map[key]);
		}
		return values;
	}
	
function GetExpandoValues(map)
{
	var values = [];
	var obj = new objMap.constructor();
	for ( var key in map )
	{
		if ( obj[key] !== map[key] )
		{
			values.push(map[key]);
		}
	}
	return values;
}
	]]&gt;</script><img src ="http://www.cnitblog.com/seeyeah/aggbug/19881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-03 01:15 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/03/19881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JScript中的undefined和"undefined"</title><link>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19875.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 02 Dec 2006 17:04:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19875.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19875.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/12/03/19875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19875.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19875.html</trackback:ping><description><![CDATA[From :<a class="headermaintitle" id="Header1_HeaderTitle" href="http://www.cnblogs.com/birdshome/">鸟食轩</a><br /><hr />
JScript中用于表示未定义的<font color="#0000ff">undefined</font>标识符到底是表示什么未定义？它和<font color="#0000ff">"undefined"</font><font color="#000000"><font face="Tahoma">(包括"在内)又有什么区别和联系呢？为什么有的时候可以使用<font color="#0000ff">undefined</font>来和变量做比较，而有的时候又不行呢？<br /><br />    <font color="#0000ff">underfined</font>和<font color="#0000ff">"undefined"</font>的区别大家一眼就能看出来。在一般的认知下，我们认为<font color="#0000ff">undefined</font>是JScript提供的一个"关键字"，而<font color="#0000ff">"undefined"</font>却毫无悬念的就是一个字符串，只是引号内的内容长得和<font color="#0000ff">undefined</font>一个样。<font color="#0000ff">undefined</font>和<font color="#0000ff">"undefined"</font>的区别虽然是十分明显的，但它们的联系也是紧密的。<br /><br />    仔细阅读JScript手册，其实这个underfined是一个"已定义"的Global值，而不是它的字面意义所表达的未定义。我们看下面这个代码示例，很有趣：<br /></font><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font face="Tahoma"><img id="Codehighlighter1_30_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_65_Open_Text.style.display='none'; Codehighlighter1_30_65_Closed_Image.style.display='inline'; Codehighlighter1_30_65_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_65_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_65_Closed_Text.style.display='none'; Codehighlighter1_30_65_Open_Image.style.display='inline'; Codehighlighter1_30_65_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_30_65_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif" /></span></font><span id="Codehighlighter1_30_65_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><font face="Tahoma"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />alert(undefined);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />alert(variable);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></font></span></span><font face="Tahoma"><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></font></div></font><br /><font face="Tahoma">    执行的结果是：<br />    <img height="268" alt="undefined.png" src="http://www.cnblogs.com/images/cnblogs_com/birdshome/NormalArticle/2006/undefined.png" width="599" border="0" /><br /><br />    我们稍微修改一下上面的代码，添加一个typeof调用来看看：    </font><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><font face="Tahoma"><img id="Codehighlighter1_30_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_65_Open_Text.style.display='none'; Codehighlighter1_30_65_Closed_Image.style.display='inline'; Codehighlighter1_30_65_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_65_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_65_Closed_Text.style.display='none'; Codehighlighter1_30_65_Open_Image.style.display='inline'; Codehighlighter1_30_65_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_30_65_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif" /></span></font><span id="Codehighlighter1_30_65_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><font face="Tahoma"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />alert(<font color="#0000ff">typeof</font> undefined);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />alert(<font color="#0000ff">typeof</font> variable);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></font></span></span><font face="Tahoma"><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></font></div><br /><font face="Tahoma">    这下结果应该是什么呢？显示<font color="#0000ff">"object"</font>和<font color="#0000ff">"undefined"</font>吗？当然不是了，两个alert调用都将显示<font color="#0000ff">"undefined"</font>。<br /><br />    所以<font color="#0000ff">undefined</font>是脚本引擎定义的一个常量，它在脚本引擎初始化完毕后存在。它的实际作用是用<strong>来表示一个已定义的变量的为初始化状态(uninitialized)</strong>，比如var i;，这时这个i的值就是<font color="#0000ff">undefined</font>，而i是实实在在define了的，只是未初始化。这时我们就可以写这样的表达式来对i做判断，比如if ( i == <font color="#0000ff">undefined</font> )。如果从未在代码中出现过的变量被使用，这时的未定义的概念就是不<font color="#0000ff">undefined</font>所描述的未初始化了，而是说明该变量完全未被登记到脚本引擎的上下文中。使用类似if ( abc == <font color="#0000ff">undefined</font> )的语句，将得到类似上图中的第二个错误提示。<br /><br />    在实际使用中，如果使用typeof来判断变量是否未定义，是可以完全兼容<strong>未定义(undefined)</strong>和<strong>未初始化(uninitialized)</strong>两种情况的，只是很多时我不喜欢使用 if ( typeof xxx == <font color="#0000ff">'undefined'</font> ) 这样的写法，因为literal的字符串容易拼写错误，对用习惯了的强类型语言的角度来看也显得不专业。<br /></font><img src ="http://www.cnitblog.com/seeyeah/aggbug/19875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-12-03 01:04 <a href="http://www.cnitblog.com/seeyeah/archive/2006/12/03/19875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用ProtoType开发的另一JavaScript框架</title><link>http://www.cnitblog.com/seeyeah/archive/2006/11/26/19599.html</link><dc:creator>KiMoGiGi</dc:creator><author>KiMoGiGi</author><pubDate>Sat, 25 Nov 2006 16:59:00 GMT</pubDate><guid>http://www.cnitblog.com/seeyeah/archive/2006/11/26/19599.html</guid><wfw:comment>http://www.cnitblog.com/seeyeah/comments/19599.html</wfw:comment><comments>http://www.cnitblog.com/seeyeah/archive/2006/11/26/19599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/seeyeah/comments/commentRss/19599.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/seeyeah/services/trackbacks/19599.html</trackback:ping><description><![CDATA[
		<a href="http://script.aculo.us/">http://script.aculo.us/</a>
		<br />
		<br />
		<a href="/Files/seeyeah/scriptaculous-js-1.6.5.zip">http://www.cnitblog.com/Files/seeyeah/scriptaculous-js-1.6.5.zip</a>
<img src ="http://www.cnitblog.com/seeyeah/aggbug/19599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/seeyeah/" target="_blank">KiMoGiGi</a> 2006-11-26 00:59 <a href="http://www.cnitblog.com/seeyeah/archive/2006/11/26/19599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>