<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿权的书房]]></title> 
<link>http://www.aslibra.com/blog/index.php</link> 
<description><![CDATA[技术经验分享，资料收集，偶尔晾几张相片，感言生活]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿权的书房]]></copyright>
<item>
<link>http://www.aslibra.com/blog/post/lightbox_auto_show_pages.php</link>
<title><![CDATA[改造lightbox，翻页自动循环浏览展示]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Sun, 04 Jul 2010 04:23:46 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/lightbox_auto_show_pages.php</guid> 
<description>
<![CDATA[ 
	lightbox适合在网页展示图片使用，使用起来很方便，可以参考官网：<br/><br/><a href="http://leandrovieira.com/projects/jquery/lightbox/" target="_blank">http://leandrovieira.com/projects/jquery/lightbox/</a><br/>也有<a href="http://www.huddletogether.com/projects/lightbox2/" target="_blank">protype的lightbox版本</a>，不讨论此版本<br/><br/>使用方法官网有介绍，这里不介绍。<br/><br/><strong>此次改造的目的：</strong><br/><br/>有上千个图片需要展示，但是显然不能放在一页解决，那就考虑分页处理，但默认情况lightbox不会自动翻页，我们需要的就是改良此种状况，已经完成的展示 <a href="http://www.aslibra.com/bing/" target="_blank">必应Bing背景图片欣赏</a>，地址 <a href="http://www.aslibra.com/bing/" target="_blank">http://www.aslibra.com/bing/</a><br/><br/><strong>改造方案：</strong><br/><br/>1 把所有图片分页显示，这个对php来说很简单<br/>2 最后一个图片总是显示下一个的按钮，第二页之后总是显示上一个按钮（注：默认情况下，在一个页面，第一个图片不显示pre，最后一个图片不显示next）<br/>3 按键支持也做类似修改<br/><br/><strong>先做约定：</strong><br/><br/>1 展示时最后一个图片点击下一个是翻页，并且带上参数 showDetail=1，这样会自动开始第一个图片的展示<br/>2 同样，点击上一个是 showDetail=-1<br/>3 页面定义是否有下一页 HAS_NEXT<br/>4 定义当前页码CUR_PAGE<br/><br/><strong>修改工作：</strong><br/><br/>1 页面html<br/><br/><div class="code">&lt;script type=&quot;text/javascript&quot;&gt;<br/>$(function() &#123;<br/>$(&#039;a.bingPic&#039;).lightBox();<br/>//如果自动展示第一个<br/>if( location.href.indexOf(&#039;showDetail=1&#039;) &gt; 0 )&#123;<br/>&nbsp;&nbsp;$(&#039;a.bingPic:first&#039;).click();<br/>&#125;<br/>//自动展示最后一个<br/>if( location.href.indexOf(&#039;showDetail=-1&#039;) &gt; 0 )&#123;<br/>&nbsp;&nbsp;$(&#039;a.bingPic:last&#039;).click();<br/>&#125;<br/>&#125;);<br/>&lt;/script&gt;</div><br/><br/>2 php根据实际情况产生的代码：<br/><br/><div class="code">&lt;script language=&quot;JavaScript&quot;&gt;&lt;!--<br/>&nbsp;&nbsp;var HAS_NEXT = true;<br/>&nbsp;&nbsp;var CUR_PAGE = 0;<br/>//--&gt;&lt;/script&gt;</div><br/><br/>3 脚本（jquery.lightbox-0.5.js）前翻页修改的地方：<br/><br/><div class="code"><br/>line 262: 第一个图片在第二页之后都启用上一个的链接<br/>if ( settings.activeImage != 0 )<br/>-&gt;<br/>if ( CUR_PAGE&gt;0 &#124;&#124; settings.activeImage != 0 ) &#123;</div><br/><br/>点击事件里加上：<br/>&#125;).show().bind('click',function() &#123; 后面加上点击事件，跳到上一页<br/><br/><div class="code">if( CUR_PAGE&gt;0 &amp;&amp; settings.activeImage ==0 )&#123;<br/>&nbsp;&nbsp;window.location = &quot;index.php?showDetail=-1&amp;page=&quot;+(CUR_PAGE-1);<br/>&nbsp;&nbsp;return false;<br/>&#125;</div><br/><br/>键盘事件：<br/>找到 if ( ( key == settings.keyToPrev ) &#124;&#124; ( keycode == 37 ) ) &#123;<br/>后面加上翻页的处理<br/><br/><div class="code">if( CUR_PAGE&gt;0 &amp;&amp; settings.activeImage == 0 )&#123;<br/>&nbsp;&nbsp;window.location = &quot;index.php?showDetail=-1&amp;page=&quot;+(CUR_PAGE-1);<br/>&nbsp;&nbsp;return false;<br/>&#125;</div><br/><br/>4 脚本（jquery.lightbox-0.5.js）后翻页修改的地方：<br/><br/>还有下一页的话，所有图片显示下一个的按钮<br/><div class="code">if ( settings.activeImage != ( settings.imageArray.length -1 ) ) &#123;<br/>改为<br/>if ( HAS_NEXT &#124;&#124; settings.activeImage != ( settings.imageArray.length -1 ) ) &#123;</div><br/><br/>点击事件里加上：<br/><br/><div class="code">if( HAS_NEXT &amp;&amp; settings.imageArray.length == settings.activeImage + 1 )&#123;<br/>&nbsp;&nbsp;window.location = &quot;index.php?showDetail=1&amp;page=&quot;+(CUR_PAGE+1);<br/>&nbsp;&nbsp;return false;<br/>&#125;</div><br/><br/>键盘事件：<br/>找到 if ( ( key == settings.keyToNext ) &#124;&#124; ( keycode == 39 ) ) &#123;，后面加上<br/><br/><div class="code">if( HAS_NEXT &amp;&amp; settings.activeImage == ( settings.imageArray.length - 1 ) )&#123;<br/>&nbsp;&nbsp;window.location = &quot;index.php?showDetail=1&amp;page=&quot;+(CUR_PAGE+1);<br/>&nbsp;&nbsp;return false;<br/>&#125;</div><br/><br/><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/js/" rel="tag">js</a> , <a href="http://www.aslibra.com/blog/go.php/tags/javascript/" rel="tag">javascript</a> , <a href="http://www.aslibra.com/blog/go.php/tags/jquery/" rel="tag">jquery</a> , <a href="http://www.aslibra.com/blog/go.php/tags/lightbox/" rel="tag">lightbox</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/js_replaceAll.php</link>
<title><![CDATA[js的replaceAll]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Fri, 25 Dec 2009 09:58:23 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/js_replaceAll.php</guid> 
<description>
<![CDATA[ 
	今天要处理字符串的替换的问题。<br/><br/>用的是这个：<br/><br/><div class="code">content = content.replace(&quot;http://aslibra.com/&quot;, &quot;http://www.aslibra.com/&quot;);</div><br/><br/>发现只是替换了第一个，js里面没有替换所有的代码，不妨可以试试这个：<br/><br/><div class="code">String.prototype.replaceAll&nbsp;&nbsp;= function(s1,s2)&#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;return this.replace(new RegExp(s1,&quot;gm&quot;),s2);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125;</div><br/><br/>以上代码参考自：http://www.javaeye.com/topic/67544<br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/javascript/" rel="tag">javascript</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/Google_gadget_use_HTML.php</link>
<title><![CDATA[Google gadget里使用HTML]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Fri, 25 Dec 2009 05:58:45 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/Google_gadget_use_HTML.php</guid> 
<description>
<![CDATA[ 
	最近处理google gadget，希望使用html内容，有一个例子使用html的：<br/><br/>使用html内容的窗体：<br/>api&#92;samples&#92;gadgets&#92;HtmlDetailsView<br/><br/>使用布局文件支持html：<br/>api&#92;samples&#92;gadgets&#92;XmlDetailsView<br/><br/>在主窗口使用网络图片：<br/>api&#92;samples&#92;gadgets&#92;XMLHttpRequest<br/><br/>描绘界面列表的例子：<br/>http://desktop.google.com/plugins/i/google_news.html?hl=zh-CN<br/><br/>Google gadget engine对HTML/CSS的支持分析:<br/><a href="http://labs.chinamobile.com/mblog/2391_4358" target="_blank">http://labs.chinamobile.com/mblog/2391_4358</a><br/><a href="http://labs.chinamobile.com/mblog/2391_4660?wralxianxrnx" target="_blank">http://labs.chinamobile.com/mblog/2391_4660?wralxianxrnx</a><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/gadget/" rel="tag">gadget</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/google_desktop.php</link>
<title><![CDATA[google desktop程序开发]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Sat, 12 Dec 2009 11:00:39 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/google_desktop.php</guid> 
<description>
<![CDATA[ 
	<a href="http://desktop.google.com/zh/images/logo3.gif" target="_blank"><img src="http://desktop.google.com/zh/images/logo3.gif" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>google桌面提供了很多小工具，可以自己开发一些小应用，看似不错。<br/>需要的东西不多，只是懂得html和js就可以开发了。<br/><br/>参考资料：<br/><br/><a href="http://desktop.google.com/zh/index.html" target="_blank">官方网站</a><br/><a href="http://desktop.google.com/zh/script-primer.html" target="_blank">Google 桌面补充工具栏小工具入门</a><br/><a href="http://desktop.google.com/zh/features.html" target="_blank">功能介绍</a><br/>字符集的编号：<a href="http://msdn.microsoft.com/zh-cn/goglobal/bb964664(en-us).aspx" target="_blank">Locale IDs Assigned by Microsoft</a><br/><a href="http://code.google.com/intl/zh-CN/apis/desktop/docs/gadgetapi.html" target="_blank">Gadget API Reference</a><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/googledesktop/" rel="tag">googledesktop</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1185.htm</link>
<title><![CDATA[百度空间脚本错误]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Mon, 15 Dec 2008 14:48:46 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1185.htm</guid> 
<description>
<![CDATA[ 
	<a href="http://pic.yupoo.com/hqlulu/787996a9e04d/jx94z5iv.jpg" target="_blank"><img src="http://pic.yupoo.com/hqlulu/787996a9e04d/jx94z5iv.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>popup.js文件出现乱码，可能是IE的不兼容？firefox没有提示脚本错误<br/><br/>产生一系列脚本错误：<br/><br/><div class="code">function buildList(cType,cID,cTitle,cLink,noContentShow,isHost)<br/>&#123;<br/>var _ul=CE(&#039;ul&#039;);<br/>_ul.id=&nbsp;&nbsp;cID;<br/>G(&quot;m_inbaidu&quot;).appendChild(_ul);&nbsp;&nbsp;<br/></div>&nbsp;&nbsp;<br/><br/>G某出现了问题，后面多处程序报错<br/><br/>要写日志的时候，一个不断提示错误害得我得把浏览器终止任务才通知<br/><br/>---------------------------<br/>错误<br/>---------------------------<br/>出现了运行时间错误。<br/>是否要进行调试?<br/><br/>行: 250<br/>错误: 缺少对象<br/>---------------------------<br/>是(Y)&nbsp;&nbsp; 否(N)&nbsp;&nbsp; <br/>---------------------------<br/><br/>可怜的百度，哪个程序员犯错了么？
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/post/javascript.php</link>
<title><![CDATA[javascript经验贴]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Tue, 14 Oct 2008 06:32:53 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/post/javascript.php</guid> 
<description>
<![CDATA[ 
	<strong>1 字符比较</strong><br/><br/>很多时候字符返回会有点不一样，通过alert方式看，有时候看不出，也曾经让阿权纳闷了很久。<br/>也可以通过比较他们的编码后的字符<br/><br/><div class="code">alert(encodeURIComponent(a)+&quot; - &quot;+encodeURIComponent(b));</div><br/><br/>另外，可以通过trim一下，去掉某些特殊字符：<br/><br/><div class="code">String.prototype.Trim = function() &#123; return this.replace(/(^&#92;s*)&#124;(&#92;s*$)/g, &quot;&quot;); &#125;&nbsp;&nbsp;<br/>String.prototype.LTrim = function() &#123; return this.replace(/(^&#92;s*)/g, &quot;&quot;); &#125;&nbsp;&nbsp;<br/>String.prototype.RTrim = function() &#123; return this.replace(/(&#92;s*$)/g, &quot;&quot;); &#125; </div><br/><br/><strong>2 json方式定义对象和数组挺简洁明快</strong><br/><br/><div class="code">myobj = &#123;<br/>&nbsp;&nbsp;a:&#039;test&#039;,<br/>&nbsp;&nbsp;b:&#91;&#93;,<br/>&nbsp;&nbsp;c:&#123;&#125;,<br/>&nbsp;&nbsp;f:function(a)&#123;<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>myarray = &#91;&#93;;</div><br/>注意定义对象里的变量是逗号分隔的<br/><br/><strong>3 弹窗可以用链接的点击事件试试</strong><br/><br/><div class="code">&lt;script language=&quot;javascript&quot;&gt;<br/>&lt;!-- <br/>try&#123;<br/>&nbsp;&nbsp;var myurl = &#039;http://www.aslibra.com&#039;;<br/>&nbsp;&nbsp;document.write(&#039;&lt;a id=&quot;link&quot; href=&quot;&#039;+myurl+&#039;&quot; target=&quot;_target&quot;&gt;&lt;/a&gt;&#039;);<br/>&nbsp;&nbsp;document.getElementById(&quot;link&quot;).click();<br/>&#125;catch(e)&#123;<br/>&nbsp;&nbsp;window.open(myurl);<br/>&nbsp;&nbsp;//location.replace(myurl);<br/>&#125;<br/>//--&gt;&lt;/script&gt;</div><br/><br/><strong>4 数组随机</strong><br/><br/><div class="code">var status_str = &#91;<br/>&quot; www.aslibra.com &quot;,<br/>&quot; www.baidu.com &quot;&#93;;<br/>function randomsort(a, b) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return Math.random()&gt;.5 ? -1 : 1;<br/>&#125;<br/>status_str.sort(randomsort);</div><br/><br/><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/js/" rel="tag">js</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/1021.htm</link>
<title><![CDATA[jQuery和xajax]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Sun, 06 Apr 2008 12:06:38 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/1021.htm</guid> 
<description>
<![CDATA[ 
	最近处理ajax方面内容，所以特意留意了一下ajax框架，网上看了一下，大体试用了两个，一个是jQuery，另外一个是xajax。<br/><br/>给我的感觉是jQuery是一个js的框架，xajax则是一个js和php的交流方式。<br/><br/>如果侧重处理前台的界面，那jQuery是个不错的选择，功能使用起来简洁明了，代码不复杂。xajax则在考虑php的同时，也得处理js的参数和代码方式，我感觉就总很奇怪，也许不太熟悉的缘故，对比jQuery而言，入手的门槛可能高了点，但也许熟悉js的人使用起来就不方便了。<br/><br/>jQuery更加侧重脚本处理，和后台做通信，但不会太在意后台的程序，xajax是结合起来处理的，所以我感觉吃力了点，等用一点时间再比较一下，都可以体验体验，现在倾向jQuery多一些。<br/><br/><strong>关于jQuery</strong><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">jQuery是一个了不起的javascript库，它可以是我们用很少的几句代码就可以创建出漂亮的页面效果。从网站的方面说，这使得javascript更加有趣。 <br/><br/>如果你这样想：“孩子，我需要另外一个javascript库，就好比我I need another hole in my head”那么加入这个俱乐部吧。这正是我第一次遇到的时候所想的。 <br/><br/>我已经用过了Moo.fx, Scriptaculous, TW-SACK, 和 Prototype. 我曾参与了RICO, Yahoo YUI和其他一些库的开发。 <br/><br/>没有了PHPjavascript和我一点也不亲近了。但是我还是尽全力保持头脑清醒，并尽量保持用AJAX去思考。</div></div><br/><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><strong>xajax相对于其他ajax框架的优点和缺点</strong><br/><br/>1.优点<br/>我们几乎不需要了解javascript就可以实现ajax的效果<br/>无刷新提交数据，无刷新显示数据，无刷新替换数据...etc<br/>我们可以在php中处理数据<br/><br/>2.缺点<br/>因为所有自定义的xajax函数都在php里面，而这些是不输出为js文件，当我们发送请求的时候，会链接到服务器请求结果，这在网速慢的时候延时特别明</div></div><br/><br/>jQuery相关链接：<br/><br/><img src="http://www.aslibra.com/blog/template/EleganX2/images/viewimage.gif" alt=""/><a href="http://wiki.jquery.org.cn/lib/exe/fetch.php?w=&amp;h=&amp;cache=cache&amp;media=logo3.gif" target="_blank">点击在新窗口中浏览此图片</a><br/><a href="http://wiki.jquery.org.cn/lib/exe/fetch.php?w=&amp;h=&amp;cache=cache&amp;media=logo3.gif" target="_blank">http://wiki.jquery.org.cn/lib/exe/fetch.php?w=&amp;h=&amp;cache=cache&amp;media=logo3.gif</a><br/><br/>中文社区 <a href="http://jquery.org.cn/" target="_blank">http://jquery.org.cn/</a><br/><br/>xajax的链接：<br/><a href="http://xajax.dayanmei.com/" target="_blank">http://xajax.dayanmei.com/</a><br/>Tags - <a href="http://www.aslibra.com/blog/go.php/tags/js/" rel="tag">js</a> , <a href="http://www.aslibra.com/blog/go.php/tags/ajax/" rel="tag">ajax</a>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/702.htm</link>
<title><![CDATA[简单的切换代码]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Thu, 29 Mar 2007 06:47:17 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/702.htm</guid> 
<description>
<![CDATA[ 
	切换演示的地方有很多：<br/>比如腾讯每天给大家弹出的新闻窗口，也可以在<a href="http://no.e.zcom.com" target="_blank">一个小说网站</a>左上角找到。<br/><br/>其实实现起来并不难，但都是需要IE下才可以，用到两个：<br/>1 js做内容显示的控制<br/>2 控制IE提供的滤镜<br/><br/>对于内容控制，拿三个板块切换的来说，一般可以做三个板块的内容，想切换效果好一点，当然要外观都一样，只是内容不一样，这样看起来就很舒服，不会太突兀。<br/><br/>最主要的方法是css样式里面的 <strong>display:none;</strong> ，它可以让一个标签内的内容不占空间，所以，我们三个板块就可以让一个显示，另外两个是none。<br/><br/><div class="code">#tabs &#123;width:100%;filter:progid:DXImageTransform.Microsoft.Fade(Overlap=0.5,Duration=0.5);&#125;<br/>#tab1 &#123;display:block;&#125;<br/>#tab2 &#123;display:none;&#125;<br/>#tab3 &#123;display:none;&#125;</div><br/><br/>这样是让第一个显示，另外两个隐藏，然后再控制切换。<br/><br/><br/><div class="code">function $(obj)&#123;<br/>	return document.getElementById(obj);<br/>&#125;<br/>function show_tab(n)&#123;<br/>	$(&quot;tabs&quot;).filters[0].Apply();<br/>	for(var i=1;i&lt;=num;i++)&#123;<br/>		if(i==n)&#123;<br/>			$(&quot;tab&quot;+i).style.display=&quot;block&quot;;<br/>		&#125;else&#123;<br/>			$(&quot;tab&quot;+i).style.display=&quot;none&quot;;<br/>		&#125;<br/>	&#125;<br/>	$(&quot;tabs&quot;).filters[0].Play();<br/>&#125;</div><br/><br/>主要代码列举了，下面看看演示的网址：<br/>http://www.aslibra.com/down/tab_show.htm<br/><br/>很简单是不是？<br/>注意控制滤镜的时间哦：Overlap=0.5,Duration=0.5<br/>这里是控制时间的，切换的时候是有一个自身的淡化，后一个界面的渐现，中间有一个叠加的机会<br/>Overlap就是控制叠加呈现的时间，Duration顾名思义就是整个过程的时间了。<br/>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/697.htm</link>
<title><![CDATA[用array.sort进行随机排序]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Mon, 26 Mar 2007 10:02:02 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/697.htm</guid> 
<description>
<![CDATA[ 
	（如承蒙转载，请保留本站链接 http://www.aslibra.com ）<br/><br/>hack86在文章<a href="http://bbs.blueidea.com/thread-2694977-1-36.html" target="_blank">《关于随机打乱数组的深入研究》</a>里面写了一个随机数组的方法。<br/><br/>我不太赞同，同时我希望我可以说明我的论证（学校教给我们要用数据说话 ^_^）<br/>阿权在这里仅发表一个看法，希望有不同意见的可以给出你的论证，大家交流一下。<br/>可以PM给我，或者到我网站留言也好啊 <a href="http://www.aslibra.com/" target="_blank">http://www.aslibra.com/</a><br/><br/>其实随机数组应该不需要这么麻烦，先简单说一下hack86文章里面的方法：<br/>对于N个元素的数组A，先建立同样N个随机数的临时数组B，然后比较每个数字大小，排序索引数组C，再根据索引C重新编排A<br/><br/>首先，这个做法是可以的，可总感觉是在做重复的工作。<br/>其二，你的排序对数字比较就运行了N^2次，实际上用冒泡法来做效率更高些，大概是1~(N-1)的加和次。<br/>其三，我没看到hack86关于“对Array.sort()内部构造的猜测”是怎么样的猜测。我觉得Array.sort就是一个类似你对数组B的排序，估计是冒泡法排序，你是疑问它内部工作不正常？<br/><br/><br/><strong>下面，我们来看看Array.sort内部构造，同时比较一下冒泡法，也没啥特别的，测试一下就完事：</strong><br/><br/><strong>先看看冒泡法：</strong><br/>（最小的泡泡出现在最后）<br/><br/><div class="code">var a_array = Array(21, 545, 154, 15, 845, 45, 568, 784);<br/>function swap(i, j) &#123;<br/>	a = a_array[i];<br/>	a_array[i] = a_array[j];<br/>	a_array[j] = a;<br/>&#125;<br/>var len:Number = a_array.length;<br/>for (var i:Number = 0; i&lt;len-1; i++) &#123;<br/>	for (var j:Number = 0; j&lt;len-1; j++) &#123;<br/>		if (a_array[j]&lt;a_array[j+1]) &#123;<br/>			swap(j, j+1);<br/>		&#125;<br/>	&#125;<br/>&#125;<br/>trace(a_array);</div><br/><br/>845,784,568,545,154,45,21,15<br/><br/><strong>下面看看array.sort<br/>排序标准是：两个数一直交换，也就是返回1，看看有什么规律：</strong><br/><br/><div class="code">function random_me(a, b) &#123;<br/>	return 1;<br/>&#125;<br/>var a_array = Array(21, 545, 154, 15, 845, 45, 568, 784);<br/>for (var i = 0; i&lt;20; i++) &#123;<br/>	a_array.sort(random_me);<br/>	trace(a_array);<br/>&#125;</div><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">545,154,15,845,45,568,784,21<br/>154,15,845,45,568,784,21,545<br/>15,845,45,568,784,21,545,154<br/>845,45,568,784,21,545,154,15<br/>45,568,784,21,545,154,15,845<br/>568,784,21,545,154,15,845,45<br/>784,21,545,154,15,845,45,568<br/>21,545,154,15,845,45,568,784<br/>545,154,15,845,45,568,784,21<br/>154,15,845,45,568,784,21,545<br/>15,845,45,568,784,21,545,154<br/>845,45,568,784,21,545,154,15<br/>45,568,784,21,545,154,15,845<br/>568,784,21,545,154,15,845,45<br/>784,21,545,154,15,845,45,568<br/>21,545,154,15,845,45,568,784<br/>545,154,15,845,45,568,784,21<br/>154,15,845,45,568,784,21,545<br/>15,845,45,568,784,21,545,154<br/>845,45,568,784,21,545,154,15</div></div><br/><br/><strong>模仿一下，我们也来一样的做法，用冒泡法排序20次，看看有什么规律：</strong><br/><br/><div class="code">var a_array = Array(21, 545, 154, 15, 845, 45, 568, 784);<br/>function swap(i, j) &#123;<br/>	a = a_array[i];<br/>	a_array[i] = a_array[j];<br/>	a_array[j] = a;<br/>&#125;<br/>var len:Number = a_array.length;<br/>for (var m:Number = 0; m&lt;20; m++) &#123;<br/>	for (var i:Number = 0; i&lt;len-1; i++) &#123;<br/>		for (var j:Number = 0; j&lt;len-1; j++) &#123;<br/>			//直接换<br/>			if (true || a_array[j]&lt;a_array[j+1]) &#123;<br/>				swap(j, j+1);<br/>			&#125;<br/>		&#125;<br/>	&#125;<br/>	trace(a_array);<br/>&#125;</div><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">784,21,545,154,15,845,45,568<br/>568,784,21,545,154,15,845,45<br/>45,568,784,21,545,154,15,845<br/>845,45,568,784,21,545,154,15<br/>15,845,45,568,784,21,545,154<br/>154,15,845,45,568,784,21,545<br/>545,154,15,845,45,568,784,21<br/>21,545,154,15,845,45,568,784<br/>784,21,545,154,15,845,45,568<br/>568,784,21,545,154,15,845,45<br/>45,568,784,21,545,154,15,845<br/>845,45,568,784,21,545,154,15<br/>15,845,45,568,784,21,545,154<br/>154,15,845,45,568,784,21,545<br/>545,154,15,845,45,568,784,21<br/>21,545,154,15,845,45,568,784<br/>784,21,545,154,15,845,45,568<br/>568,784,21,545,154,15,845,45<br/>45,568,784,21,545,154,15,845<br/>845,45,568,784,21,545,154,15</div></div><br/><br/>看见规律了没？<br/><br/>比较两个就知道了，就是冒泡法排序的痕迹，只是它的算法是倒着的，具体冒泡法是怎么的就不说了，形象来说就是一个泡泡一直浮上去，重的泡泡就沉下来 o(∩_∩)o...哈哈。<br/>所以，array.sort就是一个冒泡法，hack86就不需要猜测了。<br/>同时，冒泡法排序的算法也是最经典的了，效率不用怀疑。<br/>所以，为什么要怀疑它的内部呢？更加不需要用N^2次的排序算法来代替array.sort<br/><br/>hack86说：“这几天看到网络上在讨论关于随机打乱数组的问题!发现很多朋友的都有自己的方法,但是否真正的随机了呢?这个问题的争议一直很大,我在总结后,以及对Array.sort()内部构造的猜测后发现,还是有很多不是太完美的地方,所以我经过思考还是写了一套关于自己的数组随机打乱的函数”<br/><br/>我觉得随机排序是很简单的事情，不必要想的那么复杂，也没有什么争议的，只有算法的优劣。<br/>你的思路算是普通的也把问题复杂化，效率并不高，何不使用高效的算法？<br/><br/>对于“真正的随机”，我觉得真正的随机的含义并不是你随机1k次，必须每次都不一样。<br/>realbobon说“这样产生的随机数不会有重复吗？要是重复了怎么办？”<br/>既然随机，那就有这个可能性是两个数一样，只是几率很小，但并不影响使用。<br/><br/><strong>下面看看算法上简便的例子：</strong><br/><br/><div class="code">function random_me(a, b) &#123;<br/>	if (Math.random()&gt;0.5) &#123;<br/>		return 1;<br/>	&#125; else &#123;<br/>		return 0;<br/>	&#125;<br/>&#125;<br/>var a_array = Array(21, 545, 154, 15, 845, 45, 568, 784);<br/>for (var i = 0; i&lt;20; i++) &#123;<br/>	a_array.sort(random_me);<br/>	trace(a_array);<br/>&#125;</div><br/><br/>很简单的原理，让array.sort进行操作，每次返回一个随机数，大于0.5就调换两个数。<br/><br/><strong>我们比较一下效率看看：</strong><br/><br/><div class="code">function randomArray(arrLen) &#123;<br/>	var rArr:Array = new Array(arrLen);<br/>	for (var i = 0; i&lt;arrLen; i++) &#123;<br/>		rArr[i] = Math.random();<br/>	&#125;<br/>	return rArr;<br/>&#125;<br/>function randomIndex(arrLen) &#123;<br/>	var iArr:Array = new Array(arrLen);<br/>	var rArr = randomArray(arrLen);<br/>	for (var i = 0; i&lt;arrLen; i++) &#123;<br/>		iArr[i] = i;<br/>		var t = rArr[i];<br/>		for (var j = 0; j&lt;arrLen; j++) &#123;<br/>			if (rArr[j]&lt;t) &#123;<br/>				iArr[i] = j;<br/>				t = rArr[j];<br/>			&#125;<br/>		&#125;<br/>		delete t;<br/>		rArr[iArr[i]] = 1;<br/>	&#125;<br/>	return iArr;<br/>&#125;<br/>function randomSort(arr) &#123;<br/>	arrLen = arr.length;<br/>	var tArr = new Array(arrLen);<br/>	var iArr = randomIndex(arrLen);<br/>	for (var i = 0; i&lt;arrLen; i++) &#123;<br/>		tArr[i] = arr[iArr[i]];<br/>	&#125;<br/>	return tArr;<br/>&#125;<br/>function random_me(a, b) &#123;<br/>	if (Math.random()&gt;0.5) &#123;<br/>		return 1;<br/>	&#125; else &#123;<br/>		return 0;<br/>	&#125;<br/>&#125;<br/>//产生随机的数组，填充1000个随机数<br/>var a_array:Array = new Array();<br/>for (var i:Number = 0; i&lt;1000; i++) &#123;<br/>	a_array.push(Math.random());<br/>&#125;<br/>//<br/>//开始前一个算法<br/>var my_date:Date = new Date();<br/>var time1:Number = my_date.getTime();<br/>randomSort(a_array);<br/>var my_date:Date = new Date();<br/>var time2:Number = my_date.getTime();<br/>trace(time2-time1);<br/>//<br/>//开始后一个算法<br/>var my_date:Date = new Date();<br/>var time1:Number = my_date.getTime();<br/>a_array.sort(random_me);<br/>var my_date:Date = new Date();<br/>var time2:Number = my_date.getTime();<br/>trace(time2-time1);</div><br/><br/>我电脑的结果是：<br/>1157<br/>281<br/><br/><br/><strong>我的结论是：</strong><br/>1 array.sort效率是很高的，没有必要怀疑它，我建议使用它<br/>2 随机是有一样的可能性，如果你觉得随机有问题，那就是Math.random的问题，要怀疑的本质也是它，相信它，那就相信随机的结果<br/>
]]>
</description>
</item><item>
<link>http://www.aslibra.com/blog/read.php/674.htm</link>
<title><![CDATA[分享$cookies处理函数]]></title> 
<author>hqlulu &lt;hqlulu@163.com&gt;</author>
<category><![CDATA[javascript]]></category>
<pubDate>Thu, 15 Mar 2007 07:51:52 +0000</pubDate> 
<guid>http://www.aslibra.com/blog/read.php/674.htm</guid> 
<description>
<![CDATA[ 
	代码原形是在maxthon安装目录发现的，觉得还有可以修改完善的空间<br/><br/><strong>修改之处有：</strong><br/><br/>1 添加时区问题的处理<br/>2 添加cookie的可用路径（可选）<br/>3 添加cookie的可用域名（可选）<br/><br/><a href="/down/cookies.html" target="_blank">代码网页查看效果</a><br/><br/><br/><br/><div class="code">&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;<br/>&lt;!--<br/>function $cookies(method, name, value, ttl, path, domain) &#123;<br/><br/>	switch(method)&#123;<br/>		case &quot;get&quot;:<br/>			var cookieArray = document.cookie.split(&quot;; &quot;); <br/>			for(var i=0; i&lt;cookieArray.length; i++) &#123; <br/>				var item = cookieArray[i].split(&quot;=&quot;);<br/>				if(item[0] == name)&#123;<br/>					return item[1];<br/>				&#125;<br/>			&#125;<br/>			return &quot;&quot;;<br/>			break;<br/><br/>		case &quot;set&quot;:<br/>			//ttl 单位：小时<br/>			//2007-3-15<br/>			var mydomain=&quot;&quot;;<br/>			if(!ttl) ttl = 1;<br/>			if(!path) path = &quot;/&quot;;<br/>			if(domain) mydomain = &quot; domain = &quot;+domain+&quot;;&quot;;<br/><br/>			var date = new Date();<br/>			//处理时区问题<br/>			localOffset = date.getTimezoneOffset()/60;<br/>			ttl-=localOffset;<br/>			//得到过期时间<br/>			date.setTime(date.getTime() + (ttl * 60*60*1000));<br/><br/>			mydomain = name + '=' + value + '; expires=' + date.toGMTString() + ';' + mydomain + ' path=' + path;<br/>			document.cookie = mydomain;<br/>			document.write(mydomain + &quot;&lt;br&gt;&quot;);<br/>			break;<br/><br/>		case &quot;del&quot;:<br/>			if(!domain) domain = &quot;/&quot;;<br/>			document.cookie = name + '=;expires=Thu, 01-Jan-1970 00:00:01 GMT; path=' + path;<br/>			break;<br/><br/>	&#125;<br/><br/>&#125; <br/><br/>document.write(&quot;before&lt;br&gt;&quot;);<br/>document.write(&quot;cookie[myname] = &quot;+ $cookies(&quot;get&quot;,&quot;myname&quot;) + &quot;&lt;br&gt;&quot;);<br/>document.write(&quot;delete cookie&lt;br&gt;&quot;);<br/>$cookies(&quot;del&quot;,&quot;myname&quot;);<br/>document.write(&quot;cookie[myname] = &quot;+ $cookies(&quot;get&quot;,&quot;myname&quot;) + &quot;&lt;br&gt;&quot;);<br/>document.write(&quot;set cookie&lt;br&gt;&quot;);<br/>$cookies(&quot;set&quot;,&quot;myname&quot;,&quot;hqlulu&quot;);<br/>document.write(&quot;cookie[myname] = &quot;+ $cookies(&quot;get&quot;,&quot;myname&quot;) + &quot;&lt;br&gt;&quot;);<br/>//--&gt;<br/>&lt;/SCRIPT&gt;</div><br/>
]]>
</description>
</item>
</channel>
</rss>