﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-SIMONE-随笔分类-JavaScript</title><link>http://www.blogjava.net/wangxinsh55/category/9541.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 04 Mar 2016 07:32:35 GMT</lastBuildDate><pubDate>Fri, 04 Mar 2016 07:32:35 GMT</pubDate><ttl>60</ttl><item><title>模块化利器: 一篇文章掌握RequireJS常用知识</title><link>http://www.blogjava.net/wangxinsh55/archive/2016/03/04/429538.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 04 Mar 2016 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2016/03/04/429538.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/429538.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2016/03/04/429538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/429538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/429538.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/lyzg/p/4865502.html</div><br /><div> 		 		<div> 			<div id="cnblogs_post_body"><div id="navCategory" style="background-color: #BDBDBD;padding:10px 5px;"><p style="font-size:18px;margin:0;line-height:30px;"><strong>阅读目录</strong></p><ul><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label0">1. 模块化</a></li><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label1">2. AMD规范</a></li><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label2">3. JavaScript的异步加载和按需加载</a></li><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label3">4. RequireJS常用用法总结</a></li><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label4">5. RequireJS常用配置总结</a></li><li><a href="http://www.cnblogs.com/lyzg/p/4865502.html#_label5">6. 错误处理</a></li></ul></div><p>通 过本文，你可以对模块化开发和AMD规范有一个较直观的认识，并详细地学习RequireJS这个模块化开发工具的常见用法。本文采取循序渐进的方式，从 理论到实践，从RequireJS官方API文档中，总结出在使用RequireJS过程中最常用的一些用法，并对文档中不够清晰具体的内容，加以例证和 分析，希望本文的内容对你的能力提升有实质性的帮助。</p> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label0"></a></div><h2>1. 模块化</h2> <p>相信每个前端开发人员在刚开始接触js编程时，都写过类似下面这样风格的代码：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>&lt;script type="text/javascript"&gt;     <span style="color: #0000ff;">var</span> a = 1<span style="color: #000000;">;     </span><span style="color: #0000ff;">var</span> b = 2<span style="color: #000000;">;     </span><span style="color: #0000ff;">var</span> c = a * a + b *<span style="color: #000000;"> b;      </span><span style="color: #0000ff;">if</span>(c&gt; 1<span style="color: #000000;">) {         alert(</span>'c &gt; 1'<span style="color: #000000;">);     }      </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> add(a, b) {         </span><span style="color: #0000ff;">return</span> a +<span style="color: #000000;"> b;     }      c </span>=<span style="color: #000000;"> add(a,b); </span>&lt;/script&gt;</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>&lt;a href="javascript:;" onclick="click(this);" title=""&gt;请点击&lt;/a&gt;</pre> </div> <p>这些代码的特点是：</p> <ul><li><strong>到处可见的全局变量</strong></li><li><strong>大量的函数</strong></li><li><strong>内嵌在html元素上的各种js调用</strong></li></ul> <p>当然这些代码本身在实现功能上并没有错误，但是从代码的可重用性，健壮性以及可维护性来说，这种编程方式是有问题的，尤其是在页面逻辑较为复杂的应用中，这些问题会暴露地特别明显：</p> <ul><li><strong>全局变量极易造成命名冲突</strong></li><li><strong>函数式编程非常不利于代码的组织和管理</strong></li><li><strong>内嵌的js调用很不利于代码的维护，因为html代码有的时候是十分臃肿和庞大的</strong></li></ul> <p>所以当这些问题出现的时候，js大牛们就开始寻找去解决这些问题的究极办法，于是模块化开发就出现了。正如模块化这个概念的表面意思一样，它要求在 编写代码的时候，按层次，按功能，将独立的逻辑，封装成可重用的模块，对外提供直接明了的调用接口，内部实现细节完全私有，并且模块之间的内部实现在执行 期间互不干扰，最终的结果就是可以解决前面举例提到的问题。一个简单遵循模块化开发要求编写的例子：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #008000;">//</span><span style="color: #008000;">module.js</span> <span style="color: #0000ff;">var</span> student = <span style="color: #0000ff;">function</span><span style="color: #000000;"> (name) {         </span><span style="color: #0000ff;">return</span> name &amp;&amp;<span style="color: #000000;"> {                 getName: </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> () {                     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;                 }             };     },     course </span>= <span style="color: #0000ff;">function</span><span style="color: #000000;"> (name) {         </span><span style="color: #0000ff;">return</span> name &amp;&amp;<span style="color: #000000;"> {                 getName: </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> () {                     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> name;                 }             }     },     controller </span>= <span style="color: #0000ff;">function</span><span style="color: #000000;"> () {         </span><span style="color: #0000ff;">var</span> data =<span style="color: #000000;"> {};         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {             add: </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> (stu, cour) {                 </span><span style="color: #0000ff;">var</span> stuName = stu &amp;&amp;<span style="color: #000000;"> stu.getName(),                     courName </span>= cour &amp;&amp;<span style="color: #000000;"> cour.getName(),                     current,                     _filter </span>= <span style="color: #0000ff;">function</span><span style="color: #000000;"> (e) {                         </span><span style="color: #0000ff;">return</span> e ===<span style="color: #000000;"> courName;                     };                  </span><span style="color: #0000ff;">if</span> (!stuName || !courName) <span style="color: #0000ff;">return</span><span style="color: #000000;">;                  current </span>= data[stuName] = data[stuName] ||<span style="color: #000000;"> [];                  </span><span style="color: #0000ff;">if</span> (current.filter(_filter).length === 0<span style="color: #000000;">) {                     current.push(courName);                 }             },             list: </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> (stu) {                 </span><span style="color: #0000ff;">var</span> stuName = stu &amp;&amp;<span style="color: #000000;"> stu.getName(),                     current </span>=<span style="color: #000000;"> data[stuName];                 current </span>&amp;&amp; console.log(current.join(';'<span style="color: #000000;">));             }         }     };  </span><span style="color: #008000;">//</span><span style="color: #008000;">main.js</span>  <span style="color: #0000ff;">var</span> stu = <span style="color: #0000ff;">new</span> student('lyzg'<span style="color: #000000;">),     c </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> controller();  c.add(stu,</span><span style="color: #0000ff;">new</span> course('javascript'<span style="color: #000000;">)); c.add(stu,</span><span style="color: #0000ff;">new</span> course('html'<span style="color: #000000;">)); c.add(stu,</span><span style="color: #0000ff;">new</span> course('css'<span style="color: #000000;">)); c.list(stu);</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>以上代码定义了三个模块分别表示学生，课程和控制器，然后在main.js中调用了controller提供的add和list接口，为lyzg这个学生添加了三门课程，然后在控制台显示了出来。运行结果如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>javascript;html;css</pre> </div> <p>通过上例，可以看出模块化的代码结构和逻辑十分清晰，代码看起来十分优雅，另外由于逻辑都通过模块拆分，所以达到了解耦的目的，代码的功能也会比较 健壮。不过上例使用的这种模块化开发方式也并不是没有问题，这个问题就是它还是把模块引用如student这些直接添加到了全局空间下，虽然通过模块减少 了很多全局空间的变量和函数，但是模块引用本身还是要依赖全局空间，才能被调用，当模块较多，或者有引入第三方模块库时，仍然可能造成命名冲突的问题，所 以这种全局空间下的模块化开发的方式并不是最完美的方式。目前常见的模块化开发方式，全局空间方式是最基本的一种，另外常见的还有遵循AMD规范的开发方 式，遵循CMD规范的开发方式，和ECMAScript  6的开发方式。需要说明的是，CMD和ES6跟本文的核心没有关系，所以不会在此介绍，后面的内容主要介绍AMD以及实现了AMD规范的 RequireJS。</p> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label1"></a></div><h2>2. AMD规范</h2> <p>正如上文提到，实现模块化开发的方式，另外常见的一种就是遵循AMD规范的实现方式，不过AMD规范并不是具体的实现方式，而仅仅是模块化开发的一 种解决方案，你可以把它理解成模块化开发的一些接口声明，如果你要实现一个遵循该规范的模块化开发工具，就必须实现它预先定义的API。比如它要求在加载 模块时，必须使用如下的API调用方式：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #000000;">require([module], callback) 其中： [module]：是一个数组，里面的成员就是要加载的模块; callback：是模块加载完成之后的回调函数</span></pre> </div> <p>所有遵循AMD规范的模块化工具，都必须按照它的要求去实现，比如RequireJS这个库，就是完全遵循AMD规范实现的，所以在利用 RequireJS加载或者调用模块时，如果你事先知道AMD规范的话，你就知道该怎么用RequireJS了。规范的好处在于，不同的实现却有相同的调 用方式，很容易切换不同的工具使用，至于具体用哪一个实现，这就跟各个工具的各自的优点跟项目的特点有关系，这些都是在项目开始选型的时候需要确定的。目 前RequireJS不是唯一实现了AMD规范的库，像Dojo这种更全面的js库也都有AMD的实现。</p> <p>最后对AMD全称做一个解释，译为：异步模块定义。异步强调的是，在加载模块以及模块所依赖的其它模块时，都采用异步加载的方式，避免模块加载阻塞了网页的渲染进度。相比传统的异步加载，AMD工具的异步加载更加简便，而且还能实现按需加载，具体解释在下一部分说明。</p> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label2"></a></div><h2>3. JavaScript的异步加载和按需加载</h2> <p>html中的script标签在加载和执行过程中会阻塞网页的渲染，所以一般要求尽量将script标签放置在body元素的底部，以便加快页面显示的速度，还有一种方式就是通过异步加载的方式来加载js，这样可以避免js文件对html渲染的阻塞。</p> <p>第1种异步加载的方式是直接利用脚本生成script标签的方式：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>(<span style="color: #0000ff;">function</span><span style="color: #000000;">() {     var s </span>= document.createElement(<span style="color: #800000;">'</span><span style="color: #800000;">script</span><span style="color: #800000;">'</span><span style="color: #000000;">);     s.type </span>= <span style="color: #800000;">'</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">'</span><span style="color: #000000;">;     s.async </span>= <span style="color: #0000ff;">true</span><span style="color: #000000;">;     s.src </span>= <span style="color: #800000;">'</span><span style="color: #800000;">http://yourdomain.com/script.js</span><span style="color: #800000;">'</span><span style="color: #000000;">;     var x </span>= document.getElementsByTagName(<span style="color: #800000;">'</span><span style="color: #800000;">script</span><span style="color: #800000;">'</span>)[<span style="color: #800080;">0</span><span style="color: #000000;">];     x.parentNode.insertBefore(s, x); })();</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>这段代码，放置在script标记内部，然后该script标记添加到body元素的底部即可。</p> <p>第2种方式是借助script的属性：defer和async，defer这个属性在IE浏览器和早起的火狐浏览器中支持，async在支持 html5的浏览器上都支持，只要有这两个属性，script就会以异步的方式来加载，所以script在html中的位置就不重要了：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>&lt;script defer async=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">app/foo.js</span><span style="color: #800000;">"</span>&gt;&lt;/script&gt; &lt;script defer async=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">app/bar.js</span><span style="color: #800000;">"</span>&gt;&lt;/script&gt;</pre> <pre>&lt;script defer async=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">app/main.js</span><span style="color: #800000;">"</span>&gt;&lt;/script&gt;</pre> </div> <p>这种方式下，所有异步js在执行的时候还是按顺序执行的，不然就会存在依赖问题，比如如果上例中的main.js依赖foo.js和bar.js， 但是main.js先执行的话就会出错了。虽然从来理论上这种方式也算不错了，但是不够好，因为它用起来很繁琐，而且还有个问题就是页面需要添加多个 script标记以及没有办法完全做到按需加载。</p> <p><strong>JS的按需加载</strong>分两个层次，第一个层次是只加载这个页面可能被用到的JS，第二个层次是在只在用到某个JS的时 候才去加载。传统地方式很容易做到第一个层次，但是不容易做到第二个层次，虽然我们可以通过合并和压缩工具，将某个页面所有的JS都添加到一个文件中去， 最大程度减少资源请求量，但是这个JS请求到客户端以后，其中有很多内容可能都用不上，要是有个工具能够做到在需要的时候才去加载相关js就完美解决问题 了，比如RequireJS。</p> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label3"></a></div><h2>4. RequireJS常用用法总结</h2> <p>前文多次提及RequireJS，本部分将对它的常用用法详细说明，它的官方地址是：<a title="http://www.requirejs.cn/" href="http://www.requirejs.cn/">http://www.requirejs.cn/</a>，你可以到该地址去下载最新版RequireJS文件。RequireJS作为目前使用最广泛的AMD工具，它的主要优点是：</p> <ul><li>完全支持模块化开发</li><li>能将非AMD规范的模块引入到RequireJS中使用</li><li>异步加载JS</li><li>完全按需加载依赖模块，模块文件只需要压缩混淆，不需要合并</li><li>错误调试</li><li>插件支持</li><li><br /></li></ul> <h3>4.01 如何使用RequireJS</h3> <p>使用方式很简单，只要一个script标记就可以在网页中加载RequireJS：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>&lt;script defer async=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">/bower_components/requirejs/require.js</span><span style="color: #800000;">"</span>&gt;&lt;/script&gt;</pre> </div> <p>由于这里用到了defer和async这两个异步加载的属性，所以require.js是异步加载的，你把这个script标记放置在任何地方都没有问题。</p> <p><strong>4.02 如何利用RequireJS加载并执行当前网页的逻辑JS</strong></p> <p>4.01解决的仅仅是RequireJS的使用问题，但它仅仅是一个JS库，是一个被当前页面的逻辑所利用的工具，真正实现网页功能逻辑的是我们要 利用RequireJS编写的主JS，这个主JS（假设这些代码都放置在main.js文件中）又该如何利用RJ来加载执行呢？方式如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>&lt;script data-main=<span style="color: #800000;">"scripts/main.js</span><span style="color: #800000;">" </span>defer async=<span style="color: #800000;">"</span><span style="color: #800000;">true</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">/bower_components/requirejs/require.js</span><span style="color: #800000;">"</span>&gt;&lt;/script&gt;</pre> </div> <p>对比4.01，你会发现script标记多了一个data-main，RJ用这个配置当前页面的主JS，你要把逻辑都写在这个main.js里面。 当RJ自身加载执行后，就会再次异步加载main.js。这个main.js是当前网页所有逻辑的入口，理想情况下，整个网页只需要这一个script标 记，利用RJ加载依赖的其它文件，如jquery等。</p> <h3>&nbsp;</h3> <h3>4.03 main.js怎么写</h3> <p>假设项目的目录结构为：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233219237-874123725.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233219674-790624569.png" alt="clipboard_thumb" border="0" width="287" height="326" /></a></p> <p>main.js是跟当前页面相关的主JS，app文件夹存放本项目自定义的模块，lib存放第三方库。</p> <p>html中按4.02的方式配置RJ。main.js的代码如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>require(['lib/foo', 'app/bar', 'app/app'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(foo, bar, app) {     </span><span style="color: #008000;">//</span><span style="color: #008000;">use foo bar app do sth</span> });</pre> </div> <p>在这段JS中，我们利用RJ提供的require方法，加载了三个模块，然后在这个三个模块都加载成功之后执行页面逻辑。require方法有2个 参数，第一个参数是数组类型的，实际使用时，数组的每个元素都是一个模块的module  ID，第二个参数是一个回调函数，这个函数在第一个参数定义的所有模块都加载成功后回调，形参的个数和顺序分别与第一个参数定义的模块对应，比如第一个模 块时lib/foo，那么这个回调函数的第一个参数就是foo这个模块的引用，在回调函数中我们使用这些形参来调用各个模块的方法，由于回调是在各模块加 载之后才调用的，所以这些模块引用肯定都是有效的。</p> <p>从以上这个简短的代码，你应该已经知道该如何使用RJ了。</p> <h3>4.04 RJ的baseUrl和module ID</h3> <p>在介绍RJ如何去解析依赖的那些模块JS的路径时，必须先弄清楚baseUrl和module ID这两个概念。</p> <p>html中的base元素可以定义当前页面内部任何http请求的url前缀部分，RJ的baseUrl跟这个base元素起的作用是类似的，由于 RJ总是动态地请求依赖的JS文件，所以必然涉及到一个JS文件的路径解析问题，RJ默认采用一种baseUrl +  moduleID的解析方式，这个解析方式后续会举例说明。这个baseUrl非常重要，RJ对它的处理遵循如下规则：</p> <ul><li>在没有使用data-main和config的情况下，baseUrl默认为当前页面的目录</li><li>在有data-main的情况下，main.js前面的部分就是baseUrl，比如上面的scripts/</li><li>在有config的情况下，baseUrl以config配置的为准</li></ul> <p>上述三种方式，优先级由低到高排列。</p> <p>data-main的使用方式，你已经知道了，config该如何配置，如下所示：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #000000;">require.config({     baseUrl: </span><span style="color: #800000;">'</span><span style="color: #800000;">scripts</span><span style="color: #800000;">'</span><span style="color: #000000;"> });</span></pre> </div> <p>这个配置必须放置在main.js的最前面。data-main与config配置同时存在的时候，以config为准，由于RJ的其它配置也是在这个位置配置的，所以4.03中的main.js可以改成如下结构，以便将来的扩展：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts'<span style="color: #000000;"> });  require([</span>'lib/foo', 'app/bar', 'app/app'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(foo, bar, app) {     </span><span style="color: #008000;">//</span><span style="color: #008000;"> use foo bar app do sth</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <h3>&nbsp;</h3> <p>关于module  ID，就是在require方法以及后续的define方法里，用在依赖数组这个参数里，用来标识一个模块的字符串。上面代码中的['lib/foo',  'app/bar', 'app/app']就是一个依赖数组，其中的每个元素都是一个module ID。值得注意的是，module  ID并不一定是该module 相关JS路径的一部分，有的module ID很短，但可能路径很长，这跟RJ的解析规则有关。下一节详细介绍。</p> <h3>4.05 RJ的文件解析规则</h3> <p>RJ默认按baseUrl + module ID的规则，解析文件，并且它默认要加载的文件都是js，所以你的module  ID里面可以不包含.js的后缀，这就是为啥你看到的module ID都是lib/foo, app/bar这种形式了。有三种module  ID，不适用这种规则：</p> <ul><li>以/开头，如/lib/jquey.js</li><li>以.js结尾，如test.js</li><li>包含http或https，如<a href="http://cdn.baidu.com/js/jquery.js">http://cdn.baidu.com/js/jquery.js</a></li></ul> <p>假如main.js如下使用：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts'<span style="color: #000000;"> });  require([</span>'/lib/foo', 'test.js', 'http://cdn.baidu.com/js/jquery'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(foo, bar, app) {     </span><span style="color: #008000;">//</span><span style="color: #008000;"> use foo bar app do sth</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>这三个module 都不会根据baseUrl + module ID的规则来解析,而是直接用module ID来解析，等效于下面的代码：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="/lib/foo.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="test.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="http://cdn.baidu.com/js/jquery.js"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span></pre> </div> <p><strong>各种module ID解析举例：</strong></p> <p>例1，项目结构如下：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233220003-2032273647.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard4_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233220331-2035716683.png" alt="clipboard4_thumb" border="0" width="287" height="326" /></a></p> <p>main.js如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts'<span style="color: #000000;"> });  require([</span>'lib/foo', 'app/bar', 'app/app'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(foo, bar, app) {     </span><span style="color: #008000;">//</span><span style="color: #008000;"> use foo bar app do sth</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>baseUrl为：scripts目录</p> <p>moduleID为：lib/foo, app/bar, app/app</p> <p>根据baseUrl + moduleID，以及自动补后缀.js，最终这三个module的js文件路径为：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #000000;">scripts/lib/foo.js scripts/app/bar.js scripts/app/app.js</span></pre> </div> <p>例2，项目结构同例1：</p> <p>main.js改为：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {      app: </span>'../app'<span style="color: #000000;">     } });   require([</span>'foo', 'app/bar', 'app/app'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(foo, bar, app) {     </span><span style="color: #008000;">//</span><span style="color: #008000;"> use foo bar app do sth</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>这里出现了一个新的配置paths，它的作用是针对module  ID中特定的部分，进行转义，如以上代码中对app这个部分，转义为../app，这表示一个相对路径，相对位置是baseUrl所指定的目录，由项目结 构可知，../app其实对应的是scirpt/app目录。正因为有这个转义的存在，所以以上代码中的app/bar才能被正确解析，否则还按 baseUrl +  moduleID的规则，app/bar不是应该被解析成scripts/lib/app/bar.js吗，但实际并非如此，app/bar被解析成 scripts/app/bar.js，其中起关键作用的就是paths的配置。通过这个举例，可以看出module  ID并不一定是js文件路径中的一部分，paths的配置对于路径过程的js特别有效，因为可以简化它的module ID。</p> <p>另外第一个模块的ID为foo，同时没有paths的转义，所以根据解析规则，它的文件路径时：scripts/lib/foo.js。</p> <p>paths的配置中只有当模块位于baseUrl所指定的文件夹的同层目录，或者更上层的目录时，才会用到../这种相对路径。</p> <p>例3，项目结果同例1，main.js同例2：</p> <p>这里要说明的问题稍微特殊，不以main.js为例，而以app.js为例，且app依赖bar，当然config还是需要在main.js中定义的，由于这个问题在定义模块的时候更加常见，所以用define来举例，假设app.js模块如下定义：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['./bar'], function(bar) {      <span style="color: #0000ff;">return</span><span style="color: #000000;"> {           doSth: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {               bar.doSth();           }      } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>上面的代码通过define定义了一个模块，这个define函数后面介绍如何定义模块的时候再来介绍，这里简单了解。这里这种用法的第一个参数跟 require函数一样，是一个依赖数组，第二个参数是一个回调，也是在所有依赖加载成功之后调用，这个回调的返回值会成为这个模块的引用被其它模块所使 用。</p> <p>这里要说的问题还是跟解析规则相关的，如果完全遵守RJ的解析规则，这里的依赖应该配置成app/bar才是正确的，但由于app.js与 bar.js位于同一个目录，所以完全可利用./这个同目录的相对标识符来解析js，这样的话只要app.js已经加载成功了，那么去同目录下找 bar.js就肯定能找到了。这种配置在定义模块的时候非常有意义，这样你的模块就不依赖于放置这些模块的文件夹名称了。</p> <h3>4.06 RJ的异步加载</h3> <p>RJ不管是require方法还是define方法的依赖模块都是异步加载的，所以下面的代码不一定能解析到正确的JS文件：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>&lt;script data-main="scripts/main" src="scripts/require.js"&gt;&lt;/script&gt; &lt;script src="scripts/other.js"&gt;&lt;/script&gt;</pre> </div> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #000000;">//main.js<br />require.config({     paths: {         foo: </span>'libs/foo-1.1.3'<span style="color: #000000;">     } });</span></pre> </div> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>//other.js<br />require( ['foo'], <span style="color: #0000ff;">function</span><span style="color: #000000;">( foo ) {     </span><span style="color: #008000;">//</span><span style="color: #008000;">foo is undefined</span> });</pre> </div> <p>由于main.js是异步加载的，所以other.js会比它先加载，但是RJ的配置存在于main.js里面，所以在加载other.js读不到RJ的配置，在other.js执行的时候解析出来的foo的路径就会变成scripts/foo.js，而正确路径应该是scripts/libs/foo-1.1.3.js。</p> <p>尽管RJ的依赖是异步加载的，但是已加载的模块在多次依赖的时候，不会再重新加载：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(['require', 'app/bar', 'app/app'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(require) {     </span><span style="color: #0000ff;">var</span> bar= require("app/bar"<span style="color: #000000;">);     </span><span style="color: #0000ff;">var</span> app= require("app/app"<span style="color: #000000;">);     </span><span style="color: #008000;">//</span><span style="color: #008000;">use bar and app do sth</span> });</pre> </div> <p>上面的代码，在callback定义的时候，只用了一个形参，这主要是为了减少形参的数量，避免整个回调的签名很长。依赖的模块在回调内部可以直接用require(moduleID)的参数得到，由于在回调执行前，依赖的模块已经加载，所以此处调用不会再重新加载。但是如果此处获取一个并不在依赖数组中出现的module ID，require很有可能获取不到该模块引用，因为它可能需要重新加载，如果它没有在其它模块中被加载过的话。</p> <h3>4.07 RJ官方推荐的JS文件组织结构</h3> <p>RJ建议，文件组织尽量扁平，不要多层嵌套，最理想的是跟项目相关的放在一个文件夹，第三方库放在一个文件夹，如下所示：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233220643-21928324.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="image_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233220971-668031612.png" alt="image_thumb" border="0" width="269" height="191" /></a></p> <h3>4.08 使用define定义模块</h3> <p>AMD规定的模块定义规范为：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(id?, dependencies?<span style="color: #000000;">, factory);  其中： id: 模块标识，可以省略。 dependencies: 所依赖的模块，可以省略。 factory: 模块的实现，或者一个JavaScript对象</span></pre> </div> <p>关于第一个参数，本文不会涉及，因为RJ建议所有模块都不要使用第一个参数，如果使用第一个参数定义的模块成为命名模块，不适用第一个参数的模块成为匿名模块，命名模块如果更名，所有依赖它的模块都得修改！第二个参数是依赖数组，跟require一样，如果没有这个参数，那么定义的就是一个无依赖的模块；最后一个参数是回调或者是一个简单对象，在模块加载完毕后调用，当然没有第二个参数，最后一个参数也会调用。</p> <p>本部分所举例都采用如下项目结构：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233221284-525813259.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard1_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233221534-1421083426.png" alt="clipboard1_thumb" border="0" width="190" height="190" /></a></p> <p>1. 定义简单对象模块：</p> <p>app/bar.js</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre><span style="color: #000000;">define({  bar:</span>'I am bar.'<span style="color: #000000;"> });</span></pre> </div> <p>利用main.js测试：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     } });  require([</span>'app/bar'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(bar) {     console.log(bar);</span><span style="color: #008000;">//</span><span style="color: #008000;"> {bar: 'I am bar.'}</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>2. 定义无依赖的模块：</p> <p>app/nodec.js：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(<span style="color: #0000ff;">function</span><span style="color: #000000;"> () {     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {         nodec: </span>"yes, I don't need dependence."<span style="color: #000000;">     } });</span></pre> </div> <p>利用main.js测试：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     } });  require([</span>'app/nodec'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(nodec) {     console.log(nodec);</span><span style="color: #008000;">//</span><span style="color: #008000;"> {nodec: yes, I don't need dependence.'}</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>3. 定义依赖其它模块的模块：</p> <p>app/dec.js：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(['jquery'], <span style="color: #0000ff;">function</span><span style="color: #000000;">($){     </span><span style="color: #008000;">//</span><span style="color: #008000;">use $ do sth ...</span>     <span style="color: #0000ff;">return</span><span style="color: #000000;"> {        useJq: </span><span style="color: #0000ff;">true</span><span style="color: #000000;">     } });</span></pre> </div> <p>利用main.js测试：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     } });  require([</span>'app/dec'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(dec) {     console.log(dec);//{useJq: true} });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>4. 循环依赖：</p> <p>当一个模块foo的依赖数组中存在bar，bar模块的依赖数组中存在foo，就会形成循环依赖，稍微修改下bar.js和foo.js如下。</p> <p>app/bar.js：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['foo'],<span style="color: #0000ff;">function</span><span style="color: #000000;">(foo){  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {   name: </span>'bar'<span style="color: #000000;">,   hi: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){    console.log(</span>'Hi! ' +<span style="color: #000000;"> foo.name);   }  } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>lib/foo.js：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['app/bar'],<span style="color: #0000ff;">function</span><span style="color: #000000;">(bar){  </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {   name: </span>'foo'<span style="color: #000000;">,   hi: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){    console.log(</span>'Hi! ' +<span style="color: #000000;"> bar.name);   }  } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>利用main.js测试：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     } });   require([</span>'app/bar', 'foo'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(bar, foo) {     bar.hi();     foo.hi(); });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>运行结果：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233221846-1627729866.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard3_thumb1" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233222159-358112935.png" alt="clipboard3_thumb1" border="0" width="523" height="43" /></a></p> <p>如果改变main.js中require部分的依赖顺序，结果：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233222596-1942446542.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard5_thumb1" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233223018-1645668833.png" alt="clipboard5_thumb1" border="0" width="518" height="41" /></a></p> <p>循环依赖导致两个依赖的module之间，始终会有一个在获取另一个的时候，得到undefined。解决方法是，在定义module的时候，如果用到循环依赖的时候，在define内部通过require重新获取。main.js不变，bar.js改成：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['require', 'foo'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(require, foo) {     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {         name: </span>'bar'<span style="color: #000000;">,         hi: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {          foo </span>= require('foo'<span style="color: #000000;">);             console.log(</span>'Hi! ' +<span style="color: #000000;"> foo.name);         }     } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>foo.js改成：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['require', 'app/bar'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(require, bar) {     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {         name: </span>'foo'<span style="color: #000000;">,         hi: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {          bar </span>= require('app/bar'<span style="color: #000000;">);             console.log(</span>'Hi! ' +<span style="color: #000000;"> bar.name);         }     } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>利用上述代码，重新执行，结果是：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233223362-257149020.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard7_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233223612-1459133655.png" alt="clipboard7_thumb" border="0" width="202" height="43" /></a></p> <p><strong>模块定义总结：</strong>不管模块是用回调函数定义还是简单对象定义，这个模块输出的是一个引用，所以这个引用必须是有效的，你的回调不能返回undefined，但是不局限于对象类型，还可以是数组，函数，甚至是基本类型，只不过如果返回对象，你能通过这个对象组织更多的接口。</p> <h3>4.09 内置的RJ模块</h3> <p>再看看这个代码：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>define(['require', 'app/bar'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(require) {     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> {         name: </span>'foo'<span style="color: #000000;">,         hi: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {             <span style="color: #0000ff;">var </span>bar </span>= require('app/bar'<span style="color: #000000;">);             console.log(</span>'Hi! ' +<span style="color: #000000;"> bar.name);         }     } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>依赖数组中的require这个moduleID对应的是一个内置模块，利用它加载模块，怎么用你已经看到了，比如在main.js中，在define中。另外一个内置模块是module，这个模块跟RJ的另外一个配置有关，具体用法请在第5大部分去了解。</p> <h3>4.10 其它RJ有用功能</h3> <p>1. 生成相对于模块的URL地址</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(["require"], <span style="color: #0000ff;">function</span><span style="color: #000000;">(require) {     </span><span style="color: #0000ff;">var</span> cssUrl = require.toUrl("./style.css"<span style="color: #000000;">); });</span></pre> </div> <p>这个功能在你想要动态地加载一些文件的时候有用，注意要使用相对路径。</p> <p>2. 控制台调试</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>require("module/name").callSomeFunction()</pre> </div> <p>假如你想在控制台中查看某个模块都有哪些方法可以调用，如果这个模块已经在页面加载的时候通过依赖被加载过后，那么就可以用以上代码在控制台中做各种测试了。</p> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label4"></a></div><h2>5. RequireJS常用配置总结</h2> <p>在RJ的配置中，前面已经接触到了baseUrl，paths，另外几个常用的配置是：</p> <ul><li>shim</li><li>config</li><li>enforceDefine</li><li>urlArgs</li></ul> <h3>5.01 shim</h3> <p>为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。</p> <p>例1：利用exports将模块的全局变量引用与RequireJS关联</p> <p>项目结构如图：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233223956-1171293057.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard3_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233224284-1258279487.png" alt="clipboard3_thumb" border="0" width="189" height="215" /></a></p> <p>main.js如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     },     shim: {      underscore: {       exports: </span>'_'<span style="color: #000000;">      }     } });  require([</span>'underscore'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(_) {     </span><span style="color: #008000;">//</span><span style="color: #008000;"> 现在可以通过_调用underscore的api了</span> });</pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>如你所见，RJ在shim中添加了一个对underscore这个模块的配置，并通过exports属性指定该模块暴露的全局变量，以便RJ能够对这些模块统一管理。</p> <p>例2：利用deps配置js模块的依赖</p> <p>项目结构如图：</p> <p><a href="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233224581-1312226297.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="clipboard5_thumb" src="http://images2015.cnblogs.com/blog/459873/201510/459873-20151009233224940-550914652.png" alt="clipboard5_thumb" border="0" width="199" height="233" /></a></p> <p>main.js如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     },     shim: {      backbone: {         deps: [</span>'underscore', 'jquery'<span style="color: #000000;">],         exports: </span>'Backbone'<span style="color: #000000;">      }     } });  require([</span>'backbone'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(Backbone) {     //use Backbone's API });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>由于backbone这个组件依赖jquery和underscore，所以可以通过deps属性配置它的依赖，这样backbone将会在另外两个模块加载完毕之后才会加载。</p> <p>例3：jquery等库插件配置方法</p> <p>代码举例如下：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">requirejs.config({     shim: {         </span>'jquery.colorize'<span style="color: #000000;">: {             deps: [</span>'jquery'<span style="color: #000000;">],             exports: </span>'jQuery.fn.colorize'<span style="color: #000000;">         },         </span>'jquery.scroll'<span style="color: #000000;">: {             deps: [</span>'jquery'<span style="color: #000000;">],             exports: </span>'jQuery.fn.scroll'<span style="color: #000000;">         },         </span>'backbone.layoutmanager'<span style="color: #000000;">: {             deps: [</span>'backbone'<span style="color: #000000;">]             exports: </span>'Backbone.LayoutManager'<span style="color: #000000;">         }     } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <h3>&nbsp;</h3> <h3>5.02 config</h3> <p>常常需要将配置信息传给一个模块。这些配置往往是application级别的信息，需要一个手段将它们向下传递给模块。在RequireJS中，基于requirejs.config()的config配置项来实现。要获取这些信息的模块可以加载特殊的依赖&#8220;module&#8221;，并调用module.config()。</p> <p>例1：在requirejs.config()中定义config，以供其它模块使用</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">requirejs.config({     config: {         </span>'bar'<span style="color: #000000;">: {             size: </span>'large'<span style="color: #000000;">         },         </span>'baz'<span style="color: #000000;">: {             color: </span>'blue'<span style="color: #000000;">         }     } });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>如你所见，config属性中的bar这一节是在用于module ID为bar这个模块的，baz这一节是用于module ID为baz这个模块的。具体使用以bar.js举例：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(['module'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(module) {     </span><span style="color: #008000;">//</span><span style="color: #008000;">Will be the value 'large'var size = module.config().size;</span> });</pre> </div> <p>前面提到过，RJ的内置模块除了require还有一个module，用法就在此处，通过它可以来加载config的内容。</p> <h3>5.03 enforceDefine</h3> <p>如果设置为true，则当一个脚本不是通过define()定义且不具备可供检查的shim导出字串值时，就会抛出错误。这个属性可以强制要求所有RJ依赖或加载的模块都要通过define或者shim被RJ来管理，同时它还有一个好处就是用于错误检测。</p> <h3>5.04 urlArgs</h3> <p>RequireJS获取资源时附加在URL后面的额外的query参数。作为浏览器或服务器未正确配置时的&#8220;cache bust&#8221;手段很有用。使用cache bust配置的一个示例：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>urlArgs: "bust=" + (<span style="color: #0000ff;">new</span> Date()).getTime()</pre> </div> <div style="text-align: right;    text-align: right;height: 0;padding: 0;overflow: hidden;visibility: hidden;"><a name="_label5"></a></div><h2>6. 错误处理</h2> <h3><strong>6.01 加载错误的捕获</strong></h3> <p>IE中捕获加载错误不完美：</p> <ul><li>IE 6-8中的script.onerror无效。没有办法判断是否加载一个脚本会导致404错；更甚地，在404中依然会触发state为complete的onreadystatechange事件。</li><li>IE 9+中script.onerror有效，但有一个bug：在执行脚本之后它并不触发script.onload事件句柄。因此它无法支持匿名AMD模块的标准方法。所以script.onreadystatechange事件仍被使用。但是，state为complete的onreadystatechange事件会在script.onerror函数触发之前触发。</li></ul> <p>所以为了支持在IE中捕获加载错误，需要配置enforceDefine为true，这不得不要求你所有的模块都用define定义，或者用shim配置RJ对它的引用。</p> <p><strong>注意：</strong>如果你设置了enforceDefine: true，而且你使用data-main=""来加载你的主JS模块，则该主JS模块必须调用define()而不是require()来加载其所需的代码。主JS模块仍然可调用require/requirejs来设置config值，但对于模块加载必须使用define()。比如原来的这段就会报错：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">require.config({  enforceDefine: </span><span style="color: #0000ff;">true</span><span style="color: #000000;">,     baseUrl: </span>'scripts/lib'<span style="color: #000000;">,     paths: {         app: </span>'../app'<span style="color: #000000;">     },     shim: {      backbone: {       deps: [</span>'underscore', 'jquery'<span style="color: #000000;">],             exports: </span>'Backbone'<span style="color: #000000;">      }     } }); require([</span>'backbone'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(Backbone) {     console.log(Backbone); });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>把最后三行改成：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"> <pre>define(['backbone'], <span style="color: #0000ff;">function</span><span style="color: #000000;">(Backbone) {     console.log(Backbone); });</span></pre> </div> <p>才不会报错。</p> <h3>6.02 paths备错</h3> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre><span style="color: #000000;">requirejs.config({     </span><span style="color: #008000;">//</span><span style="color: #008000;">To get timely, correct error triggers in IE, force a define/shim exports check.</span>     enforceDefine: <span style="color: #0000ff;">true</span><span style="color: #000000;">,     paths: {         jquery: [             </span>'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min'<span style="color: #000000;">,             </span><span style="color: #008000;">//</span><span style="color: #008000;">If the CDN location fails, load from this location</span>             'lib/jquery'<span style="color: #000000;">         ]     } });  </span><span style="color: #008000;">//</span><span style="color: #008000;">Later</span> require(['jquery'], <span style="color: #0000ff;">function</span><span style="color: #000000;"> ($) { });</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>上述代码先尝试加载CDN版本，如果出错，则退回到本地的lib/jquery.js。</p> <p><strong>注意</strong>: paths备错仅在模块ID精确匹配时工作。这不同于常规的paths配置，常规配置可匹配模块ID的任意前缀部分。备错主要用于非常的错误恢复，而不是常规的path查找解析，因为那在浏览器中是低效的。</p> <h3>6.03 全局 requirejs.onError</h3> <p>为了捕获在局域的errback中未捕获的异常，你可以重载requirejs.onError()：</p> <div style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <pre>requirejs.onError = <span style="color: #0000ff;">function</span><span style="color: #000000;"> (err) {     console.log(err.requireType);     </span><span style="color: #0000ff;">if</span> (err.requireType === 'timeout'<span style="color: #000000;">) {         console.log(</span>'modules: ' +<span style="color: #000000;"> err.requireModules);     }      </span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> err; };</span></pre> <div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div> <p>（完）</p></div></div></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/429538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2016-03-04 15:27 <a href="http://www.blogjava.net/wangxinsh55/archive/2016/03/04/429538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 标准库 API 文档  ECMAScript 6 </title><link>http://www.blogjava.net/wangxinsh55/archive/2015/08/05/426619.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 05 Aug 2015 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2015/08/05/426619.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/426619.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2015/08/05/426619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/426619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/426619.html</trackback:ping><description><![CDATA[<div><div>JavaScript 标准库</div><br />https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects</div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/426619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2015-08-05 16:12 <a href="http://www.blogjava.net/wangxinsh55/archive/2015/08/05/426619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用javascript与java进行RSA加密与解密</title><link>http://www.blogjava.net/wangxinsh55/archive/2015/05/19/425175.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 19 May 2015 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2015/05/19/425175.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/425175.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2015/05/19/425175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/425175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/425175.html</trackback:ping><description><![CDATA[<div>http://sunxboy.iteye.com/blog/209156</div><br /><div><div id="blog_content">     <p>这几天一直做安全登录，网上查了好多资料，不尽如意。</p> <p>具体实现思路如下：</p> <p>1。服务端生成公钥与私钥，保存。</p> <p>2。客户端在请求到登录页面后，随机生成一字符串。</p> <p>3。后此随机字符串作为密钥加密密码，再用从服务端获取到的公钥加密生成的随机字符串。</p> <p>4。将此两段密文传入服务端，服务端用私钥解出随机字符串，再用此私钥解出加密的密文。</p> <p>这其中有一个关键是解决服务端的公钥，传入客户端，客户端用此公钥加密字符串后，后又能在服务端用私钥解出。</p> <p>此文即为实现此步而作。</p> <p>加密算法为RSA：</p> <p>1。服务端的RSA&nbsp; java实现。</p> <div id=""><div><div>Java代码 &nbsp;<a title="收藏这段代码"><img src="http://sunxboy.iteye.com/images/icon_star.png" alt="收藏代码" /></a></div></div><ol start="1"><li><span>/**&nbsp;</span></li><li><span>&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>package&nbsp;com.sunsoft.struts.util;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;java.io.ByteArrayOutputStream;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.io.FileInputStream;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.io.FileOutputStream;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.io.ObjectInputStream;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.io.ObjectOutputStream;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.math.BigInteger;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.KeyFactory;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.KeyPair;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.KeyPairGenerator;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.NoSuchAlgorithmException;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.PrivateKey;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.PublicKey;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.SecureRandom;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.interfaces.RSAPrivateKey;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.interfaces.RSAPublicKey;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.spec.InvalidKeySpecException;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.spec.RSAPrivateKeySpec;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.spec.RSAPublicKeySpec;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;javax.crypto.Cipher;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li><span>/**&nbsp;</span></li><li><span>&nbsp;*&nbsp;RSA&nbsp;工具类。提供加密，解密，生成密钥对等方法。&nbsp;</span></li><li><span>&nbsp;*&nbsp;需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。&nbsp;</span></li><li><span>&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>public&nbsp;class&nbsp;RSAUtil&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;生成密钥对&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;KeyPair&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;EncryptException&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;KeyPair&nbsp;generateKeyPair()&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyPairGenerator&nbsp;keyPairGen&nbsp;=&nbsp;KeyPairGenerator.getInstance(<span>"RSA",&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>new&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>final&nbsp;int&nbsp;KEY_SIZE&nbsp;=&nbsp;1024;//&nbsp;没什么好说的了，这个值关系到块加密的大小，可以更改，但是不要太大，否则效率会低&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyPairGen.initialize(KEY_SIZE,&nbsp;<span>new&nbsp;SecureRandom());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyPair&nbsp;keyPair&nbsp;=&nbsp;keyPairGen.generateKeyPair();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveKeyPair(keyPair);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;keyPair;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(e.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;KeyPair&nbsp;getKeyPair()throws&nbsp;Exception{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;=&nbsp;<span>new&nbsp;FileInputStream("C:/RSAKey.txt");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectInputStream&nbsp;oos&nbsp;=&nbsp;<span>new&nbsp;ObjectInputStream(fis);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyPair&nbsp;kp=&nbsp;(KeyPair)&nbsp;oos.readObject();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.close();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.close();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;kp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;void&nbsp;saveKeyPair(KeyPair&nbsp;kp)throws&nbsp;Exception{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;=&nbsp;<span>new&nbsp;FileOutputStream("C:/RSAKey.txt");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectOutputStream&nbsp;oos&nbsp;=&nbsp;<span>new&nbsp;ObjectOutputStream(fos);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//生成密钥&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.writeObject(kp);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.close();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;生成公钥&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;modulus&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;publicExponent&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;RSAPublicKey&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;RSAPublicKey&nbsp;generateRSAPublicKey(byte[]&nbsp;modulus,&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;publicExponent)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyFactory&nbsp;keyFac&nbsp;=&nbsp;<span>null;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyFac&nbsp;=&nbsp;KeyFactory.getInstance(<span>"RSA",&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>new&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(NoSuchAlgorithmException&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(ex.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSAPublicKeySpec&nbsp;pubKeySpec&nbsp;=&nbsp;<span>new&nbsp;RSAPublicKeySpec(new&nbsp;BigInteger(&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modulus),&nbsp;<span>new&nbsp;BigInteger(publicExponent));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;(RSAPublicKey)&nbsp;keyFac.generatePublic(pubKeySpec);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(InvalidKeySpecException&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(ex.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;生成私钥&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;modulus&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;privateExponent&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;RSAPrivateKey&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;RSAPrivateKey&nbsp;generateRSAPrivateKey(byte[]&nbsp;modulus,&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;privateExponent)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyFactory&nbsp;keyFac&nbsp;=&nbsp;<span>null;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyFac&nbsp;=&nbsp;KeyFactory.getInstance(<span>"RSA",&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>new&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(NoSuchAlgorithmException&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(ex.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSAPrivateKeySpec&nbsp;priKeySpec&nbsp;=&nbsp;<span>new&nbsp;RSAPrivateKeySpec(new&nbsp;BigInteger(&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modulus),&nbsp;<span>new&nbsp;BigInteger(privateExponent));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;(RSAPrivateKey)&nbsp;keyFac.generatePrivate(priKeySpec);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(InvalidKeySpecException&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(ex.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;加密&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;key&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加密的密钥&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;data&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;待加密的明文数据&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;加密后的数据&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;byte[]&nbsp;encrypt(PublicKey&nbsp;pk,&nbsp;byte[]&nbsp;data)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance(<span>"RSA",&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>new&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;pk);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;blockSize&nbsp;=&nbsp;cipher.getBlockSize();//&nbsp;获得加密块大小，如：加密前数据为128个byte，而key_size=1024&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;加密块大小为127&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;byte,加密后为128个byte;因此共有2个加密块，第一个127&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;byte第二个为1个byte&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;outputSize&nbsp;=&nbsp;cipher.getOutputSize(data.length);//&nbsp;获得加密块加密后块大小&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;leavedSize&nbsp;=&nbsp;data.length&nbsp;%&nbsp;blockSize;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;blocksSize&nbsp;=&nbsp;leavedSize&nbsp;!=&nbsp;0&nbsp;?&nbsp;data.length&nbsp;/&nbsp;blockSize&nbsp;+&nbsp;1&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;data.length&nbsp;/&nbsp;blockSize;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;raw&nbsp;=&nbsp;new&nbsp;byte[outputSize&nbsp;*&nbsp;blocksSize];&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;i&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>while&nbsp;(data.length&nbsp;-&nbsp;i&nbsp;*&nbsp;blockSize&nbsp;&gt;&nbsp;0)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if&nbsp;(data.length&nbsp;-&nbsp;i&nbsp;*&nbsp;blockSize&nbsp;&gt;&nbsp;blockSize)&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.doFinal(data,&nbsp;i&nbsp;*&nbsp;blockSize,&nbsp;blockSize,&nbsp;raw,&nbsp;i&nbsp;&nbsp;</li><li>&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;outputSize);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>else&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.doFinal(data,&nbsp;i&nbsp;*&nbsp;blockSize,&nbsp;data.length&nbsp;-&nbsp;i&nbsp;&nbsp;</li><li>&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;blockSize,&nbsp;raw,&nbsp;i&nbsp;*&nbsp;outputSize);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;这里面doUpdate方法不可用，查看源代码后发现每次doUpdate后并没有什么实际动作除了把byte[]放到&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;ByteArrayOutputStream中，而最后doFinal的时候才将所有的byte[]进行加密，可是到了此时加密块大小很可能已经超出了&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//&nbsp;OutputSize所以只好用dofinal方法。&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;raw;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(e.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;解密&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;key&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解密的密钥&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;raw&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已经加密的数据&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;解密后的明文&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;byte[]&nbsp;decrypt(PrivateKey&nbsp;pk,&nbsp;byte[]&nbsp;raw)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>try&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cipher&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance(<span>"RSA",&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>new&nbsp;org.bouncycastle.jce.provider.BouncyCastleProvider());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(cipher.DECRYPT_MODE,&nbsp;pk);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;blockSize&nbsp;=&nbsp;cipher.getBlockSize();&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayOutputStream&nbsp;bout&nbsp;=&nbsp;<span>new&nbsp;ByteArrayOutputStream(64);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int&nbsp;j&nbsp;=&nbsp;0;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>while&nbsp;(raw.length&nbsp;-&nbsp;j&nbsp;*&nbsp;blockSize&nbsp;&gt;&nbsp;0)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bout.write(cipher.doFinal(raw,&nbsp;j&nbsp;*&nbsp;blockSize,&nbsp;blockSize));&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;bout.toByteArray();&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span>catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>throw&nbsp;new&nbsp;Exception(e.getMessage());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;*&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args&nbsp;*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@throws&nbsp;Exception&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSAPublicKey&nbsp;rsap&nbsp;=&nbsp;(RSAPublicKey)&nbsp;RSAUtil.generateKeyPair().getPublic();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;test&nbsp;=&nbsp;<span>"hello&nbsp;world";&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;en_test&nbsp;=&nbsp;encrypt(getKeyPair().getPublic(),test.getBytes());&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;de_test&nbsp;=&nbsp;decrypt(getKeyPair().getPrivate(),en_test);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>new&nbsp;String(de_test));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div> <p>&nbsp;2.测试页面：</p> <p>IndexAction.java</p> <div id=""><div><div>Java代码 &nbsp;<a title="收藏这段代码"><img src="http://sunxboy.iteye.com/images/icon_star.png" alt="收藏代码" /></a></div></div><ol start="1"><li><span>/*&nbsp;</span></li><li><span>&nbsp;*&nbsp;Generated&nbsp;by&nbsp;MyEclipse&nbsp;Struts&nbsp;</span></li><li><span>&nbsp;*&nbsp;Template&nbsp;path:&nbsp;templates/java/JavaClass.vtl&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>package&nbsp;com.sunsoft.struts.action;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;java.security.interfaces.RSAPrivateKey;&nbsp;&nbsp;</span></li><li><span>import&nbsp;java.security.interfaces.RSAPublicKey;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;</span></li><li><span>import&nbsp;javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;org.apache.struts.action.Action;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionForm;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionForward;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionMapping;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.sunsoft.struts.util.RSAUtil;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>/**&nbsp;&nbsp;</span></li><li><span>&nbsp;*&nbsp;MyEclipse&nbsp;Struts&nbsp;</span></li><li><span>&nbsp;*&nbsp;Creation&nbsp;date:&nbsp;06-28-2008&nbsp;</span></li><li><span>&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;*&nbsp;XDoclet&nbsp;definition:&nbsp;</span></li><li><span>&nbsp;*&nbsp;@struts.action&nbsp;validate="true"&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>public&nbsp;class&nbsp;IndexAction&nbsp;extends&nbsp;Action&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Generated&nbsp;Methods&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;execute&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;mapping&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;form&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;response&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;ActionForward&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;ActionForward&nbsp;execute(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<span>throws&nbsp;Exception&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSAPublicKey&nbsp;rsap&nbsp;=&nbsp;(RSAPublicKey)&nbsp;RSAUtil.getKeyPair().getPublic();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;module&nbsp;=&nbsp;rsap.getModulus().toString(<span>16);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;empoent&nbsp;=&nbsp;rsap.getPublicExponent().toString(<span>16);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"module");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(module);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"empoent");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(empoent);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(<span>"m",&nbsp;module);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(<span>"e",&nbsp;empoent);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;mapping.findForward("login");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div> <p>&nbsp;通过此action进入登录页面，并传入公钥的　Modulus 与PublicExponent的hex编码形式。</p> <p>3。登录页面　login.jsp</p> <div id=""><div><div>Html代码 &nbsp;<a title="收藏这段代码"><img src="http://sunxboy.iteye.com/images/icon_star.png" alt="收藏代码" /></a></div></div><ol start="1"><li><span>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;pageEncoding="GBK"%&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>&lt;%@&nbsp;taglib&nbsp;uri="http://struts.apache.org/tags-bean"&nbsp;prefix="bean"&nbsp;%&gt;&nbsp;&nbsp;</span></li><li><span>&lt;%@&nbsp;taglib&nbsp;uri="http://struts.apache.org/tags-html"&nbsp;prefix="html"&nbsp;%&gt;&nbsp;&nbsp;</span></li><li><span>&lt;%@&nbsp;taglib&nbsp;uri="http://struts.apache.org/tags-logic"&nbsp;prefix="logic"&nbsp;%&gt;&nbsp;&nbsp;</span></li><li><span>&lt;%@&nbsp;taglib&nbsp;uri="http://struts.apache.org/tags-tiles"&nbsp;prefix="tiles"&nbsp;%&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"<span>&gt;&nbsp;&nbsp;</span></li><li><span>&lt;html:html&nbsp;lang="true"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;html:base&nbsp;/&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;title&gt;login&lt;/title&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;meta&nbsp;http-equiv="pragma"&nbsp;content="no-cache"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;meta&nbsp;http-equiv="cache-control"&nbsp;content="no-cache"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;meta&nbsp;http-equiv="expires"&nbsp;content="0"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;meta&nbsp;http-equiv="keywords"&nbsp;content="keyword1,keyword2,keyword3"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;meta&nbsp;http-equiv="description"&nbsp;content="This&nbsp;is&nbsp;my&nbsp;page"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;!--&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel="stylesheet"&nbsp;type="text/css"&nbsp;href="styles.css"&gt;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;--&gt;&nbsp;&nbsp;</span></li><li><span>&lt;script&nbsp;type="text/javascript"&nbsp;src="js/RSA.js"&gt;&lt;/script&gt;&nbsp;&nbsp;</span></li><li><span>&lt;script&nbsp;type="text/javascript"&nbsp;src="js/BigInt.js"&gt;&lt;/script&gt;&nbsp;&nbsp;</span></li><li><span>&lt;script&nbsp;type="text/javascript"&nbsp;src="js/Barrett.js"&gt;&lt;/script&gt;&nbsp;&nbsp;</span></li><li><span>&lt;script&nbsp;type="text/javascript"&gt;&nbsp;&nbsp;</span></li><li>function&nbsp;rsalogin()&nbsp;&nbsp;</li><li>{&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;bodyRSA();&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;var&nbsp;<span>result&nbsp;=&nbsp;encryptedString(key,&nbsp;document.getElementById("pwd").value);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;//alert(result);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;<span>loginForm.action="login.do?result="+result;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;loginForm.submit();&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li><li>var&nbsp;key&nbsp;;&nbsp;&nbsp;</li><li>function&nbsp;bodyRSA()&nbsp;&nbsp;</li><li>{&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;setMaxDigits(130);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>key&nbsp;=&nbsp;new&nbsp;RSAKeyPair("10001","","8c1cd09a04ed01aafe70dc84c5f32ae23a16fe8fc8898aba6797c5a9c708720de4f08dbf086af429fc51c0636208f56de20a8ab5686affd9bdfb643ae1e90d5617155c4867eef06b0884ba8ecd187907c7069ae3eed4f0155eeca6573411864035ae803ad8fd91a0cc479f27e41b19c13465ab30f3cfbfd14de56f49cbd09481");&nbsp;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li><span>&lt;/script&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/head&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;<span>&lt;body&nbsp;&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;html:form&nbsp;action="login"&nbsp;method="post"&nbsp;focus="username"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;table&nbsp;border="0"&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;td&gt;Login:&lt;/td&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;td&gt;&lt;html:text&nbsp;property="username"&nbsp;/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;/tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;td&gt;Password:&lt;/td&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;td&gt;&lt;html:password&nbsp;property="password"&nbsp;styleId="pwd"/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;/tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;td&nbsp;colspan="2"&nbsp;align="center"&gt;&lt;input&nbsp;type="button"&nbsp;value="SUBMIT"&nbsp;onclick="rsalogin();"/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;/tr&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;/table&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>&lt;/html:form&gt;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;<span>&lt;/body&gt;&nbsp;&nbsp;</span></li><li><span>&lt;/html:html&gt;&nbsp;&nbsp;</span></li></ol></div> <p>&nbsp;3.点击登录后，调用LoginAction.java</p> <div id=""><div><div>Java代码 &nbsp;<a title="收藏这段代码"><img src="http://sunxboy.iteye.com/images/icon_star.png" alt="收藏代码" /></a></div></div><ol start="1"><li><span>/*&nbsp;</span></li><li><span>&nbsp;*&nbsp;Generated&nbsp;by&nbsp;MyEclipse&nbsp;Struts&nbsp;</span></li><li><span>&nbsp;*&nbsp;Template&nbsp;path:&nbsp;templates/java/JavaClass.vtl&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>package&nbsp;com.sunsoft.struts.action;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;java.math.BigInteger;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;</span></li><li><span>import&nbsp;javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;org.apache.struts.action.Action;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionForm;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionForward;&nbsp;&nbsp;</span></li><li><span>import&nbsp;org.apache.struts.action.ActionMapping;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>import&nbsp;com.sunsoft.struts.util.RSAUtil;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li><span>/**&nbsp;&nbsp;</span></li><li><span>&nbsp;*&nbsp;MyEclipse&nbsp;Struts&nbsp;</span></li><li><span>&nbsp;*&nbsp;Creation&nbsp;date:&nbsp;06-28-2008&nbsp;</span></li><li><span>&nbsp;*&nbsp;&nbsp;</span></li><li><span>&nbsp;*&nbsp;XDoclet&nbsp;definition:&nbsp;</span></li><li><span>&nbsp;*&nbsp;@struts.action&nbsp;path="/login"&nbsp;name="loginForm"&nbsp;input="/login.jsp"&nbsp;scope="request"&nbsp;validate="true"&nbsp;</span></li><li><span>&nbsp;*&nbsp;@struts.action-forward&nbsp;name="error"&nbsp;path="/error.jsp"&nbsp;</span></li><li><span>&nbsp;*&nbsp;@struts.action-forward&nbsp;name="success"&nbsp;path="/success.jsp"&nbsp;</span></li><li><span>&nbsp;*/&nbsp;&nbsp;</span></li><li><span>public&nbsp;class&nbsp;LoginAction&nbsp;extends&nbsp;Action&nbsp;{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/*&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Generated&nbsp;Methods&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>/**&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;execute&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;mapping&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;form&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;request&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;response&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;ActionForward&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span>public&nbsp;ActionForward&nbsp;execute(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;<span>throws&nbsp;Exception{&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>//LoginForm&nbsp;loginForm&nbsp;=&nbsp;(LoginForm)&nbsp;form;&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;request.getParameter(<span>"result");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"原文加密后为：");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;en_result&nbsp;=&nbsp;new&nbsp;BigInteger(result,&nbsp;16).toByteArray();&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"转成byte[]"+new&nbsp;String(en_result));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>byte[]&nbsp;de_result&nbsp;=&nbsp;RSAUtil.decrypt(RSAUtil.getKeyPair().getPrivate(),en_result);&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>"还原密文：");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span>new&nbsp;String(de_result));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;=&nbsp;<span>new&nbsp;StringBuffer();&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(<span>new&nbsp;String(de_result));&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sb.reverse().toString());&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return&nbsp;mapping.findForward("success");&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li></ol></div> <p>&nbsp;因为发现解出的明文是倒序的，后面就用StringBuffer的reverse()来转换了一下。</p> <p>4。login.jsp所调用的js</p> <p>&nbsp;</p>   </div>       <div>                     <ul><li><a href="http://dl.iteye.com/topics/download/c79f05d8-3f1c-3ee6-9c1e-f19223adaca6">js.rar</a> (6.4 KB)</li><li>描述: login.jsp所调用的javascript,有： RSA.js BigInt.js Barrett.js</li><li>下载次数: 1759</li></ul>                    </div></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/425175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2015-05-19 18:02 <a href="http://www.blogjava.net/wangxinsh55/archive/2015/05/19/425175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML5手机开发——滚动和惯性缓动</title><link>http://www.blogjava.net/wangxinsh55/archive/2013/11/25/406784.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 25 Nov 2013 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2013/11/25/406784.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/406784.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2013/11/25/406784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/406784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/406784.html</trackback:ping><description><![CDATA[<div>　1. 滚动 <p>　　以下是三种实现方式：</p> <p>　　1) 利用原生的css属性 overflow: scroll</p> <div style="padding-bottom: 6px; margin: 1px; padding-left: 6px; padding-right: 6px; font-family: Courier New; color: #333333; font-size: 12px; overflow: auto; padding-top: 6px">&lt;<span style="color: #808000"><span style="color: #0000ff">div</span>&nbsp;id=</span><span style="color: #ff00ff">"parent"</span><span style="color: #808000">&nbsp;<span style="color: #0000ff">style</span>=</span><span style="color: #ff00ff">"overflow:scroll;</span>&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id='content'&gt;内容区域&lt;/div&gt;<br /> &lt;/div&gt;</div> <p>　　Notice:</p> <p>　　在android 有bug, 滚动完后会回退到最顶端的内容区域，解决办法是使用后两种方式实现</p> <p>　　2)js 编程实现</p> <p>　　思路：对比手指在屏幕上移动前后位置变化改变内容元素content的位置</p> <p>　　第一步：设置parent的 overflow为hidden, 设置content的position为relative, top为0;</p> <p>　　第二步：监听touch事件</p> <div style="padding-bottom: 6px; margin: 1px; padding-left: 6px; padding-right: 6px; font-family: Courier New; color: #333333; font-size: 12px; overflow: auto; padding-top: 6px"><span style="color: #0000ff">var</span>&nbsp;parent&nbsp;=&nbsp;document.getElementById(<span style="color: #ff00ff">'parent'</span>);<br /> <br /> parent.addEventListener(<span style="color: #ff00ff">'touchstart'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;do&nbsp;touchstart</span><br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchmove'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;do&nbsp;touchmove</span><br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchend'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;do&nbsp;touchend</span><br /> });</div> <p>　　第三步：实现滚动代码</p> <div style="padding-bottom: 6px; margin: 1px; padding-left: 6px; padding-right: 6px; font-family: Courier New; color: #333333; font-size: 12px; overflow: auto; padding-top: 6px"><span style="color: #008000">/**<br /> &nbsp;*&nbsp;这里只实现垂直滚动<br /> &nbsp;*/</span><br /> <span style="color: #0000ff">var</span>&nbsp;parent&nbsp;=&nbsp;document.getElementById(<span style="color: #ff00ff">'parent'</span>);<br /> <span style="color: #0000ff">var</span>&nbsp;content&nbsp;=&nbsp;document.getElementById(<span style="color: #ff00ff">'content'</span>)<br /> <span style="color: #0000ff">var</span>&nbsp;startY&nbsp;=&nbsp;0;&nbsp;<span style="color: #008000">//&nbsp;初始位置</span><br /> <span style="color: #0000ff">var</span>&nbsp;lastY&nbsp;=&nbsp;0;&nbsp;<span style="color: #008000">//&nbsp;上一次位置</span><br /> <br /> parent.addEventListener(<span style="color: #ff00ff">'touchstart'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;startY&nbsp;=&nbsp;e.touches[0].pageY;<br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchmove'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowY&nbsp;=&nbsp;e.touches[0].pageY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;moveY&nbsp;=&nbsp;nowY&nbsp;-&nbsp;lastY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;contentTop&nbsp;=&nbsp;content.style.top.replace(<span style="color: #ff00ff">'px'</span>,&nbsp;<span style="color: #ff00ff">''</span>);<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;设置top值移动content</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;content.style.top&nbsp;=&nbsp;(parseInt(contentTop)&nbsp;+&nbsp;moveY)&nbsp;+&nbsp;<span style="color: #ff00ff">'px'</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;nowY;<br /> <br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchend'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;do&nbsp;touchend</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowY&nbsp;=&nbsp;e.touches[0].pageY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;moveY&nbsp;=&nbsp;nowY&nbsp;-&nbsp;lastY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;contentTop&nbsp;=&nbsp;content.style.top.replace(<span style="color: #ff00ff">'px'</span>,&nbsp;<span style="color: #ff00ff">''</span>);<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;设置top值移动content</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;content.style.top&nbsp;=&nbsp;(parseInt(contentTop)&nbsp;+&nbsp;moveY)&nbsp;+&nbsp;<span style="color: #ff00ff">'px'</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;nowY;<br /> });</div> <p>　　第四步：优化</p> <p>　　上边代码在手机上运行效果相对PC上要卡很多</p> <p>　　优化部分请参见:</p> <p>　　3) 使用iScroll4框架</p> <p>　　var scroll = new iScroll('parent', {</p> <p>　　hScrollbar: false,</p> <p>　　vScrollbar: true,</p> <p>　　checkDOMChanges : true</p> <p>　　});</p> <p>　　框架官网：http://cubiq.org/iscroll-4</p> <p>　　2.惯性缓动</p> <p>　　思路：取手指最后一段时间在屏幕上划动的平均速度v，让v按一个递减函数变化，直到不能移动或v&lt;=0</p> <div style="padding-bottom: 6px; margin: 1px; padding-left: 6px; padding-right: 6px; font-family: Courier New; color: #333333; font-size: 12px; overflow: auto; padding-top: 6px"><span style="color: #008000">/**<br /> &nbsp;*&nbsp;这里只实现垂直滚动<br /> &nbsp;*/</span><br /> <span style="color: #0000ff">var</span>&nbsp;parent&nbsp;=&nbsp;document.getElementById(<span style="color: #ff00ff">'parent'</span>);<br /> <span style="color: #0000ff">var</span>&nbsp;content&nbsp;=&nbsp;document.getElementById(<span style="color: #ff00ff">'content'</span>)<br /> <span style="color: #0000ff">var</span>&nbsp;startY&nbsp;=&nbsp;0;&nbsp;<span style="color: #008000">//&nbsp;初始位置</span><br /> <span style="color: #0000ff">var</span>&nbsp;lastY&nbsp;=&nbsp;0;&nbsp;<span style="color: #008000">//&nbsp;上一次位置</span><br /> <br /> <span style="color: #008000">/**<br /> &nbsp;*&nbsp;用于缓动的变量<br /> &nbsp;*/</span><br /> <span style="color: #0000ff">var</span>&nbsp;lastMoveTime&nbsp;=&nbsp;0;<br /> <span style="color: #0000ff">var</span>&nbsp;lastMoveStart&nbsp;=&nbsp;0;<br /> <span style="color: #0000ff">var</span>&nbsp;stopInertiaMove&nbsp;=&nbsp;<span style="color: #0000ff">false</span>;&nbsp;<span style="color: #008000">//&nbsp;是否停止缓动</span><br /> <br /> parent.addEventListener(<span style="color: #ff00ff">'touchstart'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;startY&nbsp;=&nbsp;e.touches[0].pageY;<br /> <br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/**<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;缓动代码<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;lastMoveStart&nbsp;=&nbsp;lastY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastMoveTime&nbsp;=&nbsp;e.timeStamp&nbsp;||&nbsp;<span style="color: #808000">Date</span>.now();<br /> &nbsp;&nbsp;&nbsp;&nbsp;stopInertiaMove&nbsp;=&nbsp;<span style="color: #0000ff">true</span>;<br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchmove'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowY&nbsp;=&nbsp;e.touches[0].pageY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;moveY&nbsp;=&nbsp;nowY&nbsp;-&nbsp;lastY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;contentTop&nbsp;=&nbsp;content.style.top.replace(<span style="color: #ff00ff">'px'</span>,&nbsp;<span style="color: #ff00ff">''</span>);<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;设置top值移动content</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;content.style.top&nbsp;=&nbsp;(parseInt(contentTop)&nbsp;+&nbsp;moveY)&nbsp;+&nbsp;<span style="color: #ff00ff">'px'</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;nowY;<br /> <br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/**<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;缓动代码<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowTime&nbsp;=&nbsp;e.timeStamp&nbsp;||&nbsp;<span style="color: #808000">Date</span>.now();<br /> &nbsp;&nbsp;&nbsp;&nbsp;stopInertiaMove&nbsp;=&nbsp;<span style="color: #0000ff">true</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span>(nowTime&nbsp;-&nbsp;lastMoveTime&nbsp;&gt;&nbsp;300)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastMoveTime&nbsp;=&nbsp;nowTime;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastMoveStart&nbsp;=&nbsp;nowY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;}<br /> });<br /> parent.addEventListener(<span style="color: #ff00ff">'touchend'</span>,&nbsp;<span style="color: #0000ff">function</span>(e)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;do&nbsp;touchend</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowY&nbsp;=&nbsp;e.touches[0].pageY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;moveY&nbsp;=&nbsp;nowY&nbsp;-&nbsp;lastY;<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;contentTop&nbsp;=&nbsp;content.style.top.replace(<span style="color: #ff00ff">'px'</span>,&nbsp;<span style="color: #ff00ff">''</span>);<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;contentY&nbsp;=&nbsp;(parseInt(contentTop)&nbsp;+&nbsp;moveY);<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;设置top值移动content</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;content.style.top&nbsp;=&nbsp;&nbsp;contentY&nbsp;+&nbsp;<span style="color: #ff00ff">'px'</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;lastY&nbsp;=&nbsp;nowY;<br /> <br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/**<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;缓动代码<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowTime&nbsp;=&nbsp;e.timeStamp&nbsp;||&nbsp;<span style="color: #808000">Date</span>.now();<br /> &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;v&nbsp;=&nbsp;(nowY&nbsp;-&nbsp;lastMoveStart)&nbsp;/&nbsp;(nowTime&nbsp;-&nbsp;lastMoveTime);&nbsp;<span style="color: #008000">//最后一段时间手指划动速度</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;stopInertiaMove&nbsp;=&nbsp;<span style="color: #0000ff">false</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000ff">function</span>(v,&nbsp;startTime,&nbsp;contentY)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;dir&nbsp;=&nbsp;v&nbsp;&gt;&nbsp;0&nbsp;?&nbsp;-1&nbsp;:&nbsp;1;&nbsp;<span style="color: #008000">//加速度方向</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;deceleration&nbsp;=&nbsp;dir*0.0006;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;duration&nbsp;=&nbsp;v&nbsp;/&nbsp;deceleration;&nbsp;<span style="color: #008000">//&nbsp;速度消减至0所需时间</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;dist&nbsp;=&nbsp;v&nbsp;*&nbsp;duration&nbsp;/&nbsp;2;&nbsp;<span style="color: #008000">//最终移动多少</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">function</span>&nbsp;inertiaMove()&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span>(stopInertiaMove)&nbsp;<span style="color: #0000ff">return</span>;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowTime&nbsp;=&nbsp;e.timeStamp&nbsp;||&nbsp;<span style="color: #808000">Date</span>.now();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;t&nbsp;=&nbsp;nowTime-startTime;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">var</span>&nbsp;nowV&nbsp;=&nbsp;v&nbsp;+&nbsp;t*deceleration;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//&nbsp;速度方向变化表示速度达到0了</span><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span>(dir*nowV&nbsp;&lt;<span style="color: #808000">&nbsp;0)&nbsp;{<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span>;<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 style="color: #0000ff">var</span>&nbsp;moveY&nbsp;=&nbsp;(v&nbsp;+&nbsp;nowV)/2&nbsp;*&nbsp;t;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content.<span style="color: #0000ff">style</span>.top&nbsp;=&nbsp;(contentY&nbsp;+&nbsp;moveY)&nbsp;+&nbsp;</span><span style="color: #ff00ff">"px"</span><span style="color: #808000">;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(inertiaMove,&nbsp;10);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inertiaMove();<br /> &nbsp;&nbsp;&nbsp;&nbsp;})(v,&nbsp;nowTime,&nbsp;contentY);<br /> });</span> <p>　　本文来自zzm_justin的博客，原文地址：<a href="http://blog.csdn.net/zzm_justin/article/details/8476373">http://blog.csdn.net/zzm_justin/article/details/8476373</a></p> </div></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/406784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2013-11-25 11:53 <a href="http://www.blogjava.net/wangxinsh55/archive/2013/11/25/406784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE console.info等方法不能call、apply调用 的解决方法</title><link>http://www.blogjava.net/wangxinsh55/archive/2013/11/18/406466.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 18 Nov 2013 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2013/11/18/406466.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/406466.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2013/11/18/406466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/406466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/406466.html</trackback:ping><description><![CDATA[<div><p>自己想封装一个logger类调用console方法的时候能打出时间、模块名称等额外的info，而IE console下的方法不支持call、apply调用，也不能直接给console.info等方法设置call方法，很麻烦。。。<br />可以利用Function.apply、Function.prototype.apply、Object.apply等方法代替：<br /><strong>Function.apply.apply(consloe.info, [console, aArgs]);<br /></strong>or<br /><strong>Function.apply.call(consloe.info, console, aArgs);</strong><br />注：其中<strong>aArgs</strong>为数组<br /><br />function doLog(sMethod&nbsp;, aArgs){<br />&nbsp; &nbsp; &nbsp; if(navigator.userAgent.toLowerCase().indexOf('msie') &gt; -1){<br />&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;Function.apply.apply(console[sMethod], [console, aArgs]);<br />&nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;console[sMethod].apply(console,aArgs);<br />&nbsp; &nbsp; &nbsp; }<br />}<br />var Logger=function(sModule){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;this._name=sModule;<br />};<br />var methods=['log','debug','info','error','warn'];<br />for(var i=0,len=methods.length;&nbsp;i&lt;len;&nbsp;i++){<br />&nbsp; &nbsp; (function(method){<br />&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Logger.prototype[method]=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;var sDate='['+&nbsp;new Date().toLocaleString()+']';<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var aArgs=Array.prototype.slice.call(arguments,0);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aArgs.unshift(sDate);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aArgs.push('('+&nbsp;this._name+')');<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;doLog(method,aArgs);<br />&nbsp; &nbsp;&nbsp;}})(methods[i]);<br />}<br /><br />//-----------------------------<br />var log=new Logger('chatList');</p><p>log.info('hello');<br /><br />ok,成功输出 ：<strong>[2012年3月7日 18:29:23]hello(chatList)</strong></p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/406466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2013-11-18 13:42 <a href="http://www.blogjava.net/wangxinsh55/archive/2013/11/18/406466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10 个交互式图形图表的 jQuery 插件</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/09/17/387898.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 17 Sep 2012 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/09/17/387898.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/387898.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/09/17/387898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/387898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/387898.html</trackback:ping><description><![CDATA[<div>http://www.oschina.net/news/32987/10-jquery-libraries-for-interactive-charts-and-graphs</div><br /><br /><div><p>jQuery 图表和图形插件可就将简单的数据变成可交互式的、色彩丰富、易于理解的各种图表。本文介绍 10 个 jQuery 的图形图表插件如下：</p> <h2><a href="http://codecanyon.net/item/isochart/2856598?ref=djdesignerlab" target="_blank">isoChart</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134237_rw1z_12.jpg" alt="" /></p> <h2><a href="http://xaviershay.github.com/tufte-graph/" target="_blank">TufteGraph</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134245_L6wj_12.jpg" alt="" /></p> <h2><a href="https://developers.google.com/chart/" target="_blank">Google Chart Tools</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134252_yP84_12.jpg" alt="" /></p> <h2><a href="http://codecanyon.net/item/3d-pie-chart-with-javascript/2450676?ref=djdesignerlab" target="_blank">3D Pie Chart with JavaScript</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134259_97PU_12.jpg" alt="" /></p> <h2><a href="http://codecanyon.net/item/3d-bar-chart-with-javascript/2624337?ref=djdesignerlab" target="_blank">3D Bar Chart with JavaScript</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134309_MxFo_12.jpg" alt="" /></p> <h2><a href="http://www.oschina.net/p/graphael" target="_blank">gRapha&#235;l&#8212;JavaScript Library</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134317_ZDio_12.jpg" alt="" /></p> <h2><a href="http://codecanyon.net/item/graphup-jquery-plugin/108025?ref=djdesignerlab" target="_blank">GraphUp &#8211; jQuery Plugin</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134325_YMy1_12.jpg" alt="" /></p> <h2><a href="http://codecanyon.net/item/google-chart-scrollerzoomer/71423?ref=djdesignerlab" target="_blank">Google Chart Scroller/Zoomer</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134333_QuUl_12.jpg" alt="" /></p> <h2><a href="http://www.oschina.net/p/highcharts" target="_blank">Highcharts JS</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134340_u0Qh_12.jpg" alt="" /></p> <h2><a href="http://codecanyon.net/item/3d-column-chart-with-javascript/2510613?ref=djdesignerlab" target="_blank">3D Column Chart with JavaScript</a></h2> <p><img src="http://static.oschina.net/uploads/space/2012/0917/134348_weAa_12.jpg" alt="" /></p> <p>更多 jQuery 图表插件请看<a href="http://www.oschina.net/project/tag/275/jquery-chart" target="_blank">这里</a>。</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/387898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-09-17 14:33 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/09/17/387898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手机上模仿iphone的页面平滑滚动轴</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/08/21/385921.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 21 Aug 2012 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/08/21/385921.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/385921.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/08/21/385921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/385921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/385921.html</trackback:ping><description><![CDATA[<div>http://cubiq.org/category/projects 项目下边的iscroll子项目<br /> </div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/385921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-08-21 10:54 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/08/21/385921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>7 个简单实用的 jQuery 图片播放器 </title><link>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385487.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 14 Aug 2012 11:58:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385487.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/385487.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/385487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/385487.html</trackback:ping><description><![CDATA[详情请看这里的链接<br /><div>http://www.oschina.net/news/31889/7-jquery-pic-players</div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/385487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-08-14 19:58 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>T.js 是一个微型的 JavaScript 模板引擎，压缩后大小只有 400 个字节</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385486.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 14 Aug 2012 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385486.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/385486.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/385486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/385486.html</trackback:ping><description><![CDATA[<div>http://www.oschina.net/p/tjs</div><br /><div>https://github.com/jasonmoo/t.js</div><br /><div><pre>var template = new t("&lt;div&gt;Hello {{=name}}&lt;/div&gt;"); <br />document.body.innerHtml = template.render({name: "World!"});</pre></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/385486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-08-14 19:57 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/08/14/385486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> jquery图片幻灯片制作电子相册，jQuery带有翻页效果的图片电子杂志书。支持收藏，翻页功能的电子相册。</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/07/30/384369.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 30 Jul 2012 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/07/30/384369.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/384369.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/07/30/384369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/384369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/384369.html</trackback:ping><description><![CDATA[<div>请访问下边链接地址<br />http://www.jsfoot.com/jquery/demo/2012-06-30/book.html</div><br /><div>http://www.oschina.net/code/snippet_187746_12148</div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/384369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-07-30 20:44 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/07/30/384369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>助你简化开发的 jQuery 插件</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/07/23/383761.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 23 Jul 2012 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/07/23/383761.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/383761.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/07/23/383761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/383761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/383761.html</trackback:ping><description><![CDATA[<div><h2><a title="vanity" href="http://vanity.enavu.com/" target="_blank">Vanity Toolset</a></h2>  <p>vanity toolset是一套方便的UI工具集，可以帮助你快速的搭建幻灯，聚光灯，占位，收放相关的UI，它完成了大部分的UI功能，你只需要花费很少时间就可以构建一个完整功能的UI</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105725_0avp.jpg" alt="分享12个帮助你简化开发的jQuery插件" border="0" /></p>  <h2><a title="percentageloader" href="http://www.gbin1.com/technology/jquerynews/20120619jquery-plugin-percentageloader" target="_blank">percentageloader</a></h2>  <p>这个漂亮的进度条插件可以帮助你快速构建一个功能丰富的加载条，让你的界面不在千篇一律。</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105725_M02a.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="blurjs" href="http://blurjs.com/" target="_blank">Blur.JS</a></h2>  <p>一个帮助你创建元素透明效果的jQuery插件。</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105725_Uwf2.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" />&nbsp;</p>  <h2><a title="GIPS" href="http://www.egrappler.com/jquery-clean-and-simple-tooltips-gips/" target="_blank">GIPS</a></h2>  <p>一个超干净整洁的工具提示jQuery插件，基于Gips的免费素材</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105726_N8Y2.jpg" alt="分享12个帮助你简化开发的jQuery插件" border="0" /></p>  <h2><a title="netstable" href="http://dbushell.github.com/Nestable/" target="_blank">NESTABLE</a></h2>  <p>一个帮助你实现层次拖放列表的jQuery插件</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105726_u7xq.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="NOTIFY" href="http://www.greepit.com/notify/" target="_blank">NOTIFY</a></h2>  <p>一个实现通知的jQuery插件，可以快速简单的帮助你添加简单的提示通知</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105726_fBDt.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="HAMMER.js" href="http://eightmedia.github.com/hammer.js/" target="_blank">HAMMER.js </a></h2>  <p>一个帮助你更好的支持触摸设备的jQuery插件</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105726_sruu.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="typebutter" href="http://typebutter.com/" target="_blank">TYPEBUTTER</a></h2>  <p>允许你针对任意字体设置光学字偶距（Optical Kerning）（注：光学字偶距可以调整单词间的间距）</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105726_slL2.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="WEBSANOVA PAINT" href="http://www.websanova.com/plugins/websanova/paint" target="_blank">WEBSANOVA PAINT </a></h2>  <p>一个jQuery画图的应用，可以让你保存你的涂鸦</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105727_xmRD.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="ipicture" href="http://ipicture.justmybit.com/" target="_blank">IPICTURE </a></h2>  <p>以帮助你通过添加描述来创建互动图片的jQuery插件</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105727_d56O.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="adipoli" href="http://jobyj.in/adipoli/" target="_blank">ADIPOLI </a></h2>  <p>一个帮助你创建各种不同悬浮效果的jQuery插件</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105727_TOY6.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="THE WOOKMARK JQUERY PLUGIN" href="http://www.wookmark.com/jquery-plugin" target="_blank">THE WOOKMARK JQUERY PLUGIN </a></h2>  <p>一个仿制wookmark.com的网格布局jQuery插件，它可以帮助你动态的布局列元素</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105727_PCC1.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p>  <h2><a title="page-guide" href="http://www.gbin1.com/technology/jquerynews/20120615jquery-easy-page-guide/" target="_blank">Pageguide.js</a></h2>  <p>一个帮助你创建友好的用户使用指南的jQuery插件</p>  <p><img src="http://static.oschina.net/uploads/img/201207/23105727_lzis.jpg" alt="分享12个帮助你简化开发的jQuery插件" height="251" border="0" width="520" /></p></div><br /><br /><div><p><a href="http://www.osctools.net/jsbin/wcoyspve/1" target="_blank">使用 jQuery 和&nbsp;CSS&nbsp;实现的放大镜效果</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133418_nqbN.jpg" alt="" /></p>  <p><a href="http://www.osctools.net/jsbin/uaoyexki/1" target="_blank">简单而惊人的CSS3边框过渡效果</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133418_ijZA.jpg" alt="" /></p>  <p><a href="http://thecodeplayer.com/walkthrough/make-an-accordian-style-slider-in-css3">CSS3中的手风琴风格滑块</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133419_cG9z.jpg" alt="" />&nbsp;</p>  <p><a href="http://www.webstuffshare.com/2012/07/portfolio-flipping-slider-using-jquery-css3/">使用jQuery和CSS3的组合翻转滑块</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133419_Y6iw.jpg" alt="" />&nbsp;</p>  <p><a href="http://www.webstuffshare.com/2012/04/showing-product-information-with-css3-3d-transform/">用CSS3 3D变换显示产品信息</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133419_0Gol.jpg" alt="" />&nbsp;</p>  <p><a href="http://tympanus.net/codrops/2011/10/24/creative-css3-animation-menus/">创意CSS3的动画菜单</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133420_QsuD.jpg" alt="" /></p>  <p><a href="http://tympanus.net/codrops/2011/12/19/experimental-css3-animations-for-image-transitions/">实验CSS3的动画图像转换</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133420_HVfF.jpg" alt="" />&nbsp;</p>  <p><a href="http://tympanus.net/codrops/2012/06/18/3d-thumbnail-hover-effects/">3D缩略图悬停效果</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133421_DVFz.jpg" alt="" />&nbsp;</p>  <p><a href="http://tympanus.net/codrops/2012/07/02/swatch-book-with-css3-and-jquery/">CSS3和jQuery的样书</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133421_du06.jpg" alt="" />&nbsp;</p>  <p><a href="http://www.queness.com/post/11493/create-css-3d-transform-card-flip-gallery">使用CSS 3D创建变换卡图片廊</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133422_3jU2.jpg" alt="" /></p>  <p><a href="http://tympanus.net/codrops/2011/12/14/item-blur-effect-with-css3-and-jquery/">CSS3和jQuery制作的模糊效果</a></p>  <p><img src="http://static.oschina.net/uploads/img/201207/18133422_GaJm.jpg" alt="" />&nbsp;</p>  <p>via <a href="http://www.queness.com/post/12019/11-stunning-css3-and-jquery-powered-tutorials" target="_blank">queness</a>/oschina</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/383761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-07-23 14:00 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/07/23/383761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个js高手博客地址</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/05/15/378191.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 15 May 2012 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/05/15/378191.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/378191.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/05/15/378191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/378191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/378191.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/cloudgamer/</div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/378191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-05-15 15:42 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/05/15/378191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extjs 自定义主题修改</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/04/17/374940.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Tue, 17 Apr 2012 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/04/17/374940.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/374940.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/04/17/374940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/374940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/374940.html</trackback:ping><description><![CDATA[1、到spket官方网站（http://www.spket.com/）下Extjs编辑的IDE（其实就是一个jar文件，使用java -jar spket-1.6.22.jar命令来安装IDE）。<br />2、安装完之后需要配置IDE对Extjs的支持，官方网站http://www.spket.com/extjs.html有说明<br /><div><h3>Create JavaScript profile for Ext 4.x</h3> 			<ol><li>Download Ext 4.x, unzip it, <strong>do not delete the <em>src</em> folder.</strong>.</li><li>Select the menu item <strong>Window &gt; Preferences...</strong> to open the workbench preferences.</li><li>Select the <strong>Spket &gt; JavaScript Profile</strong> preference page to display the installed JavaScript Profiles.</li><li>Click the <strong>New..</strong> button. In the <strong>Name</strong> field, type <strong>Ext 4</strong> as the name for the new profile. Then click <strong>OK</strong>.</li><li>Click the <strong>Add Library</strong> button. From the <strong>Library</strong> drop-down list, select <strong>ExtJS</strong>. Then click <strong>OK</strong>.</li><li>Click the <strong>Add File</strong> button, choose <strong>sdk.jsb3</strong> which can be found in <strong>build</strong> folder.</li><li>Select the <strong>Ext</strong> profile created in step 4, click the <strong>Default</strong> button make it the default profile for all project. The default profile can also be configured per project by using <strong>Configure Project Specific Settings...</strong> link.</li><li>If everything done correctly, your profile should looks like <a href="http://www.spket.com/images/jsp_ext4.png" target="nw">this</a>.</li><li>Click on <strong>OK</strong> to save the preferences.</li><li>Open javascript file with <strong>Spket JavaScript Editor</strong>. If you not sure which editor you used, take a look at this <a href="http://www.spket.com/images/m_opensje.png" target="nw">screen shot</a>. click <strong>Ctrl+Space</strong> or <strong>Alt+/</strong>, the code assist window will looks like <a href="http://www.spket.com/images/cs_empty.png" target="nw">this</a> if there is no code.</li></ol> 			 			<h3>Create JavaScript profile</h3> 			<ol><li>Select the menu item <strong>Window &gt; Preferences...</strong> to open the workbench preferences.</li><li>Select the <strong>Spket &gt; JavaScript Profile</strong> preference page to display the installed JavaScript Profiles.</li><li>Click the <strong>New..</strong> button. In the <strong>Name</strong> field, type <strong>Ext</strong> as the name for the new profile. Then click <strong>OK</strong>.</li><li>Click the <strong>Add Library</strong> button. From the <strong>Library</strong> drop-down list, select <strong>ExtJS</strong>. Then click <strong>OK</strong>.</li><li>Click the <strong>Add File</strong> button, choose <strong>ext.jsb</strong> which can be found in <a href="http://extjs.com/" target="_blank">Ext</a> source folder</li><li>Select the <strong>Ext</strong> profile created in step 3, click the <strong>Default</strong> button make it the default profile for all project. The default profile can also be configured per project by using <strong>Configure Project Specific Settings...</strong> link.</li><li>Click on <strong>OK</strong> to save the preferences.</li></ol>  			<h3>Features</h3> 			<h4>Code assist for Ext JS</h4> 			<p><img src="http://www.spket.com/images/ext3.png" alt="Code assist" /> 				The code assist for Ext JS is very accurate and thorough, and it  supports Ext JS 1.x - Ext JS 2.x, the code assist list all the  properties/methods with full documentation. 			</p> 			 			<h4>Code assist for Config Options</h4> 			<p><img src="http://www.spket.com/images/ext1.png" alt="config option" /> 				The code assist will list all the config options and where it was defined. 			</p> 			 			<h4>Open declaration</h4> 			<p><img src="http://www.spket.com/images/ext2.png" alt="config option" /> 				Select Ext function, use the <strong>Ctrl+Click</strong> combination or <strong>F3</strong>, you can jump to the Ext source code, help you to learn how Ext works. 			</p> 			 			<h4>Code assist for custom class</h4> 			<p><img src="http://www.spket.com/images/ext4.png" alt="custom class" /> 				The code assist works well for custom class, including config option and properties/methods. 			</p> 			<p> 				<img src="http://www.spket.com/images/ext5.png" alt="custom class" /></p><p><br /></p><p><br /></p><p>3、创建一个空项目，在空项目下创建一个xxx.theme文件，打开这个文件之后，可以看到主题颜色的修改，name就是你主题的名称，path就是你Extjs源文件的根目录，这时就可以看到所有的png主题图片。修改完之后，点击&#8220;explort&#8221;导出，便看到相应的主题文件夹。<br /> 			</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/374940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-04-17 16:54 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/04/17/374940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解Javascript的闭包</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/03/09/371569.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 09 Mar 2012 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/03/09/371569.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/371569.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/03/09/371569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/371569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/371569.html</trackback:ping><description><![CDATA[<div><p><strong>原文<div>http://coolshell.cn/articles/6731.html</div><br /></strong></p><p><strong><br /></strong></p><p><strong>前言：还是一篇入门文章。</strong>Javascript中有几个非常重要的语言特性&#8212;&#8212;对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将以例子入手来介绍Javascript闭包的语言特性，并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。</p> <p>注：<strong>本文是入门文章，例子素材整理于网络<strong>，如果你是高手，欢迎针对文章提出技术性建议和意见。本文讨论的是Javascript，不想做语言对比，如果您对Javascript天生不适，请自行绕道。</strong></strong></p> <h4><strong><span style="color: #008000">什么是闭包</span></strong></h4> <p>闭包是什么?闭包是Closure，这是静态语言所不具有的一个新特性。但是闭包也不是什么复杂到不可理解的东西，简而言之，闭包就是：<strong></strong></p> <ul><li><strong>闭包就是函数的局部变量集合，只是这些局部变量在函数返回后会继续存在。</strong></li><li><strong>闭包就是就是函数的&#8220;堆栈&#8221;在函数返回后并不释放，我们也可以理解为这些函数堆栈并不在栈上分配而是在堆上分配</strong></li><li><strong>当在一个函数内定义另外一个函数就会产生闭包</strong></li></ul> <p>上面的第二定义是第一个补充说明，抽取第一个定义的主谓宾&#8212;&#8212;闭包是<strong>函数的&#8216;局部变量&#8217;集合</strong>。只是这个局部变量是可以在函数返回后被访问。（这个不是官方定义，但是这个定义应该更有利于你理解闭包）</p> <p>做为局部变量都可以被函数内的代码访问，这个和静态语言是没有差别。闭包的差别在于局部变变量可以在函数执行结束后仍然被函数外的代码访问。这意味 着函数必须返回一个指向闭包的&#8220;引用&#8221;，或将这个&#8221;引用&#8221;赋值给某个外部变量，才能保证闭包中局部变量被外部代码访问。当然包含这个引用的实体应该是一个 对象，因为在Javascript中除了基本类型剩下的就都是对象了。可惜的是，ECMAScript并没有提供相关的成员和方法来访问闭包中的局部变 量。但是在ECMAScript中，函数对象中定义的<strong>内部函数(inner function)</strong>是可以直接访问外部函数的局部变量，通过这种机制，我们就可以以如下的方式完成对闭包的访问了。</p>  <div><div id="highlighter_629645"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code> <code plain"="">greeting(name) {</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code> <code plain"="">text = </code><code string"="">'Hello '</code> <code plain"="">+ name; </code><code comments"="">// local variable</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">// 每次调用时，产生闭包，并返回内部函数对象给调用者</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code keyword"="">function</code><code plain"="">() { alert(text); }</code></div><div number5="" index4=""  alt2"=""><code plain"="">}</code></div><div number6="" index5=""  alt1"=""><code keyword"="">var</code> <code plain"="">sayHello=greeting(</code><code string"="">"Closure"</code><code plain"="">);</code></div><div number7="" index6=""  alt2"=""><code plain"="">sayHello()&nbsp; </code><code comments"="">// 通过闭包访问到了局部变量text</code></div></div></td></tr></tbody></table></div></div> <p>上述代码的执行结果是：Hello Closure，因为sayHello()函数在greeting函数执行完毕后，仍然可以访问到了定义在其之内的局部变量text。</p> <p>好了，这个就是传说中闭包的效果，闭包在Javascript中有多种应用场景和模式，比如Singleton，Power Constructor等这些Javascript模式都离不开对闭包的使用。</p> <h4><strong><span style="color: #008000">ECMAScript闭包模型</span></strong></h4> <p>ECMAScript到底是如何实现闭包的呢？想深入了解的亲们可以获取<a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf">ECMAScript 规范</a>进行研究，我这里也只做一个简单的讲解，内容也是来自于网络。</p> <p>在ECMAscript的脚本的函数运行时，每个函数关联都有一个执行上下文场景(Execution Context)&nbsp;，这个执行上下文场景中包含三个部分</p> <ul><li>文法环境（The LexicalEnvironment）</li><li>变量环境（The VariableEnvironment）</li><li>this绑定</li></ul> <p>其中第三点this绑定与闭包无关，不在本文中讨论。文法环境中用于解析函数执行过程使用到的变量标识符。我们可以将文法环境想象成一个对象，该对 象包含了两个重要组件，环境记录(Enviroment  Recode)，和外部引用(指针)。环境记录包含包含了函数内部声明的局部变量和参数变量，外部引用指向了外部函数对象的上下文执行场景。全局的上下文 场景中此引用值为NULL。这样的数据结构就构成了一个单向的链表，每个引用都指向外层的上下文场景。</p> <p>例如上面我们例子的闭包模型应该是这样，sayHello函数在最下层，上层是函数greeting，最外层是全局场景。如下图：<br /> <img size-full=""  wp-image-6741"="" src="http://coolshell.cn/wp-content/uploads/2012/03/closure.png" alt="" height="478" width="658" /><br /> 因此当sayHello被调用的时候，sayHello会通过上下文场景找到局部变量text的值，因此在屏幕的对话框中显示出&#8221;Hello Closure&#8221;<br /> 变量环境(The VariableEnvironment)和文法环境的作用基本相似，具体的区别请参看ECMAScript的规范文档。</p> <h4><strong><span style="color: #008000">闭包的样列</span></strong></h4> <p>前面的我大致了解了Javascript闭包是什么，闭包在Javascript是怎么实现的。下面我们通过针对一些例子来帮助大家更加深入的理解闭包，下面共有5个样例，例子来自于<a href="http://blog.morrisjohns.com/javascript_closures_for_dummies.html">JavaScript Closures For Dummies(</a><a href="http://web.archive.org/web/20080209105120/http://blog.morrisjohns.com/javascript_closures_for_dummies">镜像</a><a href="http://blog.morrisjohns.com/javascript_closures_for_dummies.html">)</a>。<br /> <strong>例子1:闭包中局部变量是引用而非拷贝</strong></p> <div><div id="highlighter_60180"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code>&nbsp;<code plain"="">say667()&nbsp;{</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;Local&nbsp;variable&nbsp;that&nbsp;ends&nbsp;up&nbsp;within&nbsp;closure</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">num&nbsp;= 666;</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">sayAlert&nbsp;= </code><code keyword"="">function</code><code plain"="">()&nbsp;{ alert(num); }</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">num++;</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code>&nbsp;<code plain"="">sayAlert;</code></div><div number7="" index6=""  alt2"=""><code plain"="">}</code></div><div number8="" index7=""  alt1"="">&nbsp;</div><div number9="" index8=""  alt2"=""><code keyword"="">var</code> <code plain"="">sayAlert = say667();</code></div><div number10="" index9=""  alt1"=""><code plain"="">sayAlert()</code></div></div></td></tr></tbody></table></div></div> <p>因此执行结果应该弹出的667而非666。</p> <p><strong>例子2：多个函数绑定同一个闭包，因为他们定义在同一个函数内。</strong></p> <div><div id="highlighter_259618"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code>&nbsp;<code plain"="">setupSomeGlobals()&nbsp;{</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;Local&nbsp;variable&nbsp;that&nbsp;ends&nbsp;up&nbsp;within&nbsp;closure</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">num&nbsp;= 666;</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;Store&nbsp;some&nbsp;references&nbsp;to&nbsp;functions&nbsp;as&nbsp;global&nbsp;variables</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">gAlertNumber&nbsp;= </code><code keyword"="">function</code><code plain"="">()&nbsp;{ alert(num); }</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">gIncreaseNumber&nbsp;= </code><code keyword"="">function</code><code plain"="">()&nbsp;{ num++; }</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">gSetNumber&nbsp;= </code><code keyword"="">function</code><code plain"="">(x)&nbsp;{ num&nbsp;= x; }</code></div><div number8="" index7=""  alt1"=""><code plain"="">}</code></div><div number9="" index8=""  alt2"=""><code plain"="">setupSomeGlobals(); </code><code comments"="">// 为三个全局变量赋值</code></div><div number10="" index9=""  alt1"=""><code plain"="">gAlertNumber(); </code><code comments"="">//666</code></div><div number11="" index10=""  alt2"=""><code plain"="">gIncreaseNumber();</code></div><div number12="" index11=""  alt1"=""><code plain"="">gAlertNumber(); </code><code comments"="">// 667</code></div><div number13="" index12=""  alt2"=""><code plain"="">gSetNumber(12);</code><code comments"="">//</code></div><div number14="" index13=""  alt1"=""><code plain"="">gAlertNumber();</code><code comments"="">//12</code></div></div></td></tr></tbody></table></div></div> <p><strong>例子3：当在一个循环中赋值函数时，这些函数将绑定同样的闭包</strong></p> <div><div id="highlighter_807671"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code>&nbsp;<code plain"="">buildList(list)&nbsp;{</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">result&nbsp;=&nbsp;[];</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">for</code>&nbsp;<code plain"="">(</code><code keyword"="">var</code>&nbsp;<code plain"="">i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;list.length;&nbsp;i++)&nbsp;{</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">item&nbsp;=&nbsp;</code><code string"="">'item'</code>&nbsp;<code plain"="">+&nbsp;list[i];</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">result.push(&nbsp;</code><code keyword"="">function</code><code plain"="">()&nbsp;{alert(item&nbsp;+&nbsp;</code><code string"="">'&nbsp;'</code>&nbsp;<code plain"="">+&nbsp;list[i])}&nbsp;);</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code>&nbsp;<code plain"="">result;</code></div><div number8="" index7=""  alt1"=""><code plain"="">}</code></div><div number9="" index8=""  alt2"="">&nbsp;</div><div number10="" index9=""  alt1"=""><code keyword"="">function</code>&nbsp;<code plain"="">testList()&nbsp;{</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">fnlist&nbsp;=&nbsp;buildList([1,2,3]);</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;using&nbsp;j&nbsp;only&nbsp;to&nbsp;help&nbsp;prevent&nbsp;confusion&nbsp;-&nbsp;could&nbsp;use&nbsp;i</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">for</code>&nbsp;<code plain"="">(</code><code keyword"="">var</code>&nbsp;<code plain"="">j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;fnlist.length;&nbsp;j++)&nbsp;{</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">fnlist[j]();</code></div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number16="" index15=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div> <p>testList的执行结果是弹出item3 undefined窗口三次，因为这三个函数绑定了同一个闭包，而且item的值为最后计算的结果，但是当i跳出循环时i值为4，所以list[4]的结果为undefined.</p> <p><strong>例子4：外部函数所有局部变量都在闭包内，即使这个变量声明在内部函数定义之后。</strong></p> <div><div id="highlighter_134732"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code>&nbsp;<code plain"="">sayAlice()&nbsp;{</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">sayAlert&nbsp;= </code><code keyword"="">function</code><code plain"="">()&nbsp;{ alert(alice); }</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;Local&nbsp;variable&nbsp;that&nbsp;ends&nbsp;up&nbsp;within&nbsp;closure</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">alice&nbsp;= </code><code string"="">'Hello Alice'</code><code plain"="">;</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code>&nbsp;<code plain"="">sayAlert;</code></div><div number6="" index5=""  alt1"=""><code plain"="">}</code></div><div number7="" index6=""  alt2"=""><code keyword"="">var</code> <code plain"="">helloAlice=sayAlice();</code></div><div number8="" index7=""  alt1"=""><code plain"="">helloAlice();</code></div></div></td></tr></tbody></table></div></div> <p>执行结果是弹出&#8221;Hello Alice&#8221;的窗口。即使局部变量声明在函数sayAlert之后，局部变量仍然可以被访问到。</p> <p><strong>例子5：每次函数调用的时候创建一个新的闭包</strong></p> <div><div id="highlighter_792314"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">function</code>&nbsp;<code plain"="">newClosure(someNum,&nbsp;someRef)&nbsp;{</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//&nbsp;Local&nbsp;variables&nbsp;that&nbsp;end&nbsp;up&nbsp;within&nbsp;closure</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">num&nbsp;= someNum;</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">anArray&nbsp;= [1,2,3];</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code>&nbsp;<code plain"="">ref&nbsp;= someRef;</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code keyword"="">function</code><code plain"="">(x)&nbsp;{</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">num += x;</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">anArray.push(num);</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">alert(</code><code string"="">'num:&nbsp;'</code>&nbsp;<code plain"="">+ num&nbsp;+</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code string"="">'\nanArray&nbsp;'</code>&nbsp;<code plain"="">+ anArray.toString()&nbsp;+</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code string"="">'\nref.someVar&nbsp;'</code>&nbsp;<code plain"="">+ ref.someVar);</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number13="" index12=""  alt2"=""><code plain"="">}</code></div><div number14="" index13=""  alt1"=""><code plain"="">closure1=newClosure(40,{someVar:</code><code string"="">'closure 1'</code><code plain"="">});</code></div><div number15="" index14=""  alt2"=""><code plain"="">closure2=newClosure(1000,{someVar:</code><code string"="">'closure 2'</code><code plain"="">});</code></div><div number16="" index15=""  alt1"="">&nbsp;</div><div number17="" index16=""  alt2"=""><code plain"="">closure1(5); </code><code comments"="">// num:45 anArray[1,2,3,45] ref:'someVar closure1'</code></div><div number18="" index17=""  alt1"=""><code plain"="">closure2(-10);</code><code comments"="">// num:990 anArray[1,2,3,990] ref:'someVar closure2'</code></div></div></td></tr></tbody></table></div></div> <h4><strong><span style="color: #008000">闭包的应用</span></strong></h4> <p><strong>Singleton 单件：</strong></p> <div><div id="highlighter_879257"  jscript"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword"="">var</code> <code plain"="">singleton = </code><code keyword"="">function</code> <code plain"="">() {</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">var</code> <code plain"="">privateVariable;</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">function</code> <code plain"="">privateFunction(x) {</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">...privateVariable...</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number6="" index5=""  alt1"="">&nbsp;</div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code plain"="">{</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">firstMethod: </code><code keyword"="">function</code> <code plain"="">(a, b) {</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">...privateVariable...</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">},</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">secondMethod: </code><code keyword"="">function</code> <code plain"="">(c) {</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">...privateFunction()...</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">};</code></div><div number15="" index14=""  alt2"=""><code plain"="">}();</code></div></div></td></tr></tbody></table></div></div> <p>这个单件通过闭包来实现。通过闭包完成了私有的成员和方法的封装。匿名主函数返回一个对象。对象包含了两个方法，方法1可以方法私有变量，方法2访 问内部私有函数。需要注意的地方是匿名主函数结束的地方的&#8217;()&#8217;，如果没有这个&#8217;()&#8217;就不能产生单件。因为匿名函数只能返回了唯一的对象，而且不能被 其他地方调用。这个就是利用闭包产生单件的方法。</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/371569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-03-09 11:39 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/03/09/371569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>4 个超炫的免费 jQuery 翻页插件</title><link>http://www.blogjava.net/wangxinsh55/archive/2012/02/09/369653.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 09 Feb 2012 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2012/02/09/369653.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/369653.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2012/02/09/369653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/369653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/369653.html</trackback:ping><description><![CDATA[<div><p>模拟真实的世界一直是计算机科学在做的事情。在网页设计领域，模拟书籍翻页就是其中一项。以前我们用Flash实现。但是随着网页技术的提升，我们现在也可以用HTML、CSS和JavaScript实现。<br /><br />下面我将介绍几个绚丽的免费jQuery插件来实现翻页效果。<br /><br /><a href="http://www.oschina.net/p/turnjs" target="_blank"><strong>1. Turn.js</strong></a><br /><img src="http://static.oschina.net/uploads/img/201202/08213232_NP8z.jpg" alt="" height="366" width="480" /><br />第一页作为封面，后面的每一页你都可以通过反动页脚来实现。动画过程很顺滑。这个js只有15kb，可以在移动浏览器上运行。这个js使用了硬件加速。<br /><br /><a href="http://www.oschina.net/p/jpageflip" target="_blank"><strong>2. jPageFlip</strong></a><br /><img src="http://static.oschina.net/uploads/img/201202/08213236_C9nJ.jpg" alt="" height="333" width="480" /><br />jPageFlip是一个高度可定制的jQuery插件，用来创建类似书籍界面的效果。它支持鼠标点击翻页，也支持透明和半透明的图片文件。<br /><br /><a href="http://www.oschina.net/p/booklet" target="_blank"><strong>3. Booklet</strong></a><br /><img src="http://static.oschina.net/uploads/img/201202/08213243_HPzs.jpg" alt="" height="333" width="480" /><br />Booklet可能是拥有最多选项的插件。你可以通过键盘，链接，或者定时自动翻页。每一页都有一个单独的URL，可以被收藏。<br /><br /><a href="http://www.oschina.net/p/flippage" target="_blank"><strong>4. FlipPage</strong></a><br /><img src="http://static.oschina.net/uploads/img/201202/08213251_x52r.jpg" alt="" height="333" width="480" /><br />这个插件的翻页效果是在现有的图片范围内。使用了HTML5，CSS3以及硬件加速。这个插件也支持移动浏览器。</p> <p>另外还有其他两个类似的插件：<a href="http://www.oschina.net/p/jflip" target="_blank">jFlip</a> /  		<a href="http://www.oschina.net/p/css_page_flip" target="_blank">CSS Page Flip</a></p> <p><a href="http://www.webresourcesdepot.com/5-free-jquery-page-flip-plugins-for-book-like-interfaces/" target="_blank">原文链接</a>，OSChina原创编译。</p></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/369653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2012-02-09 11:59 <a href="http://www.blogjava.net/wangxinsh55/archive/2012/02/09/369653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10 个很棒的 jQuery 代码片段</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/11/23/364632.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 23 Nov 2011 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/11/23/364632.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/364632.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/11/23/364632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/364632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/364632.html</trackback:ping><description><![CDATA[<div>http://www.oschina.net/code/snippet_12_7271</div><br /><div><div>	             	            	<h3><em>[代码]</em> 图片预加载</h3>             	<div "="" id="highlighter_946181"><div><div alt1"=""><table><tbody><tr><td><code>01</code></td><td><code>(</code><code>function</code><code>($) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>02</code></td><td><code>&nbsp;&nbsp;</code><code>var</code> <code>cache = [];</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>03</code></td><td><code>&nbsp;&nbsp;</code><code>// Arguments are image paths relative to the current page.</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>04</code></td><td><code>&nbsp;&nbsp;</code><code>$.preLoadImages = </code><code>function</code><code>() {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>05</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>var</code> <code>args_len = arguments.length;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>06</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>for</code> <code>(</code><code>var</code> <code>i = args_len; i--;) {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>07</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>var</code> <code>cacheImage = document.createElement(</code><code>'img'</code><code>);</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>08</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>cacheImage.src = arguments[i];</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>09</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>cache.push(cacheImage);</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>10</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>}</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>11</code></td><td><code>&nbsp;&nbsp;</code><code>}</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>12</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>13</code></td><td><code>jQuery.preLoadImages(</code><code>"image1.gif"</code><code>, </code><code>"/path/to/image2.png"</code><code>);</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 在新窗口打开链接 (target=&#8221;blank&#8221;)</h3>             	<div "="" id="highlighter_293287"><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>$(</code><code>'a[@rel$='</code><code>external</code><code>']'</code><code>).click(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>this</code><code>.target = </code><code>"_blank"</code><code>;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>});</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>5</code></td><td><code>/*</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>6</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>Usage:</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>7</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>&lt;a href="http://www.catswhocode.com" rel="external"&gt;catswhocode.com&lt;/a&gt;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>8</code></td><td><code>*/</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 当支持 JavaScript 时为 body 增加 class</h3>             	<div "="" id="highlighter_909430"><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>/* 该代码只有1行，但是最简单的用来检测浏览器是否支持 JavaScript 的方法，如果支持 JavaScript 就在 body 元素增加一个 hasJS 的 class */</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>$(</code><code>'body'</code><code>).addClass(</code><code>'hasJS'</code><code>);</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 平滑滚动页面到某个锚点</h3>             	<div "="" id="highlighter_34663"><div><div alt1"=""><table><tbody><tr><td><code>01</code></td><td><code>$(document).ready(</code><code>function</code><code>() {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>02</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>"a.topLink"</code><code>).click(</code><code>function</code><code>() {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>03</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>"html, body"</code><code>).animate({</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>04</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>scrollTop: $($(</code><code>this</code><code>).attr(</code><code>"href"</code><code>)).offset().top + </code><code>"px"</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>05</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>}, {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>06</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>duration: 500,</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>07</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>easing: </code><code>"swing"</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>08</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>});</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>09</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>false</code><code>;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>10</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>});</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>11</code></td><td><code>});</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 鼠标滑动时的渐入和渐出</h3>             	<div "="" id="highlighter_741032"><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>$(document).ready(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>".thumbs img"</code><code>).fadeTo(</code><code>"slow"</code><code>, 0.6); </code><code>// This sets the opacity of the thumbs to fade down to 60% when the page loads</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>".thumbs img"</code><code>).hover(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>5</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>this</code><code>).fadeTo(</code><code>"slow"</code><code>, 1.0); </code><code>// This should set the opacity to 100% on hover</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>6</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>},</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>7</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>$(</code><code>this</code><code>).fadeTo(</code><code>"slow"</code><code>, 0.6); </code><code>// This should set the opacity back to 60% on mouseout</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>8</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>});</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>9</code></td><td><code>});</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 制作等高的列</h3>             	<div "="" id="highlighter_122169"><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>var</code> <code>max_height = 0;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>$(</code><code>"div.col"</code><code>).each(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>if</code> <code>($(</code><code>this</code><code>).height() &gt; max_height) { max_height = $(</code><code>this</code><code>).height(); }</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>});</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>5</code></td><td><code>$(</code><code>"div.col"</code><code>).height(max_height);</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 在一些老的浏览器上启用 HTML5 的支持</h3>             	<div "="" id="highlighter_808789"><div><div alt1"=""><table><tbody><tr><td><code>01</code></td><td><code>(</code><code>function</code><code>(){</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>02</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>if</code><code>(!</code><code>/*@cc_on!@*/</code><code>0)</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>03</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code><code>;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>04</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>var</code> <code>e = </code><code>"abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video"</code><code>.split(</code><code>','</code><code>),i=e.length;</code><code>while</code><code>(i--){document.createElement(e[i])}</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>05</code></td><td><code>})()</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>06</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>07</code></td><td><code>//然后在head中引入该js</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>08</code></td><td><code>&lt;!--[</code><code>if</code> <code>lt IE 9]&gt;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>09</code></td><td><code>&lt;script src=</code><code>"http://html5shim.googlecode.com/svn/trunk/html5.js"</code><code>&gt;&lt;/script&gt;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>10</code></td><td><code>&lt;![endif]--&gt;</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 测试浏览器是否支持某些 CSS3 属性</h3>             	<div "="" id="highlighter_834809"><div><div alt1"=""><table><tbody><tr><td><code>01</code></td><td><code>var</code> <code>supports = (</code><code>function</code><code>() {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>02</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>var</code> <code>div = document.createElement(</code><code>'div'</code><code>),</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>03</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>vendors = </code><code>'Khtml Ms O Moz Webkit'</code><code>.split(</code><code>' '</code><code>),</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>04</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>len = vendors.length;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>05</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>06</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>function</code><code>(prop) {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>07</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>if</code> <code>( prop </code><code>in</code> <code>div.style ) </code><code>return</code> <code>true</code><code>;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>08</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>09</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>prop = prop.replace(/^[a-z]/, </code><code>function</code><code>(val) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>10</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>val.toUpperCase();</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>11</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>});</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>12</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>13</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>while</code><code>(len--) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>14</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>if</code> <code>( vendors[len] + prop </code><code>in</code> <code>div.style ) {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>15</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>// browser supports box-shadow. Do what you need.</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>16</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>// Or use a bang (!) to test if the browser doesn't.</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>17</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>true</code><code>;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>18</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>}</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>19</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>}</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>20</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>false</code><code>;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>21</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>};</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>22</code></td><td><code>})();</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>23</code></td><td>&nbsp;</td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>24</code></td><td><code>if</code> <code>( supports(</code><code>'textShadow'</code><code>) ) {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>25</code></td><td><code>&nbsp;&nbsp;&nbsp;</code><code>document.documentElement.className += </code><code>' textShadow'</code><code>;</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            	<div>	             	            	<h3><em>[代码]</em> 获取 URL 中传递的参数</h3>             	<div "="" id="highlighter_238088"><div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>$.urlParam = </code><code>function</code><code>(name){</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>var</code> <code>results = </code><code>new</code> <code>RegExp(</code><code>'[\\?&amp;]'</code> <code>+ name + </code><code>'=([^&#]*)'</code><code>).exec(window.location.href);</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>if</code> <code>(!results) { </code><code>return</code> <code>0; }</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>results[1] || 0;</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>5</code></td><td><code>}</code></td></tr></tbody></table></div></div></div>         		            	</div>             	            		             	            	<h3><em>[代码]</em> 禁用表单的回车键提交</h3>             	<div show"=""><div><a viewsource"="" style="width: 16px; height: 16px;" title="view source" href="http://www.oschina.net/code/snippet_12_7271#viewSource">view source</a><a printsource"="" style="width: 16px; height: 16px;" title="print" href="http://www.oschina.net/code/snippet_12_7271#printSource">print</a><a about"="" style="width: 16px; height: 16px;" title="?" href="http://www.oschina.net/code/snippet_12_7271#about">?</a></div></div><div alt1"=""><table><tbody><tr><td><code>1</code></td><td><code>$(</code><code>"#form"</code><code>).keypress(</code><code>function</code><code>(e) {</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>2</code></td><td><code>&nbsp;&nbsp;</code><code>if</code> <code>(e.which == 13) {</code></td></tr></tbody></table></div><div alt1"=""><table><tbody><tr><td><code>3</code></td><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code><code>return</code> <code>false</code><code>;</code></td></tr></tbody></table></div><div alt2"=""><table><tbody><tr><td><code>4</code></td><td><code>&nbsp;&nbsp;</code><code>}</code></td></tr></tbody></table></div><table><tbody><tr><td><code>5</code></td><td><code>});</code></td></tr></tbody></table></div><img src ="http://www.blogjava.net/wangxinsh55/aggbug/364632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-11-23 13:15 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/11/23/364632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JQuery之拖拽插件</title><link>http://www.blogjava.net/wangxinsh55/archive/2011/09/28/359720.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 28 Sep 2011 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2011/09/28/359720.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/359720.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2011/09/28/359720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/359720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/359720.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一直以来，都对JS获取元素的位置感到非常的困惑：一会client、一会offset、一会scroll。 再加上各大浏览器之间的不兼容，唉，搞得哥晕晕乎乎的。 而很多页面效果都要用到这些位置。不得已，得练练，得记记。 下面就来说说这个基于 JQuery的简易拖拽插件吧。 &nbsp;&nbsp; 按惯例，先说说拖拽的原理，以及搞这么一个东东的步骤： 那什么是拖拽呢？ 看名字就知道了：就是把一个东东拖...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2011/09/28/359720.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/359720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2011-09-28 17:47 <a href="http://www.blogjava.net/wangxinsh55/archive/2011/09/28/359720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浮动广告脚本代码</title><link>http://www.blogjava.net/wangxinsh55/archive/2010/06/18/323786.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 18 Jun 2010 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2010/06/18/323786.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/323786.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2010/06/18/323786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/323786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/323786.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">//</span><span style="color: #008000;">公共脚本文件&nbsp;main.js</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;addEvent(obj,&nbsp;evtType,&nbsp;func,&nbsp;cap)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;cap&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cap&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj.addEventListener)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.addEventListener(evtType,&nbsp;func,&nbsp;cap);<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;">true</span><span style="color: #000000;">;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(obj.attachEvent)&nbsp;{<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;(cap)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.setCapture();<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;">true</span><span style="color: #000000;">;<br />
&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;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;obj.attachEvent(</span><span style="color: #000000;">"</span><span style="color: #000000;">on</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;evtType,&nbsp;func);<br />
&nbsp;&nbsp;&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;{<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;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;getPageScroll()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;xScroll,&nbsp;yScroll;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(self.pageXOffset)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.pageXOffset;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.documentElement&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;document.documentElement.scrollLeft)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.documentElement.scrollLeft;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.body)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.scrollLeft;<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;">if</span><span style="color: #000000;">&nbsp;(self.pageYOffset)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.pageYOffset;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.documentElement&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;document.documentElement.scrollTop)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.documentElement.scrollTop;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.body)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.scrollTop;<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;arrayPageScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Array(xScroll,&nbsp;yScroll);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;arrayPageScroll;<br />
}<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;GetPageSize()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;xScroll,&nbsp;yScroll;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(window.innerHeight&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;window.scrollMaxY)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.scrollWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;window.innerHeight&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;window.scrollMaxY;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.body.scrollHeight&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;document.body.offsetHeight)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.scrollWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.scrollHeight;<br />
&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;xScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.offsetWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yScroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.offsetHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;windowWidth,&nbsp;windowHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(self.innerHeight)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.innerWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;self.innerHeight;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.documentElement&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;document.documentElement.clientHeight)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.documentElement.clientWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.documentElement.clientHeight;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(document.body)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.clientWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;windowHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.body.clientHeight;<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;">if</span><span style="color: #000000;">&nbsp;(yScroll&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;windowHeight)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;windowHeight;<br />
&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;pageHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;yScroll;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(xScroll&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;windowWidth)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;windowWidth;<br />
&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;pageWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;xScroll;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;arrayPageSize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Array(pageWidth,&nbsp;pageHeight,&nbsp;windowWidth,&nbsp;windowHeight);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;arrayPageSize;<br />
}<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">广告脚本文件&nbsp;AdMove.js</span><span style="color: #008000;"><br />
/*</span><span style="color: #008000;"><br />
例子<br />
&lt;div&nbsp;id="Div2"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;*****&nbsp;content&nbsp;******<br />
&lt;/div&gt;<br />
var&nbsp;ad=new&nbsp;AdMove("Div2");<br />
ad.Run();<br />
</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">//////////////////////////////////////////////////////</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;AdMoveConfig&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Object();<br />
AdMoveConfig.IsInitialized&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
AdMoveConfig.ScrollX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
AdMoveConfig.ScrollY&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
AdMoveConfig.MoveWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
AdMoveConfig.MoveHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
AdMoveConfig.Resize&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;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;winsize&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetPageSize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.MoveWidth&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;winsize[</span><span style="color: #000000;">2</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.MoveHeight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;winsize[</span><span style="color: #000000;">3</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.Scroll();<br />
};<br />
AdMoveConfig.Scroll&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;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;winscroll&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getPageScroll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.ScrollX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;winscroll[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.ScrollY&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;winscroll[</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br />
};<br />
addEvent(window,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">resize</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;AdMoveConfig.Resize);<br />
addEvent(window,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">scroll</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;AdMoveConfig.Scroll);<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;AdMove(id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">AdMoveConfig.IsInitialized)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.Resize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdMoveConfig.IsInitialized&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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;obj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.getElementById(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.style.position&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">absolute</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;W&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AdMoveConfig.MoveWidth&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;obj.offsetWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;H&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AdMoveConfig.MoveHeight&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;obj.offsetHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;W&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Math.random(),&nbsp;y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;H&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Math.random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;rad&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Math.random()&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;Math.PI&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;kx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.sin(rad),&nbsp;ky&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.cos(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;dirx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Math.random()&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.5</span><span style="color: #000000;">&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;">1</span><span style="color: #000000;">),&nbsp;diry&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Math.random()&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.5</span><span style="color: #000000;">&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;">1</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;step&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;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;interval;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.SetLocation&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;(vx,&nbsp;vy)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vx;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vy;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.SetDirection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;(vx,&nbsp;vy)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dirx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vx;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diry&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vy;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.CustomMethod&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;obj.style.left&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(x&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;AdMoveConfig.ScrollX)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">px</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.style.top&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(y&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;AdMoveConfig.ScrollY)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">px</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rad&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Math.random()&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;Math.PI&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AdMoveConfig.MoveWidth&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;obj.offsetWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AdMoveConfig.MoveHeight&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;obj.offsetHeight;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;step&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;kx&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;dirx;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(x&nbsp;</span><span style="color: #000000;">&lt;</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;dirx&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;x&nbsp;</span><span style="color: #000000;">=</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;kx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.sin(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ky&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.cos(rad);<br />
&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;(x&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;W)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dirx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;W;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.sin(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ky&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.cos(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;y&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;step&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ky&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;diry;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(y&nbsp;</span><span style="color: #000000;">&lt;</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;diry&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;y&nbsp;</span><span style="color: #000000;">=</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;kx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.sin(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ky&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.cos(rad);<br />
&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;(y&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;H)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diry&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;H;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.sin(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ky&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Math.cos(rad);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Run&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;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;delay&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interval&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;setInterval(obj.CustomMethod,&nbsp;delay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseover&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;clearInterval(interval);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseout&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;interval&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;setInterval(obj.CustomMethod,&nbsp;delay);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Stop&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;obj.onmouseover&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;clearInterval(interval);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseout&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;clearInterval(interval);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
}<br />
<br />
</span></div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/323786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2010-06-18 10:47 <a href="http://www.blogjava.net/wangxinsh55/archive/2010/06/18/323786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CKeditor 配置使用</title><link>http://www.blogjava.net/wangxinsh55/archive/2010/01/31/311396.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Sun, 31 Jan 2010 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2010/01/31/311396.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/311396.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2010/01/31/311396.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/311396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/311396.html</trackback:ping><description><![CDATA[<div>
<div g_c_pdin="" g_p_center="" c07="" content="" id="blogtext_fks_083070085081083074081082087095085086083064081081081065">
<div>
<p><font color="#999999">ckeditor 的官方网站是 </font><a href="http://ckeditor.com/"><font color="#999999">http://ckeditor.com/</font></a><font color="#999999"> ，我当前使用的版本是v3.0.1。</font> </p>
<p><font color="#0000ff"><strong>一、使用方法：</strong></font> </p>
<p><font color="#993300">1、在页面&lt;head&gt;中引入ckeditor核心文件ckeditor.js</font>
</p>
<p><font color="#999999">&lt;script type="text/javas<wbr>cript"
src="ckeditor/ckeditor.js"&gt;&lt;/script&gt; </font></p>
<p><font color="#993300">2、在使用编辑器的地方插入HTML控件&lt;textarea&gt;</font> </p>
<p><font color="#999999">&lt;textarea id="TextArea1" cols="20" rows="2"
class="ckeditor"&gt;&lt;/textarea&gt; </font></p>
<p><font color="#999999">如果是ASP.NET环境，也可用服务器端控件&lt;TextBox&gt; </font></p>
<p><font color="#999999">&lt;asp:TextBox ID="tbContent" runat="server"
TextMode="MultiLine" class="ckeditor"&gt;&lt;/asp:TextBox&gt; </font></p>
<p><font color="#999999">注意在控件中加上 class="ckeditor" 。 </font></p>
<p><font color="#993300">3、将相应的控件替换成编辑器代码</font> </p>
<p><font color="#999999">&lt;script type="text/javas<wbr>cript"&gt;<br />
&nbsp;&nbsp;&nbsp;
CKEDITOR.replace('TextArea1');<br />
//如果是在ASP.NET环境下用的服务器端控
件&lt;TextBox&gt;<br />
&nbsp;&nbsp;&nbsp; CKEDITOR.replace('tbContent');<br />
//如
果&lt;TextBox&gt;控件在母版页中，要这样写<br />
&nbsp;&nbsp;&nbsp;
CKEDITOR.replace('&lt;%=tbContent.ClientID.Replace("_","$") %&gt;');<br />
&lt;/script&gt;</font>
</p>
<p><font color="#993300">4、配置编辑器</font> </p>
<p>&nbsp;&nbsp;&nbsp; <font color="#999999">ckeditor的配置都集中在 ckeditor/config.js
文件中，下面是一些常用的配置参数： </font></p>
<p><font color="#999999">// 界面语言，默认为 'en' </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.language = 'zh-cn'; </font></p>
<p><font color="#999999">// 设置宽高 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.width = 400; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.height = 400; </font></p>
<p><font color="#999999">// 编辑器样式，有三种：'kama'（默认）、'office2003'、'v2' </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.skin = 'v2'; </font></p>
<p><font color="#999999">// 背景颜色 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.uiColor = '#FFF'; </font></p>
<p><font color="#999999">//
工具栏（基础'Basic'、全能'Full'、自定义）plugins/toolbar/plugin.js </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.toolbar = 'Basic'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.toolbar = 'Full'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; 这将配合：<br />
&nbsp;&nbsp;&nbsp; config.toolbar_Full = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Source','-','Save','NewPage','Preview','-','Templates'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print',
'SpellChecker', 'Scayt'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select',
'Button', 'ImageButton', 'HiddenField'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '/',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Link','Unlink','Anchor'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'/',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ['Styles','Format','Font','FontSize'],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['TextColor','BGColor']<br />
&nbsp;&nbsp;&nbsp; ]; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //工具栏是否可以被收缩<br />
&nbsp;&nbsp;&nbsp;
config.toolbarCanCollapse = true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //工具栏的位置<br />
&nbsp;&nbsp;&nbsp; config.toolbarLocation =
'top';//可选：bottom </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //工具栏默认是否展开<br />
&nbsp;&nbsp;&nbsp;
config.toolbarStartupExpanded = true; </font></p>
<p><font color="#999999">// 取消 &#8220;拖拽以改变尺寸&#8221;功能 plugins/resize/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.resize_enabled = false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //改变大小的最大高度 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; config.resize_maxHeight = 3000; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //改变大小的最大宽度<br />
&nbsp;&nbsp;&nbsp; config.resize_maxWidth =
3000; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //改变大小的最小高度<br />
&nbsp;&nbsp;&nbsp; config.resize_minHeight =
250; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //改变大小的最小宽度<br />
&nbsp;&nbsp;&nbsp; config.resize_minWidth =
750;<br />
// 当提交包含有此编辑器的表单时，是否自动更新元素内的数据<br />
&nbsp;&nbsp;&nbsp; config.autoUpdateElement =
true; </font></p>
<p><font color="#999999">// 设置是使用绝对目录还是相对目录，为空为相对目录<br />
&nbsp;&nbsp;&nbsp;
config.baseHref = '' </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; // 编辑器的z-index值<br />
&nbsp;&nbsp;&nbsp;
config.baseFloatZIndex = 10000; </font></p>
<p><font color="#999999">//设置快捷键<br />
&nbsp;&nbsp;&nbsp; config.keystrokes = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [
CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ],&nbsp; //获取焦点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [
CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ],&nbsp; //元素焦点 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.SHIFT + 121 /*F10*/,
'contextMenu' ],&nbsp; //文本菜单 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.CTRL + 90 /*Z*/, 'undo' ],&nbsp;
//撤销<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.CTRL + 89 /*Y*/, 'redo' ],&nbsp; //重做<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [
CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/, 'redo' ],&nbsp; // </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.CTRL + 76 /*L*/, 'link' ],&nbsp;
//链接 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ],&nbsp;
//粗体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ],&nbsp; //斜体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[ CKEDITOR.CTRL + 85 /*U*/, 'underline' ],&nbsp; //下划线 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ CKEDITOR.ALT + 109 /*-*/,
'toolbarCollapse' ]<br />
&nbsp;&nbsp;&nbsp; ] </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //设置快捷键 可能与浏览器快捷键冲突
plugins/keystrokes/plugin.js.<br />
&nbsp;&nbsp;&nbsp; config.blockedKeystrokes = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CKEDITOR.CTRL + 66 /*B*/,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CKEDITOR.CTRL + 73 /*I*/,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CKEDITOR.CTRL + 85 /*U*/<br />
&nbsp;&nbsp;&nbsp; ] </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //设置编辑内元素的背景色的取值
plugins/colorbutton/plugin.js.<br />
&nbsp;&nbsp;&nbsp; config.colorButton_backStyle = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
element : 'span',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styles : { 'background-color' : '#(color)'
}<br />
&nbsp;&nbsp;&nbsp; } </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //设置前景色的取值 plugins/colorbutton/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.colorButton_colors =&nbsp;
'000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5, </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF&#8217; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否在选择颜色时显示&#8220;其它颜色&#8221;选项
plugins/colorbutton/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.colorButton_enableMore =
false </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //区块的前景色默认值设置 plugins/colorbutton/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.colorButton_foreStyle = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element : 'span',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
styles : { 'color' : '#(color)' }<br />
&nbsp;&nbsp;&nbsp; }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //所需要添加的CSS文件 在此添加 可使用相对路径和网站的绝对路径<br />
&nbsp;&nbsp;&nbsp;
config.contentsCss = './contents.css'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //文字方向<br />
&nbsp;&nbsp;&nbsp; config.contentsLangDirection =
'rtl'; //从左到右 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //CKeditor的配置文件 若不想配置 留空即可<br />
&nbsp;&nbsp;&nbsp;
CKEDITOR.replace( 'myfiled', { customConfig : './config.js' } ); </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //界面编辑框的背景色 plugins/dialog/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.dialog_backgroundCoverColor = '#fffefd'; //可设置参考<br />
&nbsp;&nbsp;&nbsp;
config.dialog_backgroundCoverColor = 'white' //默认 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //背景的不透明度 数值应该在：0.0～1.0 之间
plugins/dialog/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.dialog_backgroundCoverOpacity =
0.5 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //移动或者改变元素时 边框的吸附距离 单位：像素
plugins/dialog/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.dialog_magnetDistance = 20; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否拒绝本地拼写检查和提示 默认为拒绝 目前仅firefox和safari支持
plugins/wysiwygarea/plugin.js.<br />
&nbsp;&nbsp;&nbsp; config.disableNativeSpellChecker =
true </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //进行表格编辑功能 如：添加行或列 目前仅firefox支持
plugins/wysiwygarea/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.disableNativeTableHandles =
true; //默认为不开启 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否开启 图片和表格 的改变大小的功能
config.disableObjectResizing = true;<br />
&nbsp;&nbsp;&nbsp; config.disableObjectResizing
= false //默认为开启 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //设置HTML文档类型<br />
&nbsp;&nbsp;&nbsp; config.docType =
'&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "</font><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22%27"><font color="#999999">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22'</font></a><font color="#999999"> ; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否对编辑区域进行渲染
plugins/editingblock/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.editingBlock = true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //编辑器中回车产生的标签<br />
&nbsp;&nbsp;&nbsp; config.enterMode =
CKEDITOR.ENTER_P; //可选：CKEDITOR.ENTER_BR或CKEDITOR.ENTER_DIV </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否使用HTML实体进行输出 plugins/entities/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.entities = true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //定义更多的实体 plugins/entities/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.entities_additional = '#39'; //其中#代替了&amp; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否转换一些难以显示的字符为相应的HTML字符
plugins/entities/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.entities_greek = true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否转换一些拉丁字符为HTML
plugins/entities/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.entities_latin = true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否转换一些特殊字符为ASCII字符 如"This is Chinese:
汉语."转换为"This is Chinese: &#27721;&#35821;."
plugins/entities/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.entities_processNumerical =
false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //添加新组件<br />
&nbsp;&nbsp;&nbsp; config.extraPlugins =
'myplugin'; //非默认 仅示例 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //使用搜索时的高亮色 plugins/find/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.find_highlight = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element : 'span',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styles
: { 'background-color' : '#ff0', 'color' : '#00f' }<br />
&nbsp;&nbsp;&nbsp; }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //默认的字体名 plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.font_defaultLabel = 'Arial'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //字体编辑时的字符集 可以添加常用的中文字符：宋体、楷体、黑体等
plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.font_names = 'Arial;Times New
Roman;Verdana'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //文字的默认式样 plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.font_style = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element&nbsp;&nbsp; : 'span',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styles&nbsp;&nbsp;
: { 'font-family' : '#(family)' },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overrides : [ { element :
'font', attributes : { 'face' : null } } ]<br />
&nbsp;&nbsp;&nbsp; }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //字体默认大小 plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.fontSize_defaultLabel = '12px'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //字体编辑时可选的字体大小 plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.fontSize_sizes
='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //设置字体大小时 使用的式样 plugins/font/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.fontSize_style = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element&nbsp;&nbsp; : 'span',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
styles&nbsp;&nbsp; : { 'font-size' : '#(size)' },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overrides : [ {
element : 'font', attributes : { 'size' : null } } ]<br />
&nbsp;&nbsp;&nbsp; }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否强制复制来的内容去除格式
plugins/pastetext/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.forcePasteAsPlainText =false
//不去除 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;
//是否强制用&#8220;&amp;&#8221;来代替&#8220;&amp;amp;&#8221;plugins/htmldataprocessor/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.forceSimpleAmpersand = false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对address标签进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_address = { element : 'address', attributes : { class :
'styledAddress' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对DIV标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_div = { element : 'div', attributes : { class :
'normalDiv' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H1标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h1 = { element : 'h1', attributes : { class :
'contentTitle1' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H2标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h2 = { element : 'h2', attributes : { class :
'contentTitle2' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H3标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h1 = { element : 'h3', attributes : { class :
'contentTitle3' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H4标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h1 = { element : 'h4', attributes : { class :
'contentTitle4' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H5标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h1 = { element : 'h5', attributes : { class :
'contentTitle5' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对H6标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_h1 = { element : 'h6', attributes : { class :
'contentTitle6' } }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对P标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_p = { element : 'p', attributes : { class : 'normalPara' }
}; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对PRE标签自动进行格式化 plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.format_pre = { element : 'pre', attributes : { class : 'co<wbr>de'
} }; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //用分号分隔的标签名字 在工具栏上显示
plugins/format/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.format_tags =
'p;h1;h2;h3;h4;h5;h6;pre;address;div'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否使用完整的html编辑模式
如使用，其源码将包含：&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;等标签<br />
&nbsp;&nbsp;&nbsp;
config.fullPage = false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否忽略段落中的空字符 若不忽略 则字符将以&#8220;&#8221;表示
plugins/wysiwygarea/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.ignoreEmptyParagraph = true;
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //在清除图片属性框中的链接属性时 是否同时清除两边的&lt;a&gt;标签
plugins/image/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.image_removeLinkByEmptyURL = true;
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //一组用逗号分隔的标签名称，显示在左下角的层次嵌套中
plugins/menu/plugin.js.<br />
&nbsp;&nbsp;&nbsp; config.menu_groups
='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea';
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //显示子菜单时的延迟，单位：ms plugins/menu/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.menu_subMenuDelay = 400; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //当执行&#8220;新建&#8221;命令时，编辑器中的内容
plugins/newpage/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.newpage_html = ''; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //当从word里复制文字进来时，是否进行文字的格式化去除
plugins/pastefromword/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.pasteFromWordIgnoreFontFace = true; //默认为忽略格式 </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp;
//是否使用&lt;h1&gt;&lt;h2&gt;等标签修饰或者代替从word文档中粘贴过来的内容
plugins/pastefromword/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.pasteFromWordKeepsStructure = false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //从word中粘贴内容时是否移除格式
plugins/pastefromword/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.pasteFromWordRemoveStyle =
false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对应后台语言的类型来对输出的HTML内容进行格式化，默认为空<br />
&nbsp;&nbsp;&nbsp;
config.protectedSource.push( /&lt;"?["s"S]*?"?&gt;/g );&nbsp;&nbsp; // PHP Co<wbr>de<br />
&nbsp;&nbsp;&nbsp;
config.protectedSource.push( //g );&nbsp;&nbsp; // ASP Co<wbr>de<br />
&nbsp;&nbsp;&nbsp;
config.protectedSource.push(
/(]+&gt;["s|"S]*?&lt;"/asp:[^"&gt;]+&gt;)|(]+"/&gt;)/gi );&nbsp;&nbsp; // ASP.Net
Co<wbr>de </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //当输入：shift+Enter时插入的标签<br />
&nbsp;&nbsp;&nbsp;
config.shiftEnterMode = CKEDITOR.ENTER_P;&nbsp;
//可选：CKEDITOR.ENTER_BR或CKEDITOR.ENTER_DIV </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //可选的表情替代字符 plugins/smiley/plugin.js.<br />
&nbsp;&nbsp;&nbsp;
config.smiley_descriptions = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ':)', ':(', ';)', ':D', ':/',
':P',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '', '', '', '', '', '',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '', ';(', '', '',
'', '',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '', ':kiss', '' ]; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //对应的表情图片 plugins/smiley/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.smiley_images = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
'broken_heart.gif','kiss.gif','envelope.gif']; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //表情的地址 plugins/smiley/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.smiley_path = 'plugins/smiley/images/'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //页面载入时，编辑框是否立即获得焦点
plugins/editingblock/plugin.js plugins/editingblock/plugin.js.<br />
&nbsp;&nbsp;&nbsp;
config.startupFocus = false; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //载入时，以何种方式编辑 源码和所见即所得 "source"和"wysiwyg"
plugins/editingblock/plugin.js.<br />
&nbsp;&nbsp;&nbsp; config.startupMode ='wysiwyg'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //载入时，是否显示框体的边框
plugins/showblocks/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.startupOutlineBlocks = false;
</font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //是否载入样式文件 plugins/stylescombo/plugin.js.<br />
&nbsp;&nbsp;&nbsp;
config.stylesCombo_stylesSet = 'default';<br />
&nbsp;&nbsp;&nbsp; //以下为可选<br />
&nbsp;&nbsp;&nbsp;
config.stylesCombo_stylesSet = 'mystyles';<br />
&nbsp;&nbsp;&nbsp;
config.stylesCombo_stylesSet = 'mystyles:/editorstyles/styles.js';<br />
&nbsp;&nbsp;&nbsp;
config.stylesCombo_stylesSet =
'mystyles:http://www.example.com/editorstyles/styles.js'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //起始的索引值<br />
&nbsp;&nbsp;&nbsp; config.tabIndex = 0; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //当用户键入TAB时，编辑器走过的空格数，(&amp;nbsp;)
当值为0时，焦点将移出编辑框 plugins/tab/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.tabSpaces = 0; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //默认使用的模板 plugins/templates/plugin.js.<br />
&nbsp;&nbsp;&nbsp;
config.templates = 'default'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //用逗号分隔的模板文件plugins/templates/plugin.js.<br />
&nbsp;&nbsp;&nbsp;
config.templates_files = [ 'plugins/templates/templates/default.js' ] </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //当使用模板时，&#8220;编辑内容将被替换&#8221;框是否选中
plugins/templates/plugin.js<br />
&nbsp;&nbsp;&nbsp; config.templates_replaceContent =
true; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //主题<br />
&nbsp;&nbsp;&nbsp; config.theme = 'default'; </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; //撤销的记录步数 plugins/undo/plugin.js<br />
&nbsp;&nbsp;&nbsp;
config.undoStackSize =20; </font></p>
<p><font color="#999999">// 在 CKEditor 中集成 CKFinder，注意 ckfinder
的路径选择要正确。<br />
//CKFinder.SetupCKEditor(null, '/ckfinder/'); </font></p>
<p><font color="#0000ff"><strong>二、 一些使用技巧</strong></font> </p>
<p><font color="#993300">1、在页面中即时设置编辑器</font> </p>
<p><font color="#999999">&lt;script type="text/javas<wbr>cript"&gt;<br />
//
示例1：设置工具栏为基本工具栏，高度为70<br />
&nbsp;&nbsp;&nbsp;
CKEDITOR.replace('&lt;%=tbLink.ClientID.Replace("_","$") %&gt;',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{ toolbar:'Basic', height:70 });<br />
//示例2：工具栏为自定义类型<br />
&nbsp;&nbsp;&nbsp;
CKEDITOR.replace( 'editor1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toolbar :<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;&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;
['Bold','Italic','Underline','Strike','Subscript','Superscript'],<br />
//
数字列表&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;
['NumberedList','BulletedList','-','Outdent','Indent'],<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; 两端对齐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],<br />
//超链接&nbsp;
取消超链接 锚点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ['Link','Unlink','Anchor'],<br />
//图片&nbsp;&nbsp;&nbsp;
flash&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;&nbsp; 分页符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],<br />
'/',<br />
//
样式&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;
['Styles','Format','Font','FontSize'],<br />
//文本颜色&nbsp;&nbsp;&nbsp;&nbsp; 背景颜色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
['TextColor','BGColor'],<br />
//全屏&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;
['Maximize', 'ShowBlocks','-']<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; );<br />
&lt;/script&gt;
</font></p>
<p><font color="#0000ff"><strong>三、精简ckeditor</strong></font> </p>
<p>&nbsp;&nbsp;&nbsp;<font color="#999999"> 在部署到Web服务器上时，下列文件夹和文件都可以删除： </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; /_samples ：示例文件夹； </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; /_source ：未压缩源程序； </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; /lang文件夹下除 zh-cn.js、en.js
以外的文件（也可以根据需要保留其他语言文件）； </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; 根目录下的
changes.html(更新列表)，install.html(安装指向)，license.html(使用许可)； </font></p>
<p><font color="#999999">&nbsp;&nbsp;&nbsp; /skins 目录下不需要的皮肤，一般用V2(简单，朴素)
，如果只保留V2则必须在config.js中指定皮肤。</font></p>
</div>
</div>
</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/311396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2010-01-31 16:59 <a href="http://www.blogjava.net/wangxinsh55/archive/2010/01/31/311396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我写的javascript常用静态方法类，分享大家</title><link>http://www.blogjava.net/wangxinsh55/archive/2009/06/10/281143.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 10 Jun 2009 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2009/06/10/281143.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/281143.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2009/06/10/281143.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/281143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/281143.html</trackback:ping><description><![CDATA[<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;">util</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(id){<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;document.getElementById(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trim:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(str){<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;str.replace(</span><span style="color: #000000;">/</span><span style="color: #000000;">(</span><span style="color: #000000;">^</span><span style="color: #000000;">\s</span><span style="color: #000000;">+</span><span style="color: #000000;">)</span><span style="color: #000000;">|</span><span style="color: #000000;">(\s</span><span style="color: #000000;">+</span><span style="color: #000000;">$)</span><span style="color: #000000;">/</span><span style="color: #000000;">g,&nbsp;</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;len:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(str){&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;str.replace(</span><span style="color: #000000;">/</span><span style="color: #000000;">[</span><span style="color: #000000;">^</span><span style="color: #000000;">\x00</span><span style="color: #000000;">-</span><span style="color: #000000;">\xff]</span><span style="color: #000000;">/</span><span style="color: #000000;">g,'</span><span style="color: #000000;">**</span><span style="color: #000000;">').length;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;format:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(str){<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;arg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;arguments;<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;str.replace(</span><span style="color: #000000;">/</span><span style="color: #000000;">\{(\d</span><span style="color: #000000;">+</span><span style="color: #000000;">)\}</span><span style="color: #000000;">/</span><span style="color: #000000;">g,&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(m,&nbsp;i){<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;arg[parseInt(i)</span><span style="color: #000000;">+</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;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;each:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(object,&nbsp;callback,&nbsp;args){<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;name,&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;length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;object.length;<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;(&nbsp;args&nbsp;)&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;(&nbsp;length&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;undefined&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;">for</span><span style="color: #000000;">&nbsp;(&nbsp;name&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;object&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;(&nbsp;callback.apply(&nbsp;object[&nbsp;name&nbsp;],&nbsp;args&nbsp;)&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</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;">break</span><span style="color: #000000;">;<br />
&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;"><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;(&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;length;&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;(&nbsp;callback.apply(&nbsp;object[&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;],&nbsp;args&nbsp;)&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</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;">break</span><span style="color: #000000;">;<br />
&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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;length&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;undefined&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;">for</span><span style="color: #000000;">&nbsp;(&nbsp;name&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;object&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;(&nbsp;callback.call(&nbsp;object[&nbsp;name&nbsp;],&nbsp;name,&nbsp;object[&nbsp;name&nbsp;]&nbsp;)&nbsp;</span><span style="color: #000000;">===</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</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;">break</span><span style="color: #000000;">;<br />
&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;"><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;(&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;object[</span><span style="color: #000000;">0</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;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;length&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;callback.call(&nbsp;value,&nbsp;i,&nbsp;value&nbsp;)&nbsp;</span><span style="color: #000000;">!==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;object[</span><span style="color: #000000;">++</span><span style="color: #000000;">i]&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;setCookie:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(name,value,hours,path,domain){<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;str</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String();<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;nextTime</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextTime.setHours(nextTime.getHours()</span><span style="color: #000000;">+</span><span style="color: #000000;">hours);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">=</span><span style="color: #000000;">name</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;">escape(value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(hours)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">+=</span><span style="color: #000000;">"</span><span style="color: #000000;">;expires=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">nextTime.toGMTString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(path)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">+=</span><span style="color: #000000;">"</span><span style="color: #000000;">;path=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">path;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(domain)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000;">+=</span><span style="color: #000000;">"</span><span style="color: #000000;">;domain=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">domain;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.cookie</span><span style="color: #000000;">=</span><span style="color: #000000;">str;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getCookie:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(name){<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;rs</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;RegExp(</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;">name</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;">"</span><span style="color: #000000;">gi</span><span style="color: #000000;">"</span><span style="color: #000000;">).exec(document.cookie),tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(tmp</span><span style="color: #000000;">=</span><span style="color: #000000;">rs)<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;unescape(tmp[</span><span style="color: #000000;">2</span><span style="color: #000000;">]);<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;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delCookie:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(name){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.cookie&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">=-1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;expires=Fri,&nbsp;31&nbsp;Dec&nbsp;1999&nbsp;23:59:59&nbsp;GMT;</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;</span><span style="color: #008000;">/*</span><span style="color: #008000;">*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*url&nbsp;String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*parms&nbsp;String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*method&nbsp;String&nbsp;default&nbsp;value&nbsp;"get"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*asy&nbsp;Boolean&nbsp;defalut&nbsp;value&nbsp;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*success&nbsp;Function(http_request.responseText)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajax:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(config){<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;url</span><span style="color: #000000;">=</span><span style="color: #000000;">config.url,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parms</span><span style="color: #000000;">=</span><span style="color: #000000;">(config.parms</span><span style="color: #000000;">?</span><span style="color: #000000;">config.parms:</span><span style="color: #000000;">""</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&amp;t=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Date().getTime(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</span><span style="color: #000000;">=</span><span style="color: #000000;">config.method</span><span style="color: #000000;">||</span><span style="color: #000000;">"</span><span style="color: #000000;">get</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;asy</span><span style="color: #000000;">=</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<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;http_request</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(method.toLowerCase()</span><span style="color: #000000;">==</span><span style="color: #000000;">"</span><span style="color: #000000;">get</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;url</span><span style="color: #000000;">=</span><span style="color: #000000;">url</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;">parms;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parms</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</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: #008000;">//</span><span style="color: #008000;">开始初始化XMLHttpRequest对象</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(window.XMLHttpRequest)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Mozilla&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;http_request&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;XMLHttpRequest();<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;(http_request.overrideMimeType)&nbsp;{</span><span style="color: #008000;">//</span><span style="color: #008000;">设置MiME类别</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;http_request.overrideMimeType(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/xml</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;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(window.ActiveXObject)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;IE浏览器</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;">try</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;http_request&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ActiveXObject(</span><span style="color: #000000;">"</span><span style="color: #000000;">Msxml2.XMLHTTP</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;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(e)&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;">try</span><span style="color: #000000;">&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;http_request&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ActiveXObject(</span><span style="color: #000000;">"</span><span style="color: #000000;">Microsoft.XMLHTTP</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;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(e)&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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">http_request)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&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;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Error(</span><span style="color: #000000;">"</span><span style="color: #000000;">不能创建XMLHttpRequest对象实例.</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;</span><span style="color: #0000ff;">return</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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.open(method,url,asy);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.onreadystatechange</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</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;">if</span><span style="color: #000000;">&nbsp;(http_request.readyState&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</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;">try</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;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(http_request.status&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">200</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;config.success(http_request.responseText);<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;}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(e){<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;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Error(</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;}<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: #0000ff;">if</span><span style="color: #000000;">(method.toLowerCase()</span><span style="color: #000000;">==</span><span style="color: #000000;">"</span><span style="color: #000000;">post</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;http_request.setRequestHeader(</span><span style="color: #000000;">"</span><span style="color: #000000;">Content-Type</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">application/x-www-form-urlencoded</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;&nbsp;&nbsp;&nbsp;&nbsp;http_request.send(parms);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
}();</span></div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/281143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2009-06-10 14:17 <a href="http://www.blogjava.net/wangxinsh55/archive/2009/06/10/281143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>带参数绑定事件</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/11/30/243513.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Sun, 30 Nov 2008 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/11/30/243513.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/243513.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/11/30/243513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/243513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/243513.html</trackback:ping><description><![CDATA[<pre><span style="color: #000000;">&lt;!</span><span style="color: #000000;">doctype html </span><span style="color: #0000ff;">public</span><span style="color: #000000;">"</span><span style="color: #000000;">-//w3c//dtd html 4.0 transitional//en</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">meta http</span><span style="color: #000000;">-</span><span style="color: #000000;">equiv</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Content-Type</span><span style="color: #000000;">"</span><span style="color: #000000;"> content</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html; charset=gbk</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">title</span><span style="color: #000000;">&gt;</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> document </span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">title</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/javascript</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
window.$ </span><span style="color: #000000;">=</span><span style="color: #000000;"> function(id) {<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(typeof id </span><span style="color: #000000;">==</span><span style="color: #000000;">'</span><span style="color: #000000;">string</span><span style="color: #000000;">'</span><span style="color: #000000;">) {<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> document.getElementById(id);<br />
}<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> id;<br />
}<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
* 事件处理工具类<br />
</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
var Event </span><span style="color: #000000;">=</span><span style="color: #000000;"> {}<br />
<br />
Event </span><span style="color: #000000;">=</span><span style="color: #000000;"> {<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
* 为 element 使用 handler 处理程序添加至 event 事件<br />
* 兼容 IE 及 Firefox 等浏览器<br />
*<br />
* 例如为 botton 对象添加 onclick 事件，使用 clickEvent<br />
* 方法作为处理程序：<br />
*   Event.addEvent(botton, 'click', clickEvent);<br />
*<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> element  需要添加事件的对象（Object）<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> event    需要添加的事件名称（String），不加&#8220;on&#8221;<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> handler  需要添加的方法引用（Function）<br />
</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
addEvent : function(element, event, handler) {<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(element.attachEvent) {<br />
element.attachEvent(</span><span style="color: #000000;">'</span><span style="color: #000000;">on</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;"> event, handler);<br />
} </span><span style="color: #0000ff;">else</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (element.addEventListener) {<br />
element.addEventListener(event, handler, </span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {<br />
element[</span><span style="color: #000000;">'</span><span style="color: #000000;">on</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;"> event] </span><span style="color: #000000;">=</span><span style="color: #000000;"> handler;<br />
}<br />
},<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
* 添加事件处理程序时，只能添加一个方法的引用，并不能给<br />
* 方法加上参数。比如定义了 clickEvent(str) 这个方法，现<br />
* 在要将其作为 obj 的 onclick 的事件处理程序，就可以用：<br />
* obj.onclick = Event.getFuntion(null, clickEvent, str);<br />
*<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> obj      需要绑定事件处理函数的所有者，null 表示 window 对象<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> fun      需要绑定的事件处理函数名<br />
* </span><span style="color: #808080;">@param</span><span style="color: #008000;"> ...      第三个参数开始为绑定事件处理函数的参数，由 0 到多个构成<br />
</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
getEventHandler : function(obj, fun) {<br />
var args </span><span style="color: #000000;">=</span><span style="color: #000000;"> [];<br />
obj </span><span style="color: #000000;">=</span><span style="color: #000000;"> obj </span><span style="color: #000000;">||</span><span style="color: #000000;"> window;<br />
</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(var i </span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> arguments.length; i</span><span style="color: #000000;">++</span><span style="color: #000000;">) {<br />
args.push(arguments[i]);<br />
}<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> function() {<br />
fun.apply(obj, args);<br />
};<br />
}<br />
}<br />
<br />
function show(txtObj) {<br />
alert(txtObj.value);<br />
txtObj.focus();<br />
txtObj.select();<br />
}<br />
<br />
window.onload </span><span style="color: #000000;">=</span><span style="color: #000000;"> function() {<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;"> var fun = Event.getEventHandler(window, show, $('txt'));<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Event.addEvent($('btn'), 'click', fun);</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">  $(</span><span style="color: #000000;">'</span><span style="color: #000000;">btn</span><span style="color: #000000;">'</span><span style="color: #000000;">).onclick </span><span style="color: #000000;">=</span><span style="color: #000000;"> Event.getEventHandler(</span><span style="color: #0000ff;">null</span><span style="color: #000000;">, show, $(</span><span style="color: #000000;">'</span><span style="color: #000000;">txt</span><span style="color: #000000;">'</span><span style="color: #000000;">));<br />
}<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">div id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">content</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">form</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">"</span><span style="color: #000000;"> name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">txt</span><span style="color: #000000;">"</span><span style="color: #000000;"> id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">txt</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">br </span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">button</span><span style="color: #000000;">"</span><span style="color: #000000;"> name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">btn</span><span style="color: #000000;">"</span><span style="color: #000000;"> id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">btn</span><span style="color: #000000;">"</span><span style="color: #000000;"> value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">click</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">form</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span></pre>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/243513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-11-30 11:50 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/11/30/243513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JQuery-Dialog(弹出窗口，遮蔽窗口)</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242295.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 24 Nov 2008 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242295.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/242295.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242295.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/242295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/242295.html</trackback:ping><description><![CDATA[<div>
<p>在Ajax中经常用到的弹出窗口和遮蔽窗口。自己写肯定是一个最佳方案，但时间和成本上，还是决定了寻找现成的吧。大概罗列一下。需要我满足我几个条件</p>
<ul>
    <li>一定要简洁方便</li>
    <li>拥有遮蔽功能，Model Dialog ，所谓的模态窗口</li>
    <li>可以根据HTML弹出窗口</li>
    <li>可以定义弹出窗口的位置，大小</li>
</ul>
<p>其实我只需要一个框，我更希望框的内容我自己控制，这样通用性就强了。而且一定要简洁，不能弹个框也要配置复杂。</p>
<p>最后挑选下来最满意的Boxy<br />
http://onehackoranother.com/projects/jquery/boxy/<br />
<br />
<img src="http://farm4.static.flickr.com/3190/3018221888_3ab47d2d22_o.png" alt="" /></p>
<p>Boxy生产的HTML代码也是很乱的。但Boxy的设置最简单，所以上手很容易（关注ing，发现CUP有些偏高）。</p>
<p>&#8211;=Other Links=&#8211;<br />
http://www.ericmmartin.com/projects/simplemodal/<br />
http://dev.iceburg.net/jquery/jqModal/#examples<br />
<strong>simplemodal、jqModal</strong> 。这两个是最简单的，灵活性很好，但需要自己配制的多，而且官方的DEMO和我要的需求不是很相同。需要配置的多，学习成本高了。<br />
如果你希望定制自己的Dialog，这两个插件，可以作为基础包，在基础包在封装一下。就可以很方便的满足你的要求。</p>
<p>http://www.malsup.com/jquery/block/<br />
<strong>BlockUI</strong>效果很好。而且官方的帮助也很详细，如果只是简单的使用遮蔽，推荐使用，上手也容易。</p>
<p>http://jquery.com/demo/thickbox/<br />
貌似很复杂，而且偏向于图片，直接就否决了</p>
<p>http://docs.jquery.com/UI/Dialog<br />
官方的要，还要引几个扩展的JS,支持窗口缩放什么的，但生产的代码也太复杂了，不推荐。</p>
<p><strong>网络上整理的一些Dialog列表</strong><br />
http://hi.baidu.com/freezesoul/blog/item/2889b44580e2fd23cffca3fb.html<br />
http://vision-media.ca/resources/jquery/jquery-popup-plugin-review</p>
<p><strong>Custom JavaScript Dialog Boxes </strong><br />
http://hi.baidu.com/freezesoul/blog/item/63a10bfa6e54109259ee90d8.html</p>
</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/242295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-11-24 16:32 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>yuicompressor 批处理 压缩js和css</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242215.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 24 Nov 2008 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242215.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/242215.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/242215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/242215.html</trackback:ping><description><![CDATA[现在的系统为了得到更好的用户体验，都加入了ajax的特效，只要用到了ajax的代码，就会引来一大堆js代码，这些代码其实也挺占用带宽的，为了使网
页加载得更快，决定在项目中才用网上流行的js压缩器来压缩代码。压缩后的代码基本可以抽掉40%左右的脂肪。<br />
<br />
找到几个压缩器，发现很多压缩器压缩后的js代码都出现这样或那样的问题<br />
<br />
ESC 1.14   http://www.saltstorm.net/depo/esc/?pod=js   压缩后有些中文会出现问号（我的js代码是用utf-8格式）<br />
jsmin http://www.crockford.com/javascript/jsmin.html   压缩后有些中文会出现问号<br />
dean edwards的packer http://dean.edwards.name/packer/ 压缩后的js代码会出现部分分号或大括号丢失，导致语法错误<br />
<br />
最
后找到了yuicompressor-2.3.4 http://developer.yahoo.com/yui/compressor/
感觉很好用，压缩后无损代码，而且连css也可以压缩，压缩的时候很多参数可以设置，可以制定js代码的编码格式等，java运行，本人写了一个bat批
处理遍历制定文件夹里面的所有js和css文件进行压缩。<br />
<br />
我自己写的bat遍历文件压缩代码<br />
<br />
<br />
<br />
(dir %1 /aa /b /s  | findstr /e /c:"js") &gt;tmp.txt<br />
for
/f %%i in (tmp.txt) do java -jar yuicompressor-2.3.4.jar --type js
--charset utf-8 -o %%i.tmp %%i &amp; copy %%i".tmp" %%i &amp; del
%%i".tmp"<br />
<br />
<br />
(dir %1 /aa /b /s  | findstr /e /c:"css") &gt;tmp.txt<br />
for
/f %%i in (tmp.txt) do java -jar yuicompressor-2.3.4.jar --type css
--charset utf-8 -o %%i.tmp %%i &amp; copy %%i".tmp" %%i &amp; del
%%i".tmp"<br />
<br />
<br />
保存为  jscompressor.bat 运行的时候在输入 jscompressor   (是我们指定的路径) 就可以批量进行压缩，压缩后替换压缩前的代码。<br />
<br />
<br />
<br />
下面是一些参数的说明。<br />
<br />
==============================================================================<br />
YUI Compressor<br />
==============================================================================<br />
<br />
NAME<br />
<br />
YUI Compressor - The Yahoo! JavaScript and CSS Compressor<br />
<br />
SYNOPSIS<br />
<br />
Usage: java -jar yuicompressor-x.y.z.jar [options] [input file]<br />
<br />
Global Options<br />
-h, --help                Displays this information<br />
--type            Specifies the type of the input file<br />
--charset        Read the input file using <br />
--line-break      Insert a line break after the specified column number<br />
-v, --verbose             Display informational messages and warnings<br />
-o                  Place the output into . Defaults to stdout.<br />
<br />
JavaScript Options<br />
--nomunge                 Minify only, do not obfuscate<br />
--preserve-semi           Preserve all semicolons<br />
--disable-optimizations   Disable all micro optimizations<br />
<br />
DESCRIPTION<br />
<br />
The YUI Compressor is a JavaScript compressor which, in addition to removing<br />
comments and white-spaces, obfuscates local variables using the smallest<br />
possible variable name. This obfuscation is safe, even when using constructs<br />
such as 'eval' or 'with' (although the compression is not optimal is those<br />
cases) Compared to jsmin, the average savings is around 20%.<br />
<br />
The YUI Compressor is also able to safely compress CSS files. The decision<br />
on which compressor is being used is made on the file extension (js or css)<br />
<br />
GLOBAL OPTIONS<br />
<br />
-h, --help<br />
Prints help on how to use the YUI Compressor<br />
<br />
--line-break<br />
Some source control tools don't like files containing lines longer than,<br />
say 8000 characters. The linebreak option is used in that case to split<br />
long lines after a specific column. It can also be used to make the code<br />
more readable, easier to debug (especially with the MS Script Debugger)<br />
Specify 0 to get a line break after each semi-colon in JavaScript, and<br />
after each rule in CSS.<br />
<br />
--type js|css<br />
The type of compressor (JavaScript or CSS) is chosen based on the<br />
extension of the input file name (.js or .css) This option is required<br />
if no input file has been specified. Otherwise, this option is only<br />
required if the input file extension is neither 'js' nor 'css'.<br />
<br />
--charset character-set<br />
If a supported character set is specified, the YUI Compressor will use it<br />
to read the input file. Otherwise, it will assume that the platform's<br />
default character set is being used. The output file is encoded using<br />
the same character set.<br />
<br />
-o outfile<br />
Place output in file outfile. If not specified, the YUI Compressor will<br />
default to the standard output, which you can redirect to a file.<br />
<br />
-v, --verbose<br />
Display informational messages and warnings.<br />
<br />
JAVASCRIPT ONLY OPTIONS<br />
<br />
--nomunge<br />
Minify only. Do not obfuscate local symbols.<br />
<br />
--preserve-semi<br />
Preserve unnecessary semicolons (such as right before a '}') This option<br />
is useful when compressed code has to be run through JSLint (which is the<br />
case of YUI for example)<br />
<br />
--disable-optimizations<br />
Disable all the built-in micro optimizations.
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/242215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-11-24 10:47 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/11/24/242215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript jquery 模板</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240943.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 17 Nov 2008 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240943.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/240943.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/240943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/240943.html</trackback:ping><description><![CDATA[<br />
/*<br />
&lt;--- --------------------------------------------------------------------------------------- ----<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Blog Entry:<br />
&nbsp;&nbsp; &nbsp;Creating jQuery Templates Plug-in Using Textarea Elements (Thanks Kurt Bonnet)<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Code Snippet:<br />
&nbsp;&nbsp; &nbsp;2<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Author:<br />
&nbsp;&nbsp; &nbsp;Ben Nadel / Kinky Solutions<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Link:<br />
&nbsp;&nbsp; &nbsp;http://www.bennadel.com/index.cfm?dax=blog:1393.view<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;Date Posted:<br />
&nbsp;&nbsp; &nbsp;Nov 10, 2008 at 9:06 AM<br />
&nbsp;&nbsp; &nbsp;<br />
---- --------------------------------------------------------------------------------------- ---&gt;<br />
*/<br />
<br />
// Define the jQuery Template plugin. This takes a textarea<br />
// value and converts it into an jQuery DOM elements (outside<br />
// of the current DOM) and returns it. It takes only one<br />
// argument: the name-value pairs of the values to replace<br />
// into the template.<br />
jQuery.extend({template:function (strHTML, objValues) {<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;// This will be our index variable for looping over the<br />
&nbsp;&nbsp; &nbsp;// values that were passed in.<br />
&nbsp;&nbsp; &nbsp;var strKey = "";<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;// Check to make sure we have a value string. If this is<br />
&nbsp;&nbsp; &nbsp;// not the right kind of jQuery stack, the HTML string will<br />
&nbsp;&nbsp; &nbsp;// be null.<br />
&nbsp;&nbsp; &nbsp;if (strHTML) {<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Now that we have the proper value, we have to<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// replace in the mapped values. Loop over each<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// value that was passed in.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for (strKey in objValues) {<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Escape all the special values in the key so that<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// it can be used in a regular expression.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;strSafeKey = strKey.replace(new RegExp("([""[""]"".""+""*""{""}""("")""$""?""-])", "gi"), """$1");<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Replace the value.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;strHTML = strHTML.replace(new RegExp("""{" + strSafeKey + """}", "gi"), objValues[strKey]);<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// At this point, our HTML will have fully replaced<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// values. Now, let's convert it into a jQuery DOM<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// element and return it.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return (jQuery(strHTML));<br />
&nbsp;&nbsp; &nbsp;} else {<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Return empty jQuery stack.<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return (jQuery([]));<br />
&nbsp;&nbsp; &nbsp;}<br />
}});<br />
<br />
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/240943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-11-17 13:23 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JQUERY 扩展</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240942.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 17 Nov 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240942.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/240942.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/240942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/240942.html</trackback:ping><description><![CDATA[免得到时再到处查询,把这些链接直接引过来算了,有机会都熟悉了再整理下<br />
一、文件上传类(File upload)<br />
<a href="http://www.phpletter.com/Demo/AjaxFileUpload-Demo/">Ajax File Upload</a><br />
<a href="http://www.pixeline.be/experiments/jqUploader/">jQUploader</a>.<br />
<a href="http://www.fyneworks.com/jquery/multiple-file-upload/">Multiple File Upload plugin</a>.<br />
<a href="http://www.appelsiini.net/projects/filestyle">jQuery File Style</a>.<br />
<a href="http://jquery.com/plugins/project/InputFileCSS">Styling an input type file</a>.<br />
<a href="http://digitalbush.com/projects/progress-bar-plugin">Progress Bar Plugin</a>.<br />
二、表单验证(Form Validation)<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery Validation</a>.<br />
<a href="http://www.dyve.net/jquery/?autohelp">Auto Help</a>.<br />
<a href="http://www.willjessup.com/sandbox/jquery/form_validator/form_validate.html">Simple jQuery form validation</a>.<br />
<a href="http://letmehaveblog.blogspot.com/2007/08/easy-client-side-web-forms-validations.html">jQuery XAV - form validations</a>.<br />
<a href="http://itgroup.com.ph/alphanumeric/">jQuery AlphaNumeric</a>.<br />
<a href="http://digitalbush.com/projects/masked-input-plugin">Masked Input</a>.<br />
<a href="http://www.dennydotnet.com/post/TypeWatch-jQuery-Plugin.aspx">TypeWatch Plugin</a>.<br />
<a href="http://jquery.com/plugins/project/TextLimiter">Text limiter for form fields</a>.<br />
<a href="http://www.shawngo.com/gafyd/index.html">Ajax Username Check with jQuery</a>.<br />
三、表单－选取框(Form - Select Box stuff)<br />
<a href="http://jquery.sanchezsalvador.com/page/jquerycombobox.aspx">jQuery Combobox</a>.<br />
<a href="http://www.ajaxray.com/blog/2007/11/08/jquery-controlled-dependent-or-cascading-select-list-2/">jQuery controlled dependent (or Cascadign) Select List</a>.<br />
<a href="http://code.google.com/p/jqmultiselects/">Multiple Selects</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/select/">Select box manipulation</a>.<br />
<a href="http://code.google.com/p/jqueryselectcombo/">Select Combo Plugin</a>.<br />
<a href="http://www.msxhost.com/jquery/linked-selects/json/%20target=">jQuery - LinkedSelect</a><br />
<a href="http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/">Auto-populate multiple select boxes</a>.<br />
<a href="http://www.sitespotting.it/esempi/002/">Choose Plugin (Select Replacement)</a>.<br />
四、表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)<br />
<a href="http://www.malsup.com/jquery/form/">jQuery Form Plugin</a>.<br />
<a href="http://code.handlino.com/wiki/jquery-form">jQuery-Form</a>.<br />
<a href="http://envero.org/jlook/">jLook Nice Forms</a>.<br />
<a href="http://www.whitespace-creative.com/jquery/jNice/">jNice</a>.<br />
<a href="http://www.brainfault.com/2007/07/07/pin-plugin-reloaded/">Ping Plugin</a>.<br />
<a href="http://grzegorz.frydrychowicz.net/jquery_toggleformtext/">Toggle Form Text</a>.<br />
<a href="http://thoughts.kuzemchak.net/entry/toggleval-for-jquery/">ToggleVal</a>.<br />
<a href="http://www.pengoworks.com/workshop/jquery/field.plugin.htm">jQuery Field Plugin</a>.<br />
<a href="http://code.befruit.com/">jQuery Form&#8217;n Field plugin</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/checkboxes/">jQuery Checkbox manipulation</a>.<br />
<a href="http://www.alcoholwang.cn/jquery/jTaggingDemo.htm">jTagging</a>.<br />
<a href="http://code.google.com/p/labelcheck/">jQuery labelcheck</a>.<br />
<a href="http://scott.sauyet.com/thoughts/archives/2007/03/31/overlabel-with-jquery/">Overlabel</a>.<br />
<a href="http://blog.amicoimmaginario.it/2007/08/28/jquery-plugin-3-state-radio-buttons/">3 state radio buttons</a>.<br />
<a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/">ShiftCheckbox jQuery Plugin</a>.<br />
<a href="http://digitalbush.com/projects/watermark-input-plugin">Watermark Input</a>.<br />
<a href="http://kawika.org/jquery/checkbox/">jQuery Checkbox (checkboxes with imags)</a>.<br />
<a href="http://www.softwareunity.com/sandbox/jqueryspinbtn/">jQuery SpinButton Control</a>.<br />
<a href="http://www.phpletter.com/form_builder/demo.html">jQuery Ajax Form Builder</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/focusfields/">jQuery Focus Fields</a>.<br />
<a href="http://home.iprimus.com.au/kbwood/jquery/timeEntry.html">jQuery Time Entry</a>.<br />
五、时间、日期和颜色选取(Time, Date and Color Picker)<br />
<a href="http://marcgrabanski.com/code/ui-datepicker/">jQuery UI Datepicker</a>.<br />
<a href="http://kelvinluck.com/assets/jquery/datePicker/">jQuery date picker plugin</a>.<br />
<a href="http://code.google.com/p/jquery-timepicker/">jQuery Time Picker</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/timepicker/">Time Picker</a>.<br />
<a href="http://www.oakcitygraphics.com/jquery/clockpick/ClockPick.cfm">ClickPick</a>.<br />
<a href="http://labs.perifer.se/timedatepicker/">TimePicker</a>.<br />
<a href="http://acko.net/dev/farbtastic">Farbtastic jQuery Color Picker Plugin</a>.<br />
<a href="http://www.intelliance.fr/jquery/color_picker/">Color Picker by intelliance.fr</a>.<br />
六、投票插件(Rating Plugins)<br />
<a href="http://www.phpletter.com/Demo/Jquery-Star-Rating-Plugin/#">jQuery Star Rating Plugin</a>.<br />
<a href="http://www.m3nt0r.de/devel/raterDemo/">jQuery Star Rater</a>.<br />
<a href="http://riderdesign.com/articles/displayarticle.aspx?articleid=21">Content rater with asp.net, ajax and jQuery</a>.<br />
<a href="http://www.learningjquery.com/2007/05/half-star-rating-plugin">Half-Star Rating Plugin</a>.<br />
七、搜索插件(Search Plugins)<br />
<a href="http://www.vulgarisoip.com/2007/08/06/jquerysuggest-11/">jQuery Suggest</a>.<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">jQuery Autocomplete</a>.<br />
<a href="http://www.pengoworks.com/workshop/jquery/autocomplete.htm">jQuery Autocomplete Mod</a>.<br />
<a href="http://www.ajaxdaddy.com/demo-jquery-autocomplete.html">jQuery Autocomplete by AjaxDaddy</a>.<br />
<a href="http://dev.reach1to1.net/saurabh/jplugins/autocomplete/">jQuery Autocomplete Plugin with HTML formatting</a>.<br />
<a href="http://interface.eyecon.ro/docs/autocomplete">jQuery Autocompleter</a>.<br />
<a href="http://nodstrum.com/2007/09/19/autocompleter/">AutoCompleter (Tutorial with PHP&amp;MySQL)</a>.<br />
<a href="http://rikrikrik.com/jquery/quicksearch/">quick Search jQuery Plugin</a>.<br />
八、编辑器(Inline Edit &amp; Editors)<br />
<a href="http://www.jaysalvat.com/jquery/jtageditor/">jTagEditor</a>.<br />
<a href="http://demo.wymeditor.org/demo.html">WYMeditor</a>.<br />
<a href="http://garage.pimentech.net/scripts_doc_jquery_jframe/">jQuery jFrame</a>.<br />
<a href="http://www.appelsiini.net/projects/jeditable">Jeditable - edit in place plugin for jQuery</a>.<br />
<a href="http://www.dyve.net/jquery/?editable">jQuery editable</a>.<br />
<a href="http://www.jdempster.com/category/jquery/disableTextSelect/">jQuery Disable Text Select Plugin</a>.<br />
<a href="http://15daysofjquery.com/edit-in-place-with-ajax-using-jquery-%20-library/15/">Edit in Place with Ajax using jQuery</a>.<br />
<a href="http://davehauenstein.com/blog/archives/28">jQuery Plugin - Another In-Place Editor</a>.<br />
<a href="http://dev.iceburg.net/jquery/tableEditor/demo.php">TableEditor</a>.<br />
<a href="http://joshhundley.com/teditable-in-place-editing-for-tables/">tEditable - in place table editing for jQuery</a>.<br />
九、多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)<br />
<a href="http://www.contentwithstructure.com/extras/jmedia">jMedia - accessible multi-media embedding</a>.<br />
<a href="http://sourceforge.net/projects/jbedit/">JBEdit - Ajax online Video Editor</a>.<br />
<a href="http://www.sean-o.com/jquery/jmp3/">jQuery MP3 Plugin</a>.<br />
<a href="http://malsup.com/jquery/media/">jQuery Media Plugin</a>.<br />
<a href="http://jquery.lukelutman.com/plugins/flash/index.html">jQuery Flash Plugin</a>.<br />
<a href="http://www.solitude.dk/archives/embedquicktime/">Embed QuickTime</a>.<br />
<a href="http://keith-wood.name/svg.html">SVG Integration</a>.<br />
十、图片(Photos/Images/Galleries)<br />
<a href="http://jquery.com/demo/thickbox/">ThickBox</a>.<br />
<a href="http://leandrovieira.com/projects/jquery/lightbox/">jQuery lightBox plugin</a>.<br />
<a href="http://blog.joshuaeichorn.com/archives/2007/01/11/jquery-image-strip/">jQuery Image Strip</a>.<br />
<a href="http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html">jQuery slideViewer</a>.<br />
<a href="http://benjaminsterling.com/2007/09/09/jquery-jqgalscroll-photo-gallery/">jQuery jqGalScroll 2.0</a>.<br />
<a href="http://benjaminsterling.com/2007/10/02/jquery-jqgalviewii-photo-gallery/">jQuery - jqGalViewII</a>.<br />
<a href="http://benjaminsterling.com/2007/10/21/jqgalviewiii-proof-of-concept/">jQuery - jqGalViewIII</a>.<br />
<a href="http://opiefoto.com/articles/photoslider">jQuery Photo Slider</a>.<br />
<a href="http://joanpiedra.com/jquery/thumbs/">jQuery Thumbs - easily create thumbnails</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/jQIR/">jQuery jQIR Image Replacement</a>.<br />
<a href="http://www.gmarwaha.com/jquery/jcarousellite/index.php#what">jCarousel Lite</a>.<br />
<a href="http://projects.sevir.org/storage/jpanview/index.html">jQPanView</a>.<br />
<a href="http://sorgalla.com/projects/jcarousel/#Examples">jCarousel</a>.<br />
<a href="http://www.intelliance.fr/jquery/imagebox/">Interface Imagebox</a>.<br />
<a href="http://www.getintothis.com/blog/2006/10/12/image-gallery-using-jquery-interface-reflections/">Image Gallery using jQuery, Interface &amp; Reflactions</a>.<br />
<a href="http://realazy.org/lab/jquery/j-gallery/">simple jQuery Gallery</a>.<br />
<a href="http://chicagosocial.com/gallery/">jQuery Gallery Module</a>.<br />
<a href="http://www.eogallery.com/">EO Gallery</a>.<br />
<a href="http://flesler.blogspot.com/search/label/jQuery.ScrollShow">jQuery ScrollShow</a>.<br />
<a href="http://www.malsup.com/jquery/cycle/">jQuery Cycle Plugin</a>.<br />
<a href="http://www.projectatomic.com/en/flickr.htm">jQuery Flickr</a>.<br />
<a href="http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin">jQuery Lazy Load Images Plugin</a>.<br />
<a href="http://www.sunsean.com/zoomi/">Zoomi - Zoomable Thumbnails</a>.<br />
<a href="http://remysharp.com/2007/03/19/a-few-more-jquery-plugins-crop-labelover-and-pluck/#crop">jQuery Crop - crop any image on the fly</a>.<br />
<a href="http://jquery.com/plugins/project/reflection">Image Reflection</a>.<br />
十一、Google地图（Google Map）<br />
<a href="http://www.dyve.net/jquery/?googlemaps">jQuery Plugin googlemaps</a>.<br />
<a href="http://code.google.com/p/jmaps/">jMaps jQuery Maps Framework</a>.<br />
<a href="http://projects.sevir.org/storage/jqmaps/index.html">jQmaps</a>.<br />
<a href="http://olbertz.de/jquery/googlemap.html#">jQuery &amp; Google Maps</a>.<br />
<a href="http://snippets.dzone.com/posts/show/4361">jQuery Maps Interface forr Google and Yahoo maps</a>.<br />
<a href="http://webrocket.ulmb.com/jmaps/">jQuery J Maps - by Tane Piper</a>.<br />
十二、游戏(Games)<br />
<a href="http://fmarcia.info/jquery/tetris/tetris.html">Tetris with jQuery</a>.<br />
<a href="http://64squar.es/">jQuery Chess</a>.<br />
<a href="http://www.bennadel.com/blog/623-jQuery-Demo-Mad-Libs-Word-Game.htm">Mad Libs Word Game</a>.<br />
<a href="http://www.alexatnet.com/node/68">jQuery Puzzle</a>.<br />
<a href="http://www.willjessup.com/sandbox/jquery/solar_system/rotator.html">jQuery Solar System (not a game but awesome jQuery Stuff)</a>.<br />
十三、表格等(Tables, Grids etc.)<br />
<a href="http://docs.jquery.com/Plugins/Tablesorter">UI/Tablesorter</a>.<br />
<a href="http://www.reconstrukt.com/ingrid/">jQuery ingrid</a>.<br />
<a href="http://www.trirand.com/blog/?p=13">jQuery Grid Plugin</a>.<br />
<a href="http://ideamill.synaptrixgroup.com/jquery/tablefilter/tabletest.htm">Table Filter - awesome!</a>.<br />
<a href="http://dev.iceburg.net/jquery/tableEditor/demo.php">TableEditor</a>.<br />
<a href="http://www.hanpau.com/jquery/unobtrusivetreetable.php">jQuery Tree Tables</a>.<br />
<a href="http://www.javascripttoolbox.com/jquery/#expandablerows">Expandable &#8220;Detail&#8221; Table Rows</a>.<br />
<a href="http://www.remotesynthesis.com/blog/index.cfm/2007/9/25/Sortable-Table-ColdFusion-Custom-Tag-with-jQueryUI">Sortable Table ColdFusion Costum Tag with jQuery UI</a>.<br />
<a href="http://flesler.blogspot.com/2007/10/jquerybubble.html">jQuery Bubble</a>.<br />
<a href="http://tablesorter.com/docs/">TableSorter</a>.<br />
<a href="http://www.webtoolkit.info/demo/jquery/scrollable/demo.html">Scrollable HTML Table</a>.<br />
<a href="http://p.sohei.org/stuff/jquery/columnmanager/demo/demo.html">jQuery column Manager Plugin</a>.<br />
<a href="http://p.sohei.org/stuff/jquery/tablehover/demo/demo.html">jQuery tableHover Plugin</a>.<br />
<a href="http://p.sohei.org/stuff/jquery/columnhover/demo/demo.html">jQuery columnHover Plugin</a>.<br />
<a href="http://makoomba.altervista.org/grid/">jQuery Grid</a>.<br />
<a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">TableSorter plugin for jQuery</a>.<br />
<a href="http://joshhundley.com/teditable-in-place-editing-for-tables/">tEditable - in place table editing for jQuery</a>.<br />
<a href="http://www.hovinne.com/dev/jquery/chartotable/">jQuery charToTable Plugin</a>.<br />
<a href="http://www.ita.es/jquery/jquery.grid.columnSizing.htm">jQuery Grid Column Sizing</a>.<br />
<a href="http://www.ita.es/jquery/jquery.grid.rowSizing.htm">jQuery Grid Row Sizing</a>.<br />
十四、统计图(Charts, Presentation etc.)<br />
<a href="http://worcesterwideweb.com/2007/06/04/jquery-wizard-plugin/">jQuery Wizard Plugin </a>.<br />
<a href="http://www.reach1to1.com/sandbox/jquery/jqchart/">jQuery Chart Plugin</a>.<br />
<a href="http://ejohn.org/apps/speed/">Bar Chart</a>.<br />
十五、边框、圆角、背景(Border, Corners, Background)<br />
<a href="http://www.malsup.com/jquery/corner/">jQuery Corner</a>.<br />
<a href="http://blue-anvil.com/archives/anti-aliased-rounded-corners-with-jquery">jQuery Curvy Corner</a>.<br />
<a href="http://dev.jquery.com/%7Epaul/plugins/nifty/example.html">Nifty jQuery Corner</a>.<br />
<a href="http://illandril.net/jQuery/transparentCorners/">Transparent Corners</a>.<br />
<a href="http://www.methvin.com/jquery/jq-corner.html">jQuery Corner Gallery</a>.<br />
<a href="http://blog.brandonaaron.net/my-jquery-plugins/gradient/">Gradient Plugin</a>.<br />
十六、文字和超链接(Text and Links)<br />
<a href="http://wanderinghorse.net/computing/%20/jquery/spoilers/demo.html">jQuery Spoiler plugin</a>.<br />
<a href="http://johannburkard.de/blog/programming/%20/highlight-%20-text-higlighting-jquery-plugin.html">Text Highlighting</a>.<br />
<a href="http://www.jdempster.com/category/jquery/disableTextSelect/">Disable Text Select Plugin</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/newsticker/">jQuery Newsticker</a>.<br />
<a href="http://www.ollicle.com/2007/jun/03/jquery_lineheight_flexible.html">Auto line-height Plugin</a>.<br />
<a href="http://agencenp.net/textgrad/textgrad.html">Textgrad - a text gradient plugin</a>.<br />
<a href="http://kawika.org/jquery/linklook/">LinkLook - a link thumbnail preview</a>.<br />
<a href="http://rikrikrik.com/jquery/pager/#examples">pager jQuery Plugin</a>.<br />
<a href="http://rikrikrik.com/jquery/shortkeys/">shortKeys jQuery Plugin</a>.<br />
<a href="http://www.ollicle.com/eg/jquery/biggerlink">jQuery Biggerlink</a>.<br />
<a href="http://troy.dyle.net/linkchecker/">jQuery Ajax Link Checker</a>.<br />
十七、鼠标提示（Tooltips）<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/">jQuery Plugin - Tooltip</a>.<br />
<a href="http://www.codylindley.com/blogstuff/js/jtip/">jTip - The jQuery Tool Tip</a>.<br />
<a href="http://examples.learningjquery.com/62/demo/index.html#examplesection">clueTip</a>.<br />
<a href="http://edgarverle.com/BetterTip/default.cfm">BetterTip</a>.<br />
<a href="http://ioreader.com/2007/05/15/flash-tooltips-using-jquery/">Flash Tooltips using jQuery</a>.<br />
<a href="http://www.texotela.co.uk/code/jquery/tooltipdemo/">ToolTip</a>.<br />
十八、菜单和导航(Menus, Navigations)<br />
<a href="http://stilbuero.de/jquery/tabs_3/">jQuery Tabs Plugin - awesome! </a>. [<a href="http://stilbuero.de/jquery/tabs_3/nested.html">demo nested tabs</a>.]<br />
<a href="http://blog.cutterscrossing.com/index.cfm/2007/6/15/Updated-JQuery-Nested-Tab-Set-with-Demo">another jQuery nested Tab Set example (based on jQuery Tabs Plugin)</a>.<br />
<a href="http://www.sunsean.com/idTabs/">jQuery idTabs</a>.<br />
<a href="http://jdsharp.us/jQuery/plugins/jdMenu/">jdMenu - Hierarchical Menu Plugin for jQuery</a>.<br />
<a href="http://be.twixt.us/jquery/suckerFish.php">jQuery SuckerFish Style</a>.<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Plugin Treeview</a>.<br />
<a href="http://be.twixt.us/jquery/treeView.php">treeView Basic</a>.<br />
<a href="http://labs.activespotlight.net/jQuery/menu_demo.html">FastFind Menu</a>.<br />
<a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/">Sliding Menu</a>.<br />
<a href="http://gmarwaha.com/blog/?p=7">Lava Lamp jQuery Menu</a>.<br />
<a href="http://icon.cat/wiki/IconDock_En#iconDock_jQuery_Plugin">jQuery iconDock</a>.<br />
<a href="http://cherne.net/brian/resources/jquery.variations.html">jVariations Control Panel</a>.<br />
<a href="http://www.trendskitchens.co.nz/jquery/contextmenu/">ContextMenu plugin</a>.<br />
<a href="http://p.sohei.org/jquery-plugins/clickmenu/">clickMenu</a>.<br />
<a href="http://www.ndesign-studio.com/blog/mac/css-dock-menu">CSS Dock Menu</a>.<br />
<a href="http://webexpose.org/2006/12/28/jquery-pop-up-menu-tutorial/">jQuery Pop-up Menu Tutorial</a>.<br />
<a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/">Sliding Menu</a>.<br />
<a title="http://stilbuero.de/jquery/tabs_3/" href="http://stilbuero.de/jquery/tabs_3/">http://stilbuero.de/jquery/tabs_3/</a><br />
十九、幻灯、翻转等(Accordions, Slide and Toggle stuff)<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-accordion/">jQuery Plugin Accordion</a>.<br />
<a href="http://fmarcia.info/jquery/accordion.html">jQuery Accordion Plugin Horizontal Way</a>.<br />
<a href="http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html">haccordion - a simple horizontal accordion plugin for jQuery</a>.<br />
<a href="http://dev.portalzine.de/index?/Horizontal_Accordion--print">Horizontal Accordion by portalzine.de</a>.<br />
<a href="http://berndmatzner.de/jquery/hoveraccordion/">HoverAccordion</a>.<br />
<a href="http://fmarcia.info/jquery/accordion.html">Accordion Example from fmarcia.info</a>.<br />
<a href="http://blog.evaria.com/wp-content/themes/blogvaria/jquery/index.php">jQuery Accordion Example</a>.<br />
<a href="http://jquery.com/files/demo/dl-done.html">jQuery Demo - Expandable Sidebar Menu</a>.<br />
<a href="http://www.andreacfm.com/examples/jQpanels/">Sliding Panels for jQuery</a>.<br />
<a href="http://jquery.andreaseberhard.de/toggleElements/">jQuery ToggleElements</a>.<br />
<a href="http://www.ndoherty.com/demos/coda-slider/">Coda Slider</a>.<br />
<a href="http://sorgalla.com/projects/jcarousel/#Examples">jCarousel</a>.<br />
<a href="http://www.reindel.com/accessible_news_slider/">Accesible News Slider Plugin</a>.<br />
<a href="http://icant.co.uk/sandbox/jquerycodeview/">Showing and Hiding code Examples</a>.<br />
<a href="http://gsgd.co.uk/sandbox/jquery/easing/">jQuery Easing Plugin</a>.<br />
<a href="http://sonspring.com/journal/jquery-portlets">jQuery Portlets</a>.<br />
<a href="http://jdsharp.us/jQuery/plugins/AutoScroll/">AutoScroll</a>.<br />
<a href="http://medienfreunde.com/lab/innerfade/">Innerfade</a>.<br />
二十、拖放插件(Drag and Drop)<br />
<a href="http://docs.jquery.com/UI/Draggables">UI/Draggables</a>.<br />
<a href="http://fromvega.com/wordpress/2007/07/14/easydrag-jquery-plugin/">EasyDrag jQuery Plugin</a>.<br />
<a href="http://sonspring.com/journal/jquery-portlets">jQuery Portlets</a>.<br />
<a href="http://dev.iceburg.net/jquery/jqDnR/">jqDnR - drag, drop resize</a>.<br />
<a href="http://interface.eyecon.ro/demos/drag.html">Drag Demos</a>.<br />
二十一、XML XSL JSON Feeds<br />
<a href="http://www.jongma.org/webtools/jquery/xslt/">XSLT Plugin</a>.<br />
<a href="http://cgaskell.wordpress.com/2006/11/02/jquery-ajax-call-and-result-xml-parsing/">jQuery Ajax call and result XML parsing</a>.<br />
<a href="http://jquery.com/plugins/project/xmlObjectifier">xmlObjectifier - Converts XML DOM to JSON</a>.<br />
<a href="http://jquery.glyphix.com/">jQuery XSL Transform</a>.<br />
<a href="http://malsup.com/jquery/taconite/">jQuery Taconite - multiple Dom updates</a>.<br />
<a href="http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin">RSS/ATOM Feed Parser Plugin</a>.<br />
<a href="http://www.malsup.com/jquery/gfeed/">jQuery Google Feed Plugin</a>.<br />
二十二、浏览器(Browserstuff)<br />
<a href="http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/">Wresize - IE Resize event Fix Plugin</a>.<br />
<a href="http://jquery.khurshid.com/ifixpng.php">jQuery ifixpng</a>.<br />
<a href="http://jquery.andreaseberhard.de/pngFix/">jQuery pngFix</a>.<br />
<a href="http://www.crismancich.de/jquery/plugins/linkscrubber/">Link Scrubber - removes the dotted line onfocus from links</a>.<br />
<a href="http://www.matthewjrichards.co.uk/articles/2007/06/25/jquery-perciformes-the-entire-suckerfish-familly-under-one-roof">jQuery Perciformes - the entire suckerfish familly under one roof</a>.<br />
<a href="http://blog.brandonaaron.net/my-jquery-plugins/background-iframe/">Background Iframe</a>.<br />
<a href="http://jquery.com/plugins/project/QinIE">QinIE - for proper display of Q tags in IE</a>.<br />
<a href="http://webrocket.ulmb.com/ability/">jQuery Accessibility Plugin</a>.<br />
<a href="http://www.ogonek.net/mousewheel/jquery-demo.html">jQuery MouseWheel Plugin</a>.<br />
二十三、对话框、确认窗口(Alert, Prompt, Confirm Windows)<br />
<a href="http://trentrichardson.com/Impromptu/">jQuery Impromptu</a>.<font color="#ff0000">[注:很值得使用]</font><br />
<a href="http://nadiaspot.com/jquery/confirm">jQuery Confirm Plugin</a>.<br />
<a href="http://dev.iceburg.net/jquery/jqModal/">jqModal</a>.<br />
<a href="http://www.ericmmartin.com/projects/simplemodal/">SimpleModal</a>.<font color="#ff0000">[注:很值得使用]</font><br />
二十四、CSS<br />
<a href="http://www.kelvinluck.com/article/switch-stylesheets-with-jquery">jQuery Style Switcher</a>.<br />
<a href="http://andykent.bingodisk.com/bingo/public/jss/">JSS - Javascript StyleSheets</a>.<br />
<a href="http://flesler.blogspot.com/2007/11/jqueryrule.html">jQuery Rule - creation/manipulation of CSS Rules</a>.<br />
<a href="http://www.designerkamal.com/jPrintArea/">jPrintArea</a>.<br />
二十五、DOM、AJAX和其它JQuery插件（DOM, Ajax and other jQuery plugins）<br />
<a href="http://flydom.socianet.com/">FlyDOM</a>.<br />
<a href="http://brandonaaron.net/docs/dimensions/#getting-started">jQuery Dimenion Plugin</a>.<br />
<a href="http://happygiraffe.net/blog/articles/2007/09/26/jquery-logging">jQuery Loggin</a>.<br />
<a href="http://jquery.com/plugins/project/metadata">Metadata - extract metadata from classes, attributes, elements</a>.<br />
<a href="http://johannburkard.de/blog/programming/%20/inc-a-super-tiny-client-side-include-%20-jquery-plugin.html">Super-tiny Client-Side Include Javascript jQuery Plugin</a>.<br />
<a href="http://humanized.com/weblog/2007/09/14/undo-made-easy-with-ajax-part-1/">Undo Made Easy with Ajax</a>.<br />
<a href="http://www.jasons-toolbox.com/JHeartbeat/">JHeartbeat - periodically poll the server</a>.<br />
<a href="http://www.appelsiini.net/projects/lazyload">Lazy Load Plugin</a>.<br />
<a href="http://blog.brandonaaron.net/2007/08/19/new-plugin-live-query/">Live Query</a>.<br />
<a href="http://jquery.offput.ca/every/">jQuery Timers</a>.<br />
<a href="http://www.joanpiedra.com/jquery/shareit/">jQuery Share it - display social bookmarking icons</a>.<br />
<a href="http://www.jdempster.com/category/code/jquery/cookiejar/">jQuery serverCookieJar</a>.<br />
<a href="http://ideamill.synaptrixgroup.com/?p=3">jQuery autoSave</a>.<br />
<a href="http://www.semicomplete.com/blog/geekery/jquery-interface-puffer.html">jQuery Puffer</a>.<br />
<a href="http://33rockers.com/jquery/iframe-demo/">jQuery iFrame Plugin</a>.<br />
<a href="http://www.stilbuero.de/2006/09/17/%20-plugin-for-jquery/">Cookie Plugin for jQuery</a>.<br />
<a href="http://leftlogic.com/lounge/articles/jquery_spy2">jQuery Spy - awesome plugin</a>.<br />
<a href="http://www.learningjquery.com/2007/01/effect-delay-trick">Effect Delay Trick</a>.<br />
<a href="http://jquick.sullof.com/jquick/">jQuick - a quick tag creator for jQuery</a>.<a href="http://noteslog.com/post/metaobjects-11-released-today/"><br />
Metaobjects</a>.<br />
<a href="http://www.thunderguy.com/semicolon/2007/08/14/elementready-jquery-plugin/">elementReady</a>.
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/240942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-11-17 13:20 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/11/17/240942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JavaScript的gzip静态压缩方法 </title><link>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190693.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 03 Apr 2008 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190693.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/190693.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/190693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/190693.html</trackback:ping><description><![CDATA[<p>传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意,幸亏现在的浏览器都支持压缩传输(通过设置http header的Content-Encoding=gzip),可以通过服务器的配置(如apache)为你的js提供压缩传输,或是appfuse中使用的GZipFilter使tomcat也提供这种能力</p>
<p>现在的问题是这种动态的压缩会导致CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将js预先通过gzip.exe压缩好)</p>
<p>一.下面描述在tomcat中的应用</p>
<p>1.将prototype.js通过gzip.exe压缩保存成prototype.gzjs<br />
2.设置header,我编写了一个简单的AddHeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip<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: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;web.xml中的配置<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">AddHeaderFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;badqiu.web.filter.AddHeaderFilter<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">headers</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Content-Encoding=gzip</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">AddHeaderFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.gzjs</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
<p>测试prototype是否正常的代码 </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: #008080">&nbsp;1</span>&nbsp;<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">&nbsp;2</span>&nbsp;<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">&nbsp;3</span>&nbsp;<span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;type="text/javascript"不可少,有些浏览器缺少这个不能运行,具体已经忘记了&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="prototype.gzjs"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text/javascript"</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 />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<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">&nbsp;6</span>&nbsp;<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">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="badqiu"</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="email"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="badqiu@gmail.com"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;!--</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;测试prototype的方法是否正常</span><span style="color: #000000; background-color: #f5f5f5">--&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;alert($F('username'))<br />
</span><span style="color: #008080">12</span>&nbsp;<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">13</span>&nbsp;<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">14</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
在Apache httpd中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header</p>
<p>二.相关压缩率数据<br />
1. prototype.js 1.5.0_rc0原始大小56KB,未经任何处理直接使用gzip压缩为12KB,总压缩率79%<br />
2. 通过js压缩工具压缩过的protytype.js为20KB,使用gzip压缩为10KB,总压缩率为83%<br />
3. 实际项目中的多个js合并成的文件 439KB,直接通过gzip压缩为85KB,总压缩率81%<br />
4. 439KB经过js压缩为165KB,再经过gzip压缩为65KB,总压缩率86%<br />
基本上你都可以忽略js压缩工具的压缩率,直接使用gzip压缩</p>
<p>gzip下载地址 <a href="http://www.gzip.org/">http://www.gzip.org</a><br />
tomcat的压缩配置示例下载地址: <span class="nobr"><strong><font color="#003366"><a href="http://www.blogjava.net/Files/badqiu/gziptest.rar">http://www.blogjava.net/Files/badqiu/gziptest.rar</a><br />
</font></strong></span></p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/190693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-04-03 19:57 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Ext的Js太大的问题研究解决</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190691.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 03 Apr 2008 11:51:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190691.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/190691.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190691.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/190691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/190691.html</trackback:ping><description><![CDATA[久别大家一年了，其实这一年我从简单实现了一个Yui-Ext0.33项目后，基本没有在Ajax表现层花太多的时间，而是转向研究Jbpm和WebService在项目中的应用，而且大半年前Ext推出1.0版本，感觉在项目中升级使用还不够成熟，所以在项目中继续应用小巧的0.33版，基本满足需要。 <br />
<br />
由于现在项目越来越大，而且Ext2已经推出，界面实在充满诱惑，相信商业化的Ext2将更适合项目开发，所以现在对Ext2一些关键问题进行研究，首当其冲要解决的就是ext-all.js(512K)太大的问题。 <br />
<br />
针对js包太大的问题，有两个现在比较流行的解决方案： <br />
1. 使用jsbuild等工具把需要调用的js重新包装，此方法的缺点是Ext用的最多的是form和grid等控件，删减后包容量减少不明显，而且我是打包了几次失败，就没耐心了，当然，要做到最好调优，这个方案是要考虑的，基本方法就是页面调用核心的ext-core.js，然后再把页面要用的包自己包装。 <br />
<br />
2. 使用gzip在服务器端牺牲一点cpu资源进行压缩，有效减低传输流量，由浏览器解压处理后执行。这个解决方案另我眼前一亮，其实也不是什么新东西，2005年的老东西了，只是当时没有想到js会如此庞大，但现在老技术还是很实用的。下面将重点研究这个解决方案。 <br />
<br />
第一步，在web.xml增加一个gzipfilter，不用自己写，有现成的，到地址：<a href="http://sourceforge.net/projects/filterlib" target="_blank">http://sourceforge.net/projects/filterlib</a>下载，新建一个测试项目，最简单就在index.jsp直接调用ext-all.js，把tk-filters.jar拷贝到项目的lib目录，然后在web.xml加入： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.javaeye.com/post/490653#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif" _counted="undefined" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>&lt;filter&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;CompressingFilter&lt;/filter-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-</span><span class="keyword">class</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.tacitknowledge.filters.gzipfilter.GZIPFilter &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filter-</span><span class="keyword">class</span><span>&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&lt;/filter&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;这里按自己许多针对不同文件进行filter-mapping配置，比如*.css&nbsp;--&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;filter-mapping&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;CompressingFilter&lt;/filter-name&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;*.js&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/filter-mapping&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="java" style="display: none" name="code">	&lt;filter&gt;
&lt;filter-name&gt;CompressingFilter&lt;/filter-name&gt;
&lt;filter-class&gt;
com.tacitknowledge.filters.gzipfilter.GZIPFilter
&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;!-- 这里按自己许多针对不同文件进行filter-mapping配置，比如*.css --&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;CompressingFilter&lt;/filter-name&gt;
&lt;url-pattern&gt;*.js&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;</pre>
<br />
<br />
第二步，调试，调试js现在发现最好的工具应该是FireFox+firebug(插件),FireFox我用1.5版本，调试足够了，我使用Weblogic作调试服务器，tomcat也可以，但我的tomcat在server.xml直接配置gzip压缩功能，所以用weblogic免得测试不出来。启动项目后，用Firefox打开index.jsp页面，页面调出后可能会有脚本错误，但可以不管，关键看文件的大小，打开工具-&gt;firebug-&gt;open firebug,寻找net项，即可看到调用的ext-all.js的压缩效果，如附图的比较，效果不错吧，512K =&gt; 137K，如果发现js压缩没效果，注意打开工具-&gt;清除私隐数据，清掉可能存在的cache，再刷新页面重试。 <br />
<br />
第三步，压力测试，我使用loadrunner7.8测试，简单实用，没有8.0以上版本的华丽和慢。使用1000个进程测试，发现了意外的结果(见附图)，在本机测试，不用gzip压缩只用了36秒，而使用gzip压缩后则是1分49秒，流量在压缩后从1,315,914,600降到313，125，680，流量随着文件的压缩而减少，效果也很明显，查其原因，应该是因为压缩和解压对服务器和浏览器的资源消耗，而且是在本机测试，本机排除了带宽的影响，所以压缩前性能反而高了。 <br />
<br />
由于我研究的时间不长，在压力测试方面还没在实际项目中测试，不能一概而论，初步分析，如果是局域网项目，带宽不受限制，不使用压缩性能会好点，而对于互联网环境则要考虑压缩方案，也希望有兴趣的开发者共同研究一下这个解决方案在实际项目中的可行性，希望大家讨论。
<div class="attachments">
<ul>
    <li><a href="http://www.javaeye.com/topics/download/37a8d707-44d1-369f-b393-0564db55c4a4" target="_blank"><img class="magplus" title="点击查看原始大小图片" alt="37a8d707-44d1-369f-b393-0564db55c4a4-thumb" src="http://www.javaeye.com/upload/attachment/17020/37a8d707-44d1-369f-b393-0564db55c4a4-thumb.jpg?1205438818" /></a>
    <li>描述:
    <li>大小: 50.7 KB
    <li>查看次数: 58 </li>
</ul>
<ul>
    <li><a href="http://www.javaeye.com/topics/download/73e56e32-afb4-33a5-82bc-5bfaa57aa328" target="_blank"><img class="magplus" title="点击查看原始大小图片" alt="73e56e32-afb4-33a5-82bc-5bfaa57aa328-thumb" src="http://www.javaeye.com/upload/attachment/17022/73e56e32-afb4-33a5-82bc-5bfaa57aa328-thumb.jpg?1205438819" /></a>
    <li>描述:
    <li>大小: 76.8 KB
    <li>查看次数: 36 </li>
</ul>
<ul>
    <li><a href="http://www.javaeye.com/topics/download/1d6c71a8-0f87-351e-9a37-2bd5a292264c" target="_blank"><img class="magplus" title="点击查看原始大小图片" alt="1d6c71a8-0f87-351e-9a37-2bd5a292264c-thumb" src="http://www.javaeye.com/upload/attachment/17024/1d6c71a8-0f87-351e-9a37-2bd5a292264c-thumb.jpg?1205438819" /></a>
    <li>描述:
    <li>大小: 75.5 KB
    <li>查看次数: 26 </li>
</ul>
</div>
<div id="topic_copyright">&nbsp;</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/190691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-04-03 19:51 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/04/03/190691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Javascript XSLT 处理XML文件（支持Firefox）</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/03/26/188691.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 26 Mar 2008 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/03/26/188691.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/188691.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/03/26/188691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/188691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/188691.html</trackback:ping><description><![CDATA[<div>最近使用Firefox进行网页的调试,发现有些Javascript&nbsp;XSLT处理XML的语句仅仅支持IE浏览器。而网络中的一些介绍javascript&nbsp;XSLT&nbsp;处理XML的文章基本上都是依据AJAX来做的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;无奈中,自己写了一个Javascript&nbsp;XSLT处理XML展现页面的小功能。现在帖出来和大家共享，希望大家给点改进意见。<br />
&nbsp;&nbsp;&nbsp;&nbsp;在Firefox中使用XSLTProcessor对象处理XML，主要使用该对象的两个方法：<br />
一、transformToFragment()。<br />
二、transformToDocument()。<br />
&nbsp;&nbsp;&nbsp;&nbsp;下面的代码仅仅使用transformToFragment()方法来实现对XML文件处理,如果你对在Firefox中使用Javascript&nbsp;XSLT&nbsp;处理XML文件感兴趣的话不妨试着将以下代码改写成使用transformToDocument()方法来实现的处理功能。<br />
Javascript&nbsp;代码如下：
<p>&nbsp;</p>
<p>function&nbsp;initialize()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xmlDoc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xslDoc;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;判断浏览器的类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.implementation&nbsp;&amp;&amp;&nbsp;document.implementation.createDocument)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;支持Mozilla浏览器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc&nbsp;=&nbsp;document.implementation.createDocument("",&nbsp;"",&nbsp;null);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.async&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.load("guestbook/guestbook.xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("error:001");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc&nbsp;=&nbsp;document.implementation.createDocument("",&nbsp;"",&nbsp;null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.async&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.load("guestbook/guestbook.xsl");<br />
&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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(e)<br />
&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;alert("error:002");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&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;定义XSLTProcessor对象&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xsltProcessor&nbsp;=&nbsp;new&nbsp;XSLTProcessor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsltProcessor.importStylesheet(xslDoc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;oResultFragment&nbsp;=&nbsp;xsltProcessor.transformToFragment(xmlDoc,document);<br />
&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;var&nbsp;oDiv&nbsp;=&nbsp;document.getElementById("guestbookPanel");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oDiv.appendChild(oResultFragment);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("error:003");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(typeof&nbsp;window.ActiveXObject&nbsp;!=&nbsp;'undefined')<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//var&nbsp;xmlDoc=Server.CreateObject("Msxml2.DOMDocument.4.0");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;支持IE浏览器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc&nbsp;=&nbsp;new&nbsp;ActiveXObject('Microsoft.XMLDOM');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc&nbsp;=&nbsp;new&nbsp;ActiveXObject('Microsoft.XMLDOM');&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.async&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.async&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.load("guestbook/guestbook.xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.load("guestbook/guestbook.xsl");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guestbookPanel.innerHTML&nbsp;=&nbsp;xmlDoc.documentElement.transformNode(xslDoc);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Browser&nbsp;unknown!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>javascript&nbsp;dom&nbsp;处理XSL显示数据的第二种方式。</p>
<p>主要代码如下：</p>
<p>var&nbsp;xmlDoc;<br />
&nbsp;var&nbsp;xslDoc;</p>
<p>&nbsp;//&nbsp;判断浏览器的类型<br />
&nbsp;if(document.implementation&nbsp;&amp;&amp;&nbsp;document.implementation.createDocument)<br />
&nbsp;{&nbsp;&nbsp;<br />
&nbsp;&nbsp;//&nbsp;支持Mozilla浏览器<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;xmlDoc&nbsp;=&nbsp;document.implementation.createDocument("",&nbsp;"",&nbsp;null);&nbsp;<br />
&nbsp;&nbsp;&nbsp;xmlDoc.async&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;xmlDoc.load("guestbook/guestbook.xml");<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;xslDoc&nbsp;=&nbsp;document.implementation.createDocument("",&nbsp;"",&nbsp;null);<br />
&nbsp;&nbsp;&nbsp;xslDoc.async&nbsp;=&nbsp;false;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.load("guestbook/guestbook.xsl");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义XSLTProcessor对象&nbsp;<br />
&nbsp;&nbsp;&nbsp;var&nbsp;xsltProcessor&nbsp;=&nbsp;new&nbsp;XSLTProcessor();<br />
&nbsp;&nbsp;&nbsp;xsltProcessor.importStylesheet(xslDoc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;transformToDocument方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;xsltProcessor.transformToDocument(xmlDoc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xmls&nbsp;=&nbsp;new&nbsp;XMLSerializer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("guestbookPanel").innerHTML&nbsp;=&nbsp;xmls.serializeToString(result);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;alert("Unable&nbsp;to&nbsp;do&nbsp;xml/xsl&nbsp;processing");<br />
&nbsp;&nbsp;}&nbsp;<br />
&nbsp;}<br />
&nbsp;else&nbsp;if(typeof&nbsp;window.ActiveXObject&nbsp;!=&nbsp;'undefined')<br />
&nbsp;{<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//&nbsp;支持IE浏览器<br />
&nbsp;&nbsp;&nbsp;xmlDoc&nbsp;=&nbsp;new&nbsp;ActiveXObject('Msxml2.DOMDocument');<br />
&nbsp;&nbsp;&nbsp;xslDoc&nbsp;=&nbsp;new&nbsp;ActiveXObject('Msxml2.DOMDocument');&nbsp;<br />
&nbsp;&nbsp;&nbsp;xmlDoc.async&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;xslDoc.async&nbsp;=&nbsp;false;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;xmlDoc.load("guestbook/guestbook.xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xslDoc.load("guestbook/guestbook.xsl");<br />
&nbsp;&nbsp;&nbsp;guestbookPanel.innerHTML&nbsp;=&nbsp;xmlDoc.documentElement.transformNode(xslDoc);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;alert("Unable&nbsp;to&nbsp;do&nbsp;xml/xsl&nbsp;processing");<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;else<br />
&nbsp;{<br />
&nbsp;&nbsp;alert("Browser&nbsp;unknown!");<br />
&nbsp;}</p>
</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/188691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-03-26 11:59 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/03/26/188691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个javascript小测试例子 类和json函数</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/02/16/180168.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Sat, 16 Feb 2008 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/02/16/180168.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/180168.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/02/16/180168.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/180168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/180168.html</trackback:ping><description><![CDATA[<p>one.html<br />
</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;title&gt;function this 的使用&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;script type="text/javascript" language="javascript"&gt;<br />
cls=function(data){<br />
&nbsp;this.showA=function (a){<br />
&nbsp;&nbsp;alert(a);<br />
&nbsp;};<br />
&nbsp;//showA('showA');<br />
&nbsp;this.showA("ccc")<br />
&nbsp;function showB(b){<br />
&nbsp;&nbsp;alert(b);<br />
&nbsp;};<br />
&nbsp;showB("ddd")<br />
&nbsp;function showData(data){<br />
&nbsp;&nbsp;alert(data);<br />
&nbsp;};</p>
<p>}<br />
var c=new cls("simone");<br />
c.showA("asmone");<br />
c.showB("tt");<br />
cls.showB("b");<br />
cls.showData("wang");<br />
alert(cls("simone"));<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</p>
<br />
<br />
two.html<br />
<br />
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;title&gt;function : 的使用&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;script type="text/javascript" language="javascript"&gt;<br />
var FN=function(s){<br />
&nbsp;alert('fn');<br />
&nbsp;alert(s);<br />
&nbsp;return{<br />
&nbsp;&nbsp;nopar:function(){alert('nopar')},<br />
&nbsp;&nbsp;onepar:function(p){alert('onepar');alert(p)},<br />
&nbsp;&nbsp;shows:function(){alert(s)},<br />
&nbsp;&nbsp;shows2:function(s){alert(s)}<br />
&nbsp;}<br />
}<br />
fn=new FN('onefn');<br />
fn.nopar();<br />
fn.onepar('ts');<br />
fn.shows();<br />
fn.shows2('tbb');</p>
<p>alert('******************');</p>
<p>var FN2={<br />
&nbsp;one:function(){alert('one')},<br />
&nbsp;two:function(p){alert(p),alert(this)},<br />
&nbsp;three:function(){<br />
&nbsp;&nbsp;this.one();<br />
&nbsp;&nbsp;alert('three');<br />
&nbsp;&nbsp;function in_three(){<br />
&nbsp;&nbsp;&nbsp;alert('in_three');<br />
&nbsp;&nbsp;};<br />
&nbsp;&nbsp;this.this_three=function(){<br />
&nbsp;&nbsp;&nbsp;alert('this_three');<br />
&nbsp;&nbsp;};<br />
&nbsp;}<br />
};<br />
FN2.one();<br />
FN2.two('fn2 two');<br />
FN2.three();<br />
var three2=FN2.three;<br />
alert('########');<br />
var th=new three2();//去掉this.one()这一语句后，可以new成功<br />
th.this_three();<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/180168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-02-16 11:45 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/02/16/180168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/02/15/180114.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 15 Feb 2008 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/02/15/180114.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/180114.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/02/15/180114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/180114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/180114.html</trackback:ping><description><![CDATA[<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">&nbsp;
<div class="bvEntry" id="entrycns!4D0B98F5F0C51177!114" bv:cns="cns!4D0B98F5F0C51177!114" bv:ca="true" bv:cat="计算机与 Internet">
<h4 id="subjcns!4D0B98F5F0C51177!114" style="margin-bottom: 0px">发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser</h4>
<div class="bvMsg" id="msgcns!4D0B98F5F0C51177!114">
<h2>先发一段脚本压缩示例，展示一下JSA语法压缩和优化功能。</h2>
<div>
<ol style="border-right: #444444 2px dotted; border-top: #444444 2px dotted; background: #eeeeee; border-left: #444444 2px dotted; color: #800080; border-bottom: #444444 2px dotted">
    <li><span><span>try</span><span>&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span>//xxxx();</span><span>&nbsp;&nbsp;</span></span>
    <li><span>}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span>catch</span><span>&nbsp;(e)&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;yyyy();&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;f1()&nbsp;{&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span>finally</span><span>&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;zzzz();&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>function&nbsp;f2(var1)&nbsp;{&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;var2&nbsp;=&nbsp;<span>2</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;var3&nbsp;=&nbsp;<span>3</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;withObject&nbsp;=&nbsp;{var2:-<span>2</span><span>}&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;with(withObject){&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(var2);&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;
<p>压缩结果（经过格式化，便于查阅）：
<div>
<ol style="border-right: #444444 2px dotted; border-top: #444444 2px dotted; background: #eeeeee; border-left: #444444 2px dotted; color: #800080; border-bottom: #444444 2px dotted">
    <li><span><span>zzzz();&nbsp;&nbsp;</span></span>
    <li><span>function&nbsp;f2(A)&nbsp;{&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;var2&nbsp;=&nbsp;<span>2</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;B&nbsp;=&nbsp;<span>3</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;C&nbsp;=&nbsp;{var2:-<span>2</span><span>};&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;(C)&nbsp;{&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(var2);&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;
<p>JSA的压缩过程分两步
<p>第一步是语法压缩，类似于Dojo ShrinkSafe，但比他安全，且更加有效。<br />
<br />
第二步是文本压缩，目前采用的是<br />
JavaScript Compressor的压缩算法。<br />
(http://dean.edwards.name/packer/ ) <br />
<br />
这些都可以在设置窗口设置。<br />
默认情况先用语法压缩，当文件大于1000byte且采用文本压缩仍然可以压缩到原来大小90％时才在原来基础上采用文本压缩。<br />
<h3>与其他压缩工具压缩率比较： <br />
</h3>
<p>1. JavaScript Compressor(http:// dean.edwards.name/packer/)&nbsp;<br />
&nbsp;&nbsp;&nbsp; 与他自己的压缩工具代码为例（v2.02） packer压缩后大小为 7,428 字节（去除注释）。 <br />
&nbsp; &nbsp; 而我们的压缩工具可以压缩至7,256 &nbsp;字节 <br />
<strong><font color="#0000ff">&nbsp; &nbsp; </font><font color="#0000ff">7256 / 7428 = 0.9768443726440496 </font></strong><br />
2.Dojo ShrinkSafe （<strong>粗糙的东西，既低效又危险</strong>，建议原有用户赶紧换掉） <br />
&nbsp; &nbsp; 与他自己的框架源代码为例(v0.4.1)： <br />
&nbsp; &nbsp; 他自己压缩大小为149,518 字节,而我们压缩后可以缩小至81,261 字节 <br />
<font color="#ff0000"><strong><font color="#000000">&nbsp; &nbsp; 81261 / 149518 = 0.5434864029748927 </font><br />
</strong></font>
<h3><font color="#000000"><strong>安全性说明：</strong></font></h3>
<h2><font color="#ff00ff"></font></h2>
<p>1.JavaScript Compressor <br />
&nbsp; &nbsp; &nbsp; 基于文本的压缩，我没有细看其中逻辑，但是这种压缩出问题的可能性很低，我们的压缩工具也使用到他的压缩算法，在JSI 1.1 a8 及 <br />
其集成的第三方类库的测试中，未见异常。而且还有知名框架JQuery使用，相信不会有问题。
<p><u><font color="#ff0000">补充（2007-03-12）：今天发现，这个东西在分析JavaScript多行字符串语法时，有bug。不过这个问题在经过JSA语法压缩之后，将不复存在。</font></u><br />
<p><br />
<p><font color="#ff0000">2.Dojo ShrinkSafe </font><font color="#ff0000"><strong>危险！！！！！ </strong></font><br />
&nbsp; &nbsp;使用较短的名字替换掉长的局部变量名，这是一个<font color="#ff0000"><strong>极其不安全</strong></font>的压缩工具，举例说明： <br />
<p>
<div>javascript 代码</div>
<div>
<ol style="border-right: #444444 2px dotted; border-top: #444444 2px dotted; background: #eeeeee; border-left: #444444 2px dotted; color: #800080; border-bottom: #444444 2px dotted">
    <li><span><span>function(){&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;var&nbsp;withObject&nbsp;=&nbsp;{variable1:<span>1</span><span>}&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;var&nbsp;variable1&nbsp;=&nbsp;<span>2</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;with(withObject){&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(variable1);&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<div style="display: block"><br />
</div>
<div>将压缩成 ：</div>
<div>
<ol style="border-right: #444444 2px dotted; border-top: #444444 2px dotted; background: #eeeeee; border-left: #444444 2px dotted; color: #800080; border-bottom: #444444 2px dotted">
    <li><span><span>function(){&nbsp;&nbsp;</span></span>
    <li><span>var&nbsp;_1={variable1:<span>1</span><span>};&nbsp;&nbsp;</span></span>
    <li><span>var&nbsp;_2=<span>2</span><span>;&nbsp;&nbsp;</span></span>
    <li><span>with(_1){&nbsp;&nbsp;</span>
    <li><span>alert(_2);&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<div style="display: block"><br />
<br />
</div>
<div><strong>这明显是错误的</strong>，这个垃圾没有注意javascript某些特殊语法，和动态性。 <br />
对eval函数，catch操作，with语句，都未作任何处理。 <br />
</div>
<p>相比之下JSA的是当前我知道的最安全最有效的压缩工具。 <br />
JSA 不仅提供代码压缩功能，还可以做格式化，脚本分析。 <br />
<div>脚本分析功能可以用于查看脚本信息，以及查找脚本中的潜在问题。 <br />
比如查看脚本中申明了那些函数，变量。 <br />
使用了那些外部变量。等等。。。 </div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>下载地址：<br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=175776"><u><font color="#810081">http://sourceforge.net/project/showfiles.php?group_id=175776</font></u></a><br />
或者<br />
<a href="http://forum.xidea.org/"><u><font color="#0000ff">http://forum.xidea.org </font></u></a>文件列表<br />
</div>
</div>
</div>
</span>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/180114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-02-15 17:36 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/02/15/180114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>