<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_MaxIE</title><subtitle type="text">人生之路并不漫长，来来去去的都是那些狭窄的街巷。可是来时未曾相约，你才让我独自苦苦等候，遥遥无期的守望，险些凝固成历史的永恒。</subtitle><id>http://feed.cnblogs.com/blog/u/15701/rss</id><updated>2012-02-04T07:48:54Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/15701/rss"/><entry><id>http://www.cnblogs.com/MaxIE/archive/2012/02/04/2338045.html</id><title type="text">数据库sql2000错误8908及处理</title><summary type="text">错误8908：表错误：数据库ID34，对象ID3，索引ID0。链的链接不匹配。(1:9342)-&amp;gt;next = (1:1808)，但(1:1808)-&amp;gt;prev = (1:1351)。 （在数据库‘UlandSystem’（34）中。解释 当 Microsoft&amp;amp;reg; SQL Server 在与表关联的一个页链的页链接中检测到不一致时（例如当某页的 next 指针指向一页，而该页的 previous 指针却向回指向另一页时），会出现该错误。表数据具有一个双向链接页链，每个索引级别也具有一个这样的页链。 对策 通过检查错误信息中的 current page ...</summary><published>2012-02-04T07:49:00Z</published><updated>2012-02-04T07:49:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2012/02/04/2338045.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2012/02/04/2338045.html"/><content type="html">&lt;p&gt;错误8908：表错误：数据库ID34，对象ID3，索引ID0。链的链接不匹配。(1:9342)-&amp;gt;next &amp;nbsp; = &amp;nbsp; (1:1808)，但(1:1808)-&amp;gt;prev &amp;nbsp; = &amp;nbsp; (1:1351)。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;（在数据库&amp;lsquo;UlandSystem&amp;rsquo;（34）中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;解释 &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; 当 &amp;nbsp; Microsoft&amp;amp;reg; &amp;nbsp; SQL &amp;nbsp; Server &amp;nbsp;在与表关联的一个页链的页链接中检测到不一致时（例如当某页的 &amp;nbsp; next &amp;nbsp; 指针指向一页，而该页的 &amp;nbsp; previous &amp;nbsp; 指针却向回指向另一页时），会出现该错误。表数据具有一个双向链接页链，每个索引级别也具有一个这样的页链。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;对策 &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; 通过检查错误信息中的 &amp;nbsp; current &amp;nbsp; page &amp;nbsp; 确定损坏的表。执行不带修复子句的 &amp;nbsp; DBCC &amp;nbsp; CHECKDB &amp;nbsp; 以确定损坏的程度。然后，执行带有适当修复子句的 &amp;nbsp; DBCC &amp;nbsp; CHECKDB &amp;nbsp; 以修复损坏部分。如果该页与索引相关联，有时除去索引可能解决问题。在多数情况下，必须从已知的干净备份恢复数据库。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; 如果错误涉及索引页，请使用 &amp;nbsp; REPAIR_REBUILD &amp;nbsp; 子句。如果错误涉及数据页，可能需要使用 &amp;nbsp; REPAIR_ALLOW_DATA_LOSS &amp;nbsp; 子句。在不允许丢失数据的可能事件中，将需要从已知的干净备份进行还原。如果问题仍然存在，请与您的主要支持提供者联系。使 &amp;nbsp; DBCC &amp;nbsp; CHECKDB &amp;nbsp; 的输出可查阅。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;strong&gt;重要 &amp;nbsp;&lt;/strong&gt; &amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;如果执行带有修复子句之一的 &amp;nbsp; DBCC &amp;nbsp; CHECKDB &amp;nbsp; 未更正索引问题，或者您不确定带有修复子句的 &amp;nbsp; DBCC &amp;nbsp; CHECKDB &amp;nbsp; 对数据的作用，请与您的主要支持提供者联系。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; 除 &amp;nbsp; SQL &amp;nbsp; Server &amp;nbsp; 错误日志外，还应检查操作系统错误日志文件，以确定是否是硬件错误造成损坏。 &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; 如果问题仍然存在，请与您的主要支持提供者联系。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：&lt;/p&gt;&#xD;
&lt;p&gt;使用数据库的过程中,由于断电或其他原因,有可能导致数据库出现一些小错误,比如检索某些表特别慢,查询不到符合条件的数据等.&lt;br /&gt;　　&lt;br /&gt;　　出现这些情况的原因,往往是因为数据库有些损坏,或索引不完整.&lt;br /&gt;　　&lt;br /&gt;　　在ACCESS中,有个修复数据库的功能可以解决这个问题,在SQL企业管理器,没有这个功能,要用语句来完成,下面就介绍如何用 SQL 语句完成数据库的修复,需要注意的是,在进行下面的操作时,必须断开所有用户的连接:&lt;br /&gt;　　&lt;br /&gt;　　USE MASTER&lt;br /&gt;　　GO&lt;br /&gt;　　&lt;br /&gt;　　sp_dboption '你的数据库名', 'single user', 'true'&lt;br /&gt;　　Go&lt;br /&gt;　　&lt;br /&gt;　　DBCC CHECKDB('你的数据库名', REPAIR_REBUILD)&lt;br /&gt;　　Go&lt;br /&gt;　　&lt;br /&gt;　　USE 你的数据库名&amp;nbsp;&lt;br /&gt;　　go&lt;br /&gt;　　&lt;br /&gt;　　exec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_REBUILD)'&lt;br /&gt;　　go&lt;br /&gt;　　&lt;br /&gt;　　sp_dboption '你的数据库名', 'single user', 'false'&lt;br /&gt;　　Go&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;附：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;DBCC&lt;/span&gt;&lt;span&gt; CHECKDB(&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;数据库名称&lt;/span&gt;&lt;span&gt;'&lt;/span&gt;&lt;span&gt;,REPAIR_ALLOW_DATA_LOSS) &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;  &#xD;
REPAIR_ALLOW_DATA_LOSS：是比较高级的修复方式 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;  &#xD;
REPAIR_FAST：是简单快速的修复方式&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;REPAIR_ALLOW_DATA_LOSS&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　此选项包括REPAIR_REBUILD 选项的所有修复功能而且还包括为纠正分配错误&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　结构性行或页错误而进行数据行或数据页的分配和解除分配以及删除被损坏的文本对&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　象这些修复易引起数据丢失所以可在事务中使用该DBCC 命令这样用户可以回&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　滚所发生的数据变化然后从备份中进行恢复&lt;/span&gt;&lt;br /&gt;&lt;span&gt;REPAIR_FAST&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　该选项只能实现较简单且耗时少的修复功能例如修复非簇索引中的额外键此选项&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　不会导致数据丢失&lt;/span&gt;&lt;br /&gt;&lt;span&gt;REPAIR_REBUILD&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　此选项包括所有REPAIR_FAST 选项的功能而且能够完成一些耗时的修复操作如&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　重建索引此选项不会导致数据丢失&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/2338045.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2012/02/04/2338045.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2011/11/27/2264849.html</id><title type="text">jQuery2011年年度最佳插件</title><summary type="text">近日，国外著名博客WDL发布了2011年度最佳jQuery插件。jQuery自2006年发布以来，经过五年的迅速发展，目前已是最流行和使用最广泛的JavaScript框架。jQuery的易扩展性吸引了来自全球的开发者来共同编写jQuery插件，jQuery插件不仅能够增强网站的可用性，有效的改善用户体验，还可以大大减少开发时间。IsotopeIsotype 是一款非常优秀的jQuery插件，用于创建动态的，智能的布局。使用这款插件能够对一组页面项目进行过滤、排序等很多操作，而且带有非常酷的动画效果。FitTextFitText 是一款文本大小自动调整插件 ，使用这款插件能够让你的Web项目在屏</summary><published>2011-11-27T01:57:00Z</published><updated>2011-11-27T01:57:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2011/11/27/2264849.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2011/11/27/2264849.html"/><content type="html">&lt;p&gt;近日，国外著名博客WDL发布了2011年度最佳jQuery插件。jQuery自2006年发布以来，经过五年的迅速发展，目前已是最流行和使用最广泛的JavaScript框架。jQuery的易扩展性吸引了来自全球的开发者来共同编写jQuery插件，jQuery插件不仅能够增强网站的可用性，有效的改善用户体验，还可以大大减少开发时间。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://isotope.metafizzy.co/"&gt;Isotope&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://isotope.metafizzy.co/"&gt;&lt;img src="http://img.cnbeta.com/newsimg/111125/0902140554006883.jpg" alt="jquery" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Isotype 是一款非常优秀的&amp;nbsp;&lt;a href="http://www.cnblogs.com/lhb25/category/277997.html"&gt;&lt;strong&gt;jQuery&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;插件，用于创建动态的，智能的布局。使用这款插件能够对一组页面项目进行过滤、排序等很多操作，而且带有非常酷的动画效果。&lt;br /&gt;&lt;a href="http://fittextjs.com/"&gt;FitText&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://fittextjs.com/"&gt;&lt;img  src="http://img.cnbeta.com/newsimg/111125/0902151718827717.jpg" alt="Tools and Scripts for Responsive Web Design" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FitText 是一款文本大小自动调整插件 ，使用这款插件能够让你的Web项目在屏幕宽度不同的设备上自动调整字体大小。&lt;br /&gt;&lt;a href="http://flex.madebymufffin.com/"&gt;FlexSlider&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://flex.madebymufffin.com/"&gt;&lt;img  title="flexslider" src="http://img.cnbeta.com/newsimg/111125/0902172910712918.jpg" alt="jQuery插件" width="580" height="372" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FlexSlider 是一款轻量的&amp;nbsp;&lt;a href="http://www.cnblogs.com/lhb25/category/277997.html"&gt;&lt;strong&gt;jQuery&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;内容滚动插件，能够帮助你在项目轻松的创建漂亮的内容滚动效果，功能丰富，具有非常高的可定制性。&lt;br /&gt;&lt;a href="http://christophercliff.github.com/sausage/"&gt;Sausage&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://christophercliff.github.com/sausage/"&gt;&lt;img src="http://img.cnbeta.com/newsimg/111125/0902183154621997.jpg" alt="jquery" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sausage 是一款内容分页插件，用于补充页面内容很长情况下产生的滚动不友好问题。&lt;br /&gt;&lt;a href="http://arborjs.org/"&gt;arbor.js&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://arborjs.org/"&gt;&lt;img src="http://img.cnbeta.com/newsimg/111125/0902194262997055.jpg" alt="jquery plugins" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Arbor 是一个利用 Web Works 和&amp;nbsp;&lt;a href="http://www.cnblogs.com/lhb25/category/277997.html"&gt;&lt;strong&gt;jQuery&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;创建的可视化图形库，它为图形组织和屏幕刷新处理提供了一个高效的、力导向的布局算法。&lt;br /&gt;&lt;a href="http://buildinternet.com/project/mosaic/"&gt;Mosaic&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://buildinternet.com/project/mosaic/"&gt;&lt;img  title="mosaic" src="http://img.cnbeta.com/newsimg/111125/0902205668047680.jpg" alt="jQuery插件" width="580" height="376" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mosaic 是一款非常优秀的画廊插件，能够自动生成滑动框和选项，有滑动和渐变动画效果，还可以自定义滚动方向。&lt;br /&gt;&lt;a href="http://buildinternet.com/project/supersized/"&gt;Supersized&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://buildinternet.com/project/supersized/"&gt;&lt;img  title="supersized" src="http://img.cnbeta.com/newsimg/111125/09022161548583176.jpg" alt="jQuery插件" width="580" height="373" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Supersized 是一款功能强大的图片切换插件，支持等比例缩放图片填充成全屏效果，支持滑动和淡入淡出等多种动画切换效果。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/2264849.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2011/11/27/2264849.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185643.html</id><title type="text">jQ中文API离线版下载(适用版本1.4.4，1.5，1.5.1，1.5.2，1.6，1.6.1，1.6.2)</title><summary type="text">在众多网友的要求下jQ中文API离线版（air版本）终于整理完成发布了！只要更新以下内容：将原来在线版本的jQ中文API AIR客户端版本彻底改成了离线版本；支持在线升级jQ中文API离线版，由于翻译能力和精力的原因，目前部分条目没有翻译完成，很多条目翻译很糟糕，所以当有API文档调整的时候，jQ中文API离线版将提示您更新最新版本；美化了一下界面；jQuery 1.6 中文API (适用jQuery 1.6，jQuery 1.6.1，jQuery 1.6.2)jQuery 1.6中文 API 在线版：jQuery 1.6 中文API (适用jQuery 1.6，jQuery 1.6.1，jQ</summary><published>2011-09-22T15:14:00Z</published><updated>2011-09-22T15:14:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185643.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185643.html"/><content type="html">&lt;h2 style="font-weight: bold; font-size: 24px; padding: 0px; margin: 0px;"&gt;&lt;a href="http://www.css88.com/archives/3941" target="_blank" style="color: #0099cc; text-decoration: none;"&gt;&lt;img title="2011-08-04_132804" src="http://www.css88.com/wp-content/uploads/2011/07/2011-08-04_132804-e1312441913641.png" alt="" width="600" height="484" style="vertical-align: middle; border-width: initial; border-color: initial; max-width: 660px; border-style: none;" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; overflow-x: hidden; overflow-y: hidden; zoom: 1; margin: 0px;"&gt;在众多网友的要求下jQ中文API离线版（air版本）终于整理完成发布了！&lt;br /&gt;&lt;strong&gt;只要更新以下内容：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol style="list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; padding: 0px; margin: 0px;"&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: decimal; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;将原来在线版本的jQ中文API AIR客户端版本彻底改成了离线版本；&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: decimal; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;支持在线升级jQ中文API离线版，由于翻译能力和精力的原因，目前部分条目没有翻译完成，很多条目翻译很糟糕，所以当有API文档调整的时候，jQ中文API离线版将提示您更新最新版本；&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: decimal; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;美化了一下界面；&lt;span id="more-3941"&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;h3 style="font-weight: bold; font-size: 21px; padding: 0px; margin: 0px;"&gt;jQuery 1.6 中文API (适用jQuery 1.6，jQuery 1.6.1，jQuery 1.6.2)&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; margin: 0px;"&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.6&amp;nbsp;中文 API 在线版：&lt;a href="http://www.css88.com/jqapi-1.6/" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.6 中文API (适用jQuery 1.6，jQuery 1.6.1，jQuery 1.6.2)&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.6 中文API离线版AIR客户端下载：&lt;a href="http://d2.sodao.com/jqapi/jqapi-1.6/JQAPI.air" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.6 中文API离线版AIR客户端下载&lt;/a&gt;，如果没有AIR环境请先&lt;a href="http://get.adobe.com/air" target="_self" style="color: #0d61a8; text-decoration: none;"&gt;点击下载ADOBE AIR&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; overflow-x: hidden; overflow-y: hidden; zoom: 1; margin: 0px;"&gt;&lt;/p&gt;&#xD;
&lt;p style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; overflow-x: hidden; overflow-y: hidden; zoom: 1; margin: 0px;"&gt;==================================================================&lt;/p&gt;&#xD;
&lt;h3 style="font-weight: bold; font-size: 21px; padding: 0px; margin: 0px;"&gt;jQuery 1.5.1 中文API(适用jQuery 1.5.1和jQuery 1.5.2)&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; margin: 0px;"&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.5.1 中文&amp;nbsp;API 在线版：&lt;a href="http://www.css88.com/jqapi-1.5.1/" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.5.1 API 中文版&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.5.1 中文&amp;nbsp;API离线版AIR客户端下载：&lt;a href="http://d2.sodao.com/jqapi/jqapi-1.5.1/JQAPI.air" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.5.1 中文&amp;nbsp;API离线版AIR客户端下载&lt;/a&gt;，如果没有AIR环境请先&lt;a href="http://get.adobe.com/air" target="_self" style="color: #0d61a8; text-decoration: none;"&gt;点击下载ADOBE AIR&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; overflow-x: hidden; overflow-y: hidden; zoom: 1; margin: 0px;"&gt;==================================================================&lt;/p&gt;&#xD;
&lt;h3 style="font-weight: bold; font-size: 21px; padding: 0px; margin: 0px;"&gt;jQuery 1.5 API 中文版&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; margin: 0px;"&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.5 中文&amp;nbsp;API 在线版：&lt;a href="http://www.css88.com/jqapi-1.5/" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.5 API 中文版&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.5中文API离线版AIR客户端下载：&lt;a href="http://d2.sodao.com/jqapi/jqapi-1.5/JQAPI.air" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.5中文API离线版AIR客户端下载&lt;/a&gt;，如果没有AIR环境请先&lt;a href="http://get.adobe.com/air" target="_self" style="color: #0d61a8; text-decoration: none;"&gt;点击下载ADOBE AIR&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; overflow-x: hidden; overflow-y: hidden; zoom: 1; margin: 0px;"&gt;==================================================================&lt;/p&gt;&#xD;
&lt;h3 style="font-weight: bold; font-size: 21px; padding: 0px; margin: 0px;"&gt;jQuery 1.4.4 API中文版&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; font-style: normal; margin: 0px;"&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;jQuery 1.4.4 中文&amp;nbsp;API 在线版：&lt;a href="http://www.css88.com/jqapi/" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.4.4 API中文版&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; list-style-type: disc; list-style-position: inside; list-style-image: initial; font-style: normal;"&gt;Query 1.4.4 中文API离线版AIR客户端下载：&lt;a href="http://d2.sodao.com/jqapi/jqapi-1.4.4/JQAPI.air" target="_blank" style="color: #0d61a8; text-decoration: none;"&gt;jQuery 1.4.4 中文API离线版AIR客户端下载&lt;/a&gt;，如果没有AIR环境请先&lt;a href="http://get.adobe.com/air" target="_self" style="color: #0d61a8; text-decoration: none;"&gt;点击下载ADOBE AIR&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/2185643.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185643.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185642.html</id><title type="text">方便的CSS和jQuery下拉菜单解决方案</title><summary type="text">如果您正在 寻找 一些很酷 的 下拉菜单解决 方案 ， 那么这些要 。今天 ， 我收集了 一些有用的 CSS和jQuery 下拉菜单 解决 方案 。Creating a pure CSS dropdown menuSexy Drop Down Menu w/ jQuery &amp;amp; CSSSliding Jquery MenuPerfect Dropdown Login Box like Twitter using jQueryCSS3 Dropdown MenuCreate Vimeo-like top navigationA Different Top NavigationFormBox</summary><published>2011-09-22T15:11:00Z</published><updated>2011-09-22T15:11:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185642.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185642.html"/><content type="html">&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;如果您正在 寻找 一些很酷 的 下拉菜单解决 方案 ， 那么这些要 。今天 ， 我收集了 一些有用的 CSS和jQuery 下拉菜单 解决 方案 。&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Creating a pure CSS dropdown menu&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://csswizardry.com/2011/02/creating-a-pure-css-dropdown-menu/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Creating a pure CSS dropdown menu" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CreatingapureCSSdropdownmenu.jpg" alt="Creating a pure CSS dropdown menu" width="602" height="281" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Sexy Drop Down Menu w/ jQuery &amp;amp; CSS&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.noupe.com/tutorial/drop-down-menu-jquery-css.html" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Sexy Drop Down Menu" src="http://www.designerterminal.com/wp-content/uploads/2011/08/SexyDropDownMenu.jpg" alt="Sexy Drop Down Menu" width="602" height="352" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;span id="more-4040"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Sliding Jquery Menu&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.hv-designs.co.uk/2009/02/17/sliding-jquery-menu/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Sliding Jquery Menu" src="http://www.designerterminal.com/wp-content/uploads/2011/08/SlidingJqueryMenu.gif" alt="Sliding Jquery Menu" width="253" height="242" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Perfect Dropdown Login Box like Twitter using jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://aext.net/2009/08/perfect-sign-in-dropdown-box-likes-twitter-with-jquery/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Perfect Dropdown Login Box like Twitter using jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/PerfectDropdownLoginBoxlikeTwitterusingjQuery.jpg" alt="Perfect Dropdown Login Box like Twitter using jQuery" width="505" height="258" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;CSS3 Dropdown Menu&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://webdesignerwall.com/tutorials/css3-dropdown-menu" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="CSS3 Dropdown Menu" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CSS3DropdownMenu.gif" alt="CSS3 Dropdown Menu" width="472" height="263" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Create Vimeo-like top navigation&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.jankoatwarpspeed.com/post/2009/01/19/Create-Vimeo-like-top-navigation.aspx" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Create Vimeo-like top navigation" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CreateVimeoliketopnavigation.jpg" alt="Create Vimeo-like top navigation" width="602" height="191" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;A Different Top Navigation&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/a-different-top-navigation/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="A Different Top Navigation" src="http://www.designerterminal.com/wp-content/uploads/2011/08/ADifferentTopNavigation.png" alt="A Different Top Navigation" width="602" height="415" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;FormBox &amp;ndash; A jQuery &amp;amp; CSS3 Drop-Down Menu With Integrated Forms&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;img title="FormBox" src="http://www.designerterminal.com/wp-content/uploads/2011/08/FormBox.jpg" alt="FormBox" width="602" height="281" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Reinventing a Drop Down with CSS and jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Reinventing a Drop Down with CSS and jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/ReinventingaDropDownwithCSSandjQuery.jpg" alt="Reinventing a Drop Down with CSS and jQuery" width="503" height="202" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Animated Drop Down Menu with jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.clarklab.net/blog/posts/animated-drop-down-menu-with-jquery/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Animated Drop Down Menu with jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/AnimatedDropDownMenuwithjQuery.jpg" alt="Animated Drop Down Menu with jQuery" width="430" height="301" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Creating an Awesome Drop-Down Nav with CSS3 &amp;amp; jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://becreativemagazine.com/2011/01/creating-an-awesome-drop-down-nav-with-css3-jquery/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Creating an Awesome Drop-Down Nav with CSS3 &amp;amp; jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CreatinganAwesomeDropDownNavwithCSS3jQuery.png" alt="Creating an Awesome Drop-Down Nav with CSS3 &amp;amp; jQuery" width="602" height="354" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Create The Fanciest Dropdown Menu&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.webdesigndev.com/web-development/create-the-fanciest-dropdown-menu-you-ever-saw" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Create The Fanciest Dropdown Menu You Ever Saw" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CreateTheFanciestDropdownMenuYouEverSaw.jpg" alt="Create The Fanciest Dropdown Menu You Ever Saw" width="544" height="152" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;jQuery Menu Style 01 (Dim Gray)&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;img title="jQuery Menu Style 01" src="http://www.designerterminal.com/wp-content/uploads/2011/08/jQueryMenuStyle01.jpg" alt="jQuery Menu Style 01" width="602" height="253" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;jQuery Dropdown Navigation in WordPress&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.tuttoaster.com/jquery-dropdown-menu-in-wordpress/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="jQuery Dropdown Navigation in WordPress" src="http://www.designerterminal.com/wp-content/uploads/2011/08/jQueryDropdownNavigationinWordPress.jpg" alt="jQuery Dropdown Navigation in WordPress" width="564" height="229" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Drop-Down Menus, Horizontal Style&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.alistapart.com/articles/horizdropdowns/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Drop-Down Menus, Horizontal Style" src="http://www.designerterminal.com/wp-content/uploads/2011/08/DropDownMenusHorizontalStyle.jpg" alt="Drop-Down Menus, Horizontal Style" width="419" height="199" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;jQuery Menu: Dropdown, iPod Drilldown, and Flyout styles&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="jQuery Menu" src="http://www.designerterminal.com/wp-content/uploads/2011/08/jQueryMenu.jpg" alt="jQuery Menu" width="509" height="146" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;MenuMatic&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://greengeckodesign.com/menumatic" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="MenuMatic" src="http://www.designerterminal.com/wp-content/uploads/2011/08/MenuMatic.jpg" alt="MenuMatic" width="602" height="388" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Make a Mega Drop-Down Menu with jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.sitepoint.com/make-a-mega-drop-down-menu-with-jquery/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Make a Mega Drop-Down Menu with jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/MakeaMegaDropDownMenuwithjQuery.png" alt="Make a Mega Drop-Down Menu with jQuery" width="497" height="349" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;jQuery (mb)Menu 2.7&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://pupunzi.open-lab.com/2009/01/18/mbmenu/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="MENU 2.7" src="http://www.designerterminal.com/wp-content/uploads/2011/08/MENU2.7.jpg" alt="MENU 2.7" width="346" height="247" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Create Simple Dropdown Menu Using jQuery&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.instantshift.com/2010/07/16/create-simple-dropdown-menu-using-jquery/" target="_blank" style="text-decoration: none; color: #84bf57;"&gt;&lt;img title="Create Simple Dropdown Menu Using jQuery" src="http://www.designerterminal.com/wp-content/uploads/2011/08/CreateSimpleDropdownMenuUsingjQuery.jpg" alt="Create Simple Dropdown Menu Using jQuery" width="602" height="253" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;h2 style="list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px; margin: 0px;"&gt;Easy to Style jQuery Drop Down Menu Tutorial&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0px; margin-right: 0px; margin-left: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; padding: 0px;"&gt;&lt;a href="http://www.queness.com/post/1047/easy-to-style-jquery-drop-down-menu-tutorial" target="_blank" style="text-decoration: underline; color: #84bf57;"&gt;&lt;img title="Easy to Style jQuery Drop Down Menu Tutorial" src="http://www.designerterminal.com/wp-content/uploads/2011/08/EasytoStylejQueryDropDownMenuTutorial.jpg" alt="Easy to Style jQuery Drop Down Menu Tutorial" width="510" height="175" border="0" data-markzhi="registered" style="border-width: initial; border-color: initial; max-width: 670px; height: auto; float: none; border-style: none;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/2185642.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2011/09/22/2185642.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2011/04/13/2015271.html</id><title type="text">sql2000无法执行查询及未找到提供程序解决办法</title><summary type="text">sql2000 &amp;quot;无法执行查询,因为一些文件缺少或未注册&amp;quot;的解决办法在SQL server 2000中打开表查看数据的时候,提示说“无法执行查询,因为一些文件缺少或未注册”用查询分析器可以查看数据,重装了sql2000也没有用解决办法：注册以下的四个dll文件，重启机器即可，根本无需重新安装SQL server 或者系统。regsvr32 &amp;quot;C:\Program Files\Common Files\System\Ole DB\Oledb32.dll&amp;quot;regsvr32 &amp;quot;C:\Program Files\Common Files\System\</summary><published>2011-04-13T12:48:00Z</published><updated>2011-04-13T12:48:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2011/04/13/2015271.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2011/04/13/2015271.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;&lt;strong&gt;sql2000 "无法执行查询,因为一些文件缺少或未注册"的解决办法&lt;/strong&gt;&lt;br /&gt;在SQL server 2000中打开表查看数据的时候,提示说&amp;ldquo;无法执行查询,因为一些文件缺少或未注册&amp;rdquo;&lt;br /&gt;用查询分析器可以查看数据,重装了sql2000也没有用&lt;/p&gt;&#xD;
&lt;p&gt;解决办法：注册以下的四个dll文件，重启机器即可，根本无需重新安装SQL server 或者系统。&lt;/p&gt;&#xD;
&lt;p&gt;regsvr32 "C:\Program Files\Common Files\System\Ole DB\Oledb32.dll"&lt;br /&gt;regsvr32 "C:\Program Files\Common Files\System\Ado\Msado15.dll"&lt;br /&gt;regsvr32 "C:\Program Files\Common Files\System\Ole DB\Sqloledb.dll"&lt;br /&gt;regsvr32 "C:\WINDOWS\system32\Atl.dll"&lt;/p&gt;&#xD;
&lt;p&gt;保存为&amp;ldquo;任意文件名.bat&amp;rdquo;,双击执行，重启，问题解决。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SQL Server2000 未找到提供程序。该程序可能未正确 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server2000系统进入企业管理器打开数据表时不能返回数据，提示&amp;ldquo;未找到提供程序。该程序可能未正确安装。&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解决办法一：&lt;/p&gt;&#xD;
&lt;p&gt;运行：&lt;/p&gt;&#xD;
&lt;p&gt;regsvr32 "C:\Program Files\Common Files\System\Ole DB\msdasql.dll"&lt;/p&gt;&#xD;
&lt;p&gt;解决办法二：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; 先把SQL&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; Server卸载，再把安装时产生的&amp;ldquo;Microsoft&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; SQL&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; Server&amp;rdquo;文件夹删掉,在运行注册表,把HKEY_CURRENT_USER\Software\Microsoft\Microsoft&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; SQL&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; Server，和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; SQL&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; Server全部删掉，(注意要把Microsoft&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; SQL&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; Server文件夹整个删掉),然后重起。&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt; 试一试吧&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;&lt;wbr&gt;&lt;/wbr&gt;&lt;br /&gt;另外在选择登陆的时候选择混合模式&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/2015271.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2011/04/13/2015271.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2011/01/06/1929000.html</id><title type="text">SQL Server优化SELECT语句方法</title><summary type="text">Microsoft提供了三种调优查询的主要的方法： 使用SET STATISTICS IO 检查查询所产生的读和写； 使用SET STATISTICS TIME检查查询的运行时间； 使用SET SHOWPLAN 分析查询的查询计划 。 SET STATISTICS IO 命令SET STATISTICS IO ON 强制SQL Server 报告执行事务时I/O的实际活动。他不能和SET NOEXEC ON 选项配对使用，因为他仅仅对监测实际执行命令的I/O活动有意义。一旦这个选项被打开，每个查询产生包括I/O统计信息的额外输出。为了关闭这个选项，执行SET STATISTICS IO OFF</summary><published>2011-01-06T09:11:00Z</published><updated>2011-01-06T09:11:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2011/01/06/1929000.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2011/01/06/1929000.html"/><content type="html">&lt;p style="text-indent: 2em;"&gt;Microsoft提供了三种调优查询的主要的方法： &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;使用SET STATISTICS IO 检查查询所产生的读和写； &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;使用SET STATISTICS TIME检查查询的运行时间； &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;使用SET SHOWPLAN 分析查询的查询计划 。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;strong&gt;SET STATISTICS IO&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;命令SET STATISTICS IO ON 强制SQL Server 报告执行事务时I/O的实际活动。他不能和SET NOEXEC ON 选项配对使用，因为他仅仅对监测实际执行命令的I/O活动有意义。一旦这个选项被打开，每个查询产生包括I/O统计信息的额外输出。为了关闭这个选项，执行SET STATISTICS IO OFF。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;注：这些命令也能在 Sybase Adaptive Server中运行，虽然结果集可能看起来有点不同。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;例如，下面是在Northwind 数据库中对于employees表上的一个行统计的简单查询脚本而获得的I/O统计信息: &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;SET STATISTICS IO ON&#xD;
            GO&#xD;
            SELECT COUNT(*) FROM employees&#xD;
            GO&#xD;
            SET STATISTICS IO OFF&#xD;
            GO&#xD;
            Results:&#xD;
            ---------------&#xD;
            2977&#xD;
            Table &amp;lsquo;Employees&amp;rsquo; . Scan count 1,&#xD;
            logical read 53, physical reads 0, readahead reads 0.&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;这个扫描统计告诉我们扫描执行的数量，逻辑读显示的是从缓存中读出来的页面的数量，物理读显示的是从磁盘中读的页面的数量，Read-ahead 读显示了放置在缓存中用于将来读操作的页面数量。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;此外，我们执行一个系统存储过程获得表大小的统计信息以供我们分析： &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;sp_spaceused employees&#xD;
            Results:&#xD;
            name rows reserved data index_size unused&#xD;
            -------------- -------- --------- -------&#xD;
            Employees 2977 2008KB 1504KB 448KB 56KB&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;通过看这些信息我们能得到些什么呢？ &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;这个查询没有扫描整个表，在表中的数据量超过1.5M字节，而仅仅执行了53个逻辑I/O操作就得到了结果。这表明该查询发现了一个可用来计算结果的索引，并且扫描索引比扫描所有数据页花费更少的I/O操作。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;索引页几乎全部放在数据缓存中，所以物理读的值是零。这是因为我们之前不久是在employees表上执行了其他查询，此时表和他的索引已被缓存。你的查询开销可能有不同。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;Microsoft报告没有read-ahead（预读）活动。在这种情况下，数据和索引页已被缓存起来了。当对一个非常大的表作表扫描时，read-ahead可能会半路插入进来，并且在你的查询用到他们之前缓存起所需的页。当SQL Server确定你的事务是顺序读取数据库页并且认为他能预测到你下一步将用到的页面时，Real-ahead会自动打开。实际上一个独立的SQL Server连接在你的进程之前已开始运行并为他缓存数据页。（设置和优化read-ahead 参数已超出这篇文章的讨论范围。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;在这个例子中，该查询已尽可能有效率地执行了，不必进一步优化。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;strong&gt;SET STATISTICS TIME&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;一个事务的实耗时间是个不稳定的测量，因为这些时间和在服务器上其他用户的活动有关。然而，相比那些对你的用户没有所有意义的数据页数字，他提供了一些实际的测量。他们关心等待查询返回的时间消耗，不关心数据的缓存和有效的read-ahead。SET STATISTICS TIME ON命令报告下面的查询的实际占用时间和CPU使用情况。执行SET STATISTICS TIME OFF禁止这个选项。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;SET STATISTICS TIME ON&#xD;
            GO&#xD;
            SELECT COUNT（*） FROM titleauthers&#xD;
            GO&#xD;
            SET STATISTICS TIME OFF&#xD;
            GO&#xD;
            Results:&#xD;
            SQL Server Execution Times;&#xD;
            Cup time=0 ms.  Elapsed time=8672 ms.&#xD;
            SQL Server Parse and Compile Time:&#xD;
            Cpu time=10 ms&#xD;
            ----------------&#xD;
            25&#xD;
            (1 row(s) affected)&#xD;
            SQL Servre Execution Times:&#xD;
            Cpu time=0 ms.? Elapsed time=10 ms.&#xD;
            SQL Server Parse and Compile Time:&#xD;
            Cup time=0 ms&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;第一条信息报告了多少使人困惑的占用（实耗）时间，8672豪秒，这个数据和我们的脚本不相关，这显示的是之前一个命令执行以来逝去的时间。你能忽略这条信息。SQL Server仅仅花费10毫秒时间去分析和编译该查询。花费0毫秒去执行他（在查询结果可看到）。其真实的意思是这个查询所花费的时间太短以至不能计量。最后的信息报告了这个SET STATISTICS TIME OFF命令相关的分析及编译花费了0毫秒。你能忽略这个信息。最重要的信息以加重字体突出显示。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;注意实耗时间和CPU时间是以毫秒显示。这个数字在你的计算机上可能会改动（不过不要尝试和我们的笔记本计算机比较你机器的性能，因为这不是代表性的指标）。而且，每次你执行这个脚本，考虑到你的SQL Server还在处理一些其他事务，你得到的统计信息都可能有一点不同。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;如果你需要测量一系列的查询或存储过程的实耗持续时间，更好的办法是采用程式设计的方式（如下所示）。当你运行多个命令时你不得不进行手工合计，这是因为STATISTICS TIME只报告单个查询的持续时间。想象一下，当你对一个在循环里执行成千上万次查询的脚本进行计时的情况下，将面临大量的输出和大量的手工工作。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;相反，考虑下面这个脚本在事务的前后分别捕捉时间并以秒的形式报告总持续时间（你也能使用毫秒）： &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;DECLARE @start_time DATETIME&#xD;
            SELECT @start_time=GETDATE()&#xD;
            &amp;lt;any query or a script that&#xD;
            you want to time, without a GO&amp;gt;&#xD;
            SELECT  &amp;rsquo;Elapsed Time,sec&amp;rsquo;&#xD;
            =DATEDIFF(second, @start_time,GETDATE())&#xD;
            GO&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;如果你的脚本被GO分成几步,你不能用本地变量来保存开始时间。变量在GO命令执行后就被销毁。但你能象这样在临时表里保存开始时间。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;CREATE TABLE #save_time (start_time DATETIME NOT NULL)&#xD;
            INSERT #save_time VALUES ( GETDATE())&#xD;
            GO&#xD;
            &amp;lt; any script that you want to time (may include GO) &amp;gt;&#xD;
            GO&#xD;
            SELECT &amp;lsquo;Elapsed Time, sec&amp;rsquo; =&#xD;
            DATEDIFF ( second, start_time, GETDATE())&#xD;
            FROM TABLE #save_time&#xD;
            DROP TABLE #save_time&#xD;
            GO&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;请注意，SQL Server&amp;rsquo;s DATETIME 数据类型存储的时间是以3毫秒为增量。使用DATETIME数据类型不可能获得比这更细的时间粒度。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;strong&gt;SHOWPLAN 输出和分析&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;这篇文章通过explain plan(解析计划)解释Microsoft SQL Server 2000 使用SET SHOWPLAN_TEXT ON 所输出内容的意义和用处。一个explain plan（也被叫做查询计划，执行计划，或优化计划）提供了数据库查询引擎执行SQL事务的十分周详的步骤。知道怎么阅读explain plan有助于提高高端查询调整和最优化的能力。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;注：大部分的例子要么是基于PUBS数据库，要么是基于SQL Server系统表的.针对这些实例，我们给非常多表增加了好几万条记录以便于在评估查询计划时体现查询优化器的实际作用。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SHOWPLAN 输出: &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;我们喜欢查询优化器的一个功能就是以查询执行计划的形式提供反馈。目前我们能更为周详地说明语句的执行，并描述你可能在查询计划中遇见的消息。理解这个输出能使你的优化水平达到一个新高度。你能不再把优化器视为一个能处理你的查询语句的有魔力的&amp;ldquo;黑盒子&amp;rdquo;， &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;下面的命令指示SQL Server显示在同一个连接（或进程）中每个查询的执行计划，或将这个选项关闭。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SET SHOWPLAN_TEXT { ON | OFF } &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;默认情况下，SHOWPLAN_TEXT ON使得你正在审查的代码不被执行。而是，SQL Server 编译这些代码并且显示这个查询的执行计划。直到你发出SET.SHOWPLAN_TEXT OFF命令后他才停止。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;strong&gt;其他有用的SET命令&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;有各种各样对调优和调试有用的SET命令。在这篇文件前面我们提到了SET STATISTICS命令。在某些情况下你能发现其他SET命令的用处: &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SET NOEXEC{ ON | OFF}: 检查你的Transact-SQL代码的语法，包括编译该代码但不执行。当使用延迟名字解析时，这对检查一个查询语句的语法是非常有用的。即，当一个表还没有创建时，你就能检查基于该表的查询语句的语法。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SET FMTONLY{ ON | OFF }:仅向客户端返回查询的元数据。对于SELECT语句，通常仅返回列头。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SET PARSEONLY { ON | OFF }:检查你的Transact-SQL代码的语法，但不编译或执行该代码。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;一旦设为 ON这些命令将一直有效，直到你手工关闭他们。这些设置不是马上生效，但他们将从下一个步骤开始生效，换言之，你必须在SHOWPLAN or NOEXEC等设置生效前发出GO命令。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;典型的T-SQL代码如下，获得一个查询的执行计划，而不实际执行。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;SET SHOWPLAN_TEXT ON&#xD;
            GO&#xD;
            &amp;lt;query&amp;gt;&#xD;
            GO&#xD;
            SET SHOWPLAN_TEXT OFF&#xD;
            GO&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;我们将展示几个SHOWPLAN_TEXT 输出的例子。为了避免冗余，我将不重复上面SET命令的展示.在这个部分里所提供的查询都将代替这个脚本中的标签并且都象上面展示的相同&amp;ldquo;包装&amp;rdquo;。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;事实上SHOWPLAN有两个版本：SHOWPLAN_ALL和SHOWPLAN_TEXT。他们提供的信息基本上相同。然而，SHOWPLAN_ALL输出的结果是准备给图像查询工具的而不是给听众的。我们在这整篇文章中将用到SHOWPLAN_TEXT，可提供更可读的格式输出。下面的简单查询选择authors表的所有行。因为我们没有提供where子句所以他除了扫描整个表别无选择：select * form authors &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;在下面的表中SHOWPLAN_TEXT输出的结果没有格式化，我们不得不从SHOWPLAN_ALL的输出中整理出更多的可读信息： &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400" align="center"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&#xD;
&lt;pre&gt;SHOWPLAN_TEXT SHOWPLAN_ALL&#xD;
            StmtTextStmtText&#xD;
            ---------------------------------&#xD;
            |--Clustered Index Scan |--Clustered Index Scan&#xD;
            (OBJECT:([pubs].[dbo]. (OBJECT:([pubs].[dbo].&#xD;
            [authors].[UPKCL_auidind])) [authors].[UPKCL_auidind]))&#xD;
            StmtID  NodeID  Parent&#xD;
            ---------  --------  -------&#xD;
            2   2   1&#xD;
            PhysicalOp LogicalOp&#xD;
            ------------  ----------------&#xD;
            NULL NULL&#xD;
            Clustered Index scan  Clustered Index scan&#xD;
            Argument&#xD;
            ---------------------------------------------&#xD;
            1&#xD;
            OBJECT:([pubs].[dbo]. ].[UPKCL_auidind])&#xD;
            DefindedValues&#xD;
            ---------------------------------------&#xD;
            23&#xD;
            _ &amp;lt;all columns in table&amp;gt;_&#xD;
            EstimatedRows   EstimateIO   EstimatedCPU&#xD;
            ------------------  -------------  --------&#xD;
            23   NULL  NULL&#xD;
            23 0.01878925 5.1899999E-5&#xD;
            AvgRowSizeotalSubtreeCost&#xD;
            ------------------------------------&#xD;
            NULL  3.7682299E-2&#xD;
            1113.7682299E-2&#xD;
            OutputList&#xD;
            -----------------------------------------&#xD;
            NULL&#xD;
            _ &amp;lt;all columns in table&amp;gt;_&#xD;
            Warnings  TypeParallel  EstimateExecutions&#xD;
            --------  -------------------------&#xD;
            NULL   SELECT   0NULL&#xD;
            NULPLAN_ROW01.0&lt;/pre&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;这里重要的不同是SHOWPLAN_ALL语句返回了非常多有用的调优信息，但这些非常难理解和应用。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;strong&gt;SHOWPLAN 操作&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em;"&gt;SHOWPLAN操作，有时叫做&amp;ldquo;标签&amp;rdquo;(tag)，其中一部分操作非常清晰地说明了SQL Server的做法，而其他一些操作将把人难住。这些操作分成物理操作和逻辑操作。物理操作描述被用来处理查询的物理算法，例如，执行一个索引查找。逻辑操作描述语句中使用的关系代数操作，如聚合运算等。SHOWPLAN的结果被细分非具体的步骤分成几步。每个查询的物理操作代表一个独立步骤。步骤通常会伴有一个逻辑操作，但不是所有的步骤都包括逻辑操作。此外，大部分的步骤都有一个操作（要么逻辑操作要么物理操作）和一个参数。参数是操作所影响的查询组件。关于所有执行计划步骤的讨论内容非常繁多。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/1929000.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2011/01/06/1929000.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2010/12/21/1912821.html</id><title type="text">分享50个CSS超炫丽button样式代码</title><summary type="text">先上图：下载地址：50个CSS超炫丽button样式代码</summary><published>2010-12-21T08:13:00Z</published><updated>2010-12-21T08:13:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2010/12/21/1912821.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2010/12/21/1912821.html"/><content type="html">&lt;p&gt;先上图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/12145/2010122116114292.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载地址：&lt;a href="http://files.cnblogs.com/MaxIE/50个CSS超炫丽button样式代码.rar"&gt;50个CSS超炫丽button样式代码&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/1912821.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2010/12/21/1912821.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2010/12/16/1908071.html</id><title type="text">SQL函数：字符串中提取数字，英文，中文，过滤重复字符</title><summary type="text">--提取数字IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULLDROP FUNCTION DBO.GET_NUMBER2GOCREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^0-9]%',@S) &amp;gt; 0BEGINset @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')ENDRETURN @SENDGO--测试PRINT DBO.GET_NUMBER('呵呵ABC123ABC')GO--12</summary><published>2010-12-16T04:51:00Z</published><updated>2010-12-16T04:51:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2010/12/16/1908071.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2010/12/16/1908071.html"/><content type="html">&lt;div id="blog_text" &gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;提取数字&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.GET_NUMBER2&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_NUMBER2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_NUMBER2(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;PATINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^0-9]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;stuff&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;patindex&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^0-9]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;测试&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_NUMBER(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;呵呵ABC123ABC&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;123&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;提取英文&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.GET_STR&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_STR&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_STR(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;PATINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^a-z]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;stuff&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;patindex&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^a-z]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@s&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;测试&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.GET_STR(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;呵呵ABC123ABC&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;提取中文&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.CHINA_STR&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.CHINA_STR&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.CHINA_STR(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;PATINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^吖-座]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;STUFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;PATINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%[^吖-座]%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,N&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.CHINA_STR(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;呵呵ABC123ABC&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;过滤重复字符&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.DISTINCT_STR&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;STUFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;A,A,B,C,C,B,C,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;A,B,C&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;过滤重复字符2&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.DISTINCT_STR2&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR2(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;8000&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TEMP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;50&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@NEW&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.DISTINCT_STR2(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;AABCCD&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;ABCD&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBO.SPLIT_STR&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.SPLIT_STR&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FUNCTION&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.SPLIT_STR(&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;8000&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;包含多个数据项的字符串&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;要获取的数据项的位置&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;数据分隔符&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURNS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLITLEN&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLITLEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;A&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHILE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008000;"&gt;@INDEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;STUFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLITLEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;RETURN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@S&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008000;"&gt;@SPLIT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBO.SPLIT_STR(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;AA|BB|CC&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="font-weight: bold; color: #800000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;|&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/1908071.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2010/12/16/1908071.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2010/11/22/1884524.html</id><title type="text">使用正则表达式(RegEx)清理HTML标签</title><summary type="text">有些时候，我们处于安全等因素的考虑，是禁止用户提交含有HTML的内容的，但是客户端的验证和限制总归是不可信的。这时候，我们需要对提交的内容，进行安全处理，去掉所有的HTML标签。或者，我们需要提取某些混合内容的一部分作为摘要，此时，也需要清理掉HTML标签。一、 C# 方式</summary><published>2010-11-22T08:49:00Z</published><updated>2010-11-22T08:49:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2010/11/22/1884524.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2010/11/22/1884524.html"/><content type="html">&lt;p&gt;有些时候，我们处于安全等因素的考虑，是禁止用户提交含有HTML的内容的，但是客户端的验证和限制总归是不可信的。&lt;/p&gt;&#xD;
&lt;p&gt;这时候，我们需要对提交的内容，进行安全处理，去掉所有的HTML标签。&lt;/p&gt;&#xD;
&lt;p&gt;或者，我们需要提取某些混合内容的一部分作为摘要，此时，也需要清理掉HTML标签。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、 C# 方式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RegularExpressions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Regex &lt;/span&gt;&lt;span&gt;reg &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;new &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RegularExpressions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Regex&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"&amp;lt;/?[^&amp;gt;]+&amp;gt;"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RegularExpressions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RegexOptions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;IgnoreCase&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;string &lt;/span&gt;&lt;span&gt;清理后的结果 &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;reg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"需要清理的内容"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;strong&gt;二、 Javascript 方式&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;var &lt;/span&gt;&lt;span&gt;stripTagsRE &lt;/span&gt;&lt;span&gt;= /&amp;lt;\/?[^&amp;gt;]+&amp;gt;/&lt;/span&gt;&lt;span&gt;gi&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;stripTags &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;function &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;) {&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;return &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;v &lt;/span&gt;&lt;span&gt;? &lt;/span&gt;&lt;span&gt;v &lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;stripTagsRE&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//使用方法&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;var &lt;/span&gt;&lt;span&gt;清理后的结果 &lt;/span&gt;&lt;span&gt;= &lt;/span&gt;&lt;span&gt;stripTags&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;"要清理的内容"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/1884524.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2010/11/22/1884524.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaxIE/archive/2010/10/20/1856327.html</id><title type="text">高效的JavaScript</title><summary type="text">传统上，网页中不会有大量的脚本，至少脚本很少会影响网页的性能。但随着网页越来越像 Web 应用程序，脚本的效率对网页性能影响越来越大。而且使用 Web 技术开发的应用程序现在越来越多，因此提高脚本的性能变得很重要。对于桌面应用程序，通常使用编译器将源代码转换为二进制程序。编译器可以花费大量时间优化最终二进制程序的效率。Web 应用程序则不同。因为 Web 应用程序需要运行在不同的浏览器、平台和架构...</summary><published>2010-10-20T01:55:00Z</published><updated>2010-10-20T01:55:00Z</updated><author><name>MaxIE</name><uri>http://www.cnblogs.com/MaxIE/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaxIE/archive/2010/10/20/1856327.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaxIE/archive/2010/10/20/1856327.html"/><content type="html">&lt;p&gt;传统上，网页中不会有大量的脚本，至少脚本很少会影响网页的性能。但随着网页越来越像 Web 应用程序，脚本的效率对网页性能影响越来越大。而且使用 Web 技术开发的应用程序现在越来越多，因此提高脚本的性能变得很重要。&lt;/p&gt;&#xD;
&lt;p&gt;对于桌面应用程序，通常使用编译器将源代码转换为二进制程序。编译器可以花费大量时间优化最终二进制程序的效率。Web 应用程序则不同。因为 Web 应用程序需要运行在不同的浏览器、平台和架构中，不可能事先完全编译。浏览器在获得脚本后要执行解释和编译工作。用户要求不仅要求网页能快速的载入，而且要求最终 Web 应用程序执行的效果要和桌面应用程序的一样流畅。Web 应用程序应能运行在多种设备上，从普通的桌面电脑到手机。&lt;/p&gt;&#xD;
&lt;p&gt;浏览器并不很擅长此项工作。虽然 Opera 有着当前最快的脚本引擎，但浏览器有不可避免的局限性，这时就需要 Web 开发者的帮助。Web 开发者提高 Web 应用程序的性能的方法很多而且也很简单，如只需要将一种循环变成另一种、将组合样式分解成三个或者只添加实际需要的脚本。&lt;/p&gt;&#xD;
&lt;p&gt;本文从 ECMAScript/JavaScript, DOM, 和页面载入方面分别介绍几种简单的能提高 Web 应用程序性能的方法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;ECMAScript&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免使用&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;eval&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;或&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;构造函数&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;每次&amp;nbsp;eval&amp;nbsp;或&amp;nbsp;Function&amp;nbsp;构造函数作用于字符串表示的源代码时，脚本引擎都需要将源代码转换成可执行代码。这是很消耗资源的操作 &amp;mdash;&amp;mdash; 通常比简单的函数调用慢100倍以上。&lt;/p&gt;&#xD;
&lt;p&gt;eval&amp;nbsp;函数效率特别低，由于事先无法知晓传给&amp;nbsp;eval&amp;nbsp;的字符串中的内容，eval在其上下文中解释要处理的代码，也就是说编译器无法优化上下文，因此只能有浏览器在运行时解释代码。这对性能影响很大。&lt;/p&gt;&#xD;
&lt;p&gt;Function&amp;nbsp;构造函数比&amp;nbsp;eval&amp;nbsp;略好，因为使用此代码不会影响周围代码；但其速度仍很慢。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;重写&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;eval&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;eval&amp;nbsp;不仅效率低下，而且绝大部分情况下完全没有使用的必要。很多情况下使用 eval 是因为信息以字符串形式提供，开发者误认为只有 eval 能使用此信息。下例是一个典型的错误：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;function getProperty(oString) {&lt;/p&gt;&#xD;
&lt;p&gt;var oReference;&lt;/p&gt;&#xD;
&lt;p&gt;eval('oReference = test.prop.'+oString);&lt;/p&gt;&#xD;
&lt;p&gt;return oReference;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的代码执行完全相同的函数，但没有使用&amp;nbsp;eval：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;function getProperty(oString) {&lt;/p&gt;&#xD;
&lt;p&gt;return test.prop[oString];&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;在 Opera 9, Firefox, 和 Internet Explorer 中后者比前者快95%，在 Safari 中快85%。(注意此比较中不含函数本身调用时间。)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;如果你需要函数，那就用函数&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面是常见的&amp;nbsp;Function&amp;nbsp;构造函数使用：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;function addMethod(oObject,oProperty,oFunctionCode) {&lt;/p&gt;&#xD;
&lt;p&gt;oObject[oProperty] = new Function(oFunctionCode);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;addMethod(myObject,'rotateBy90','this.angle=(this.angle+90)%360');&lt;/p&gt;&#xD;
&lt;p&gt;addMethod(myObject,'rotateBy60','this.angle=(this.angle+60)%360');&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的代码没有使用&amp;nbsp;Function&amp;nbsp;构造函数，但提供了相同的功能：通过创建匿名函数：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;function addMethod(oObject,oProperty,oFunction) {&lt;/p&gt;&#xD;
&lt;p&gt;oObject[oProperty] = oFunction;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;addMethod(myObject,'rotateBy90',function () { this.angle=(this.angle+90)%360; });&lt;/p&gt;&#xD;
&lt;p&gt;addMethod(myObject,'rotateBy60',function () { this.angle=(this.angle+60)%360; });&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免使用&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;with&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;尽管看起来挺方便，但&amp;nbsp;with&amp;nbsp;效率很低。with&amp;nbsp;结构又创建了一个作用域，以便使用变量时脚本引擎搜索。这本身只轻微的影响性能。但严重的是编译时不知道此作用域内容，因此编译器无法像对其他作用域（如函数产生的作用域）那样对之优化。&lt;/p&gt;&#xD;
&lt;p&gt;另一个高效而且也挺方便的方法是使用变量引用对象，然后使用变量访问对象属性。但只有属性不是 literal type 时才适用，如字符串或布尔值。&lt;/p&gt;&#xD;
&lt;p&gt;考虑下面的代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;with( test.information.settings.files ) {&lt;/p&gt;&#xD;
&lt;p&gt;primary = 'names';&lt;/p&gt;&#xD;
&lt;p&gt;secondary = 'roles';&lt;/p&gt;&#xD;
&lt;p&gt;tertiary = 'references';&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的代码效率更高：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var testObject = test.information.settings.files;&lt;/p&gt;&#xD;
&lt;p&gt;testObject.primary = 'names';&lt;/p&gt;&#xD;
&lt;p&gt;testObject.secondary = 'roles';&lt;/p&gt;&#xD;
&lt;p&gt;testObject.tertiary = 'references';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;不要在影响性能的关键函数中使用&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;try-catch-finally&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;try-catch-finally&amp;nbsp;结构比较特殊。和其他语法结构不同，它在 runtime 的当前作用域中创建新变量。每当catch&amp;nbsp;执行时，就会将捕获到的 exception 对象赋给一个变量。这个变量不属于任何脚本。它在&amp;nbsp;catch&amp;nbsp;语句开始时被创建，在结束时被销毁。&lt;/p&gt;&#xD;
&lt;p&gt;由于此函数比较特殊，且是在运行时动态创建动态销毁，有些浏览器对其的处理并不高效。把 catch 语句放在关键循环中将极大影响性能。&lt;/p&gt;&#xD;
&lt;p&gt;如果可能，应在脚本中不频繁被调用的地方进行异常处理，或通过检查某种动作是否被支持来避免使用。下面的例子中，如果所需的属性不存在，将在循环语句中抛出许多异常：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var oProperties = ['first','second','third',...,'nth'], i;&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; oProperties.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;try {&lt;/p&gt;&#xD;
&lt;p&gt;test[oProperties[i]].someproperty = somevalue;&lt;/p&gt;&#xD;
&lt;p&gt;} catch(e) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;很多情况下，可把&amp;nbsp;try-catch-finally&amp;nbsp;结构移到循环外部。这样做稍微改变了程序语义，因为如果抛出异常，将停止整个循环：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var oProperties = ['first','second','third',...,'nth'], i;&lt;/p&gt;&#xD;
&lt;p&gt;try {&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; oProperties.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;test[oProperties[i]].someproperty = somevalue;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;} catch(e) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;有时可用属性检测或其他检测代替&amp;nbsp;try-catch-finally&amp;nbsp;结构：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var oProperties = ['first','second','third',...,'nth'], i;&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; oProperties.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( test[oProperties[i]] ) {&lt;/p&gt;&#xD;
&lt;p&gt;test[oProperties[i]].someproperty = somevalue;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;分隔&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;eval&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;with&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;因为 eval 和 with 结构严重影响性能，应该尽量避免使用这些结构。但如不得不使用时， 避免在频繁被调用的函数中或循环中使用这些结构。最好将这些结构放在只运行一次，或少量几次的代码中，并不要将其放在对性能要求较高的代码中。&lt;/p&gt;&#xD;
&lt;p&gt;如果可能，尽量将这些结构和其他代码分隔开，这样他们就不会影响脚本性能。如将其放在顶级函数中，或只执行一次然后保存运行结果，避免再次使用。&lt;/p&gt;&#xD;
&lt;p&gt;try-catch-finally&amp;nbsp;结构在一些浏览器中也会影响性能，包括 Opera ，因此最好也将其分隔。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免使用全局变量&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;全局变量使用简单，因此很容易禁不住诱惑在脚本中使用全局变量。但有时全局变量也会影响脚本性能。&lt;/p&gt;&#xD;
&lt;p&gt;首先，如果函数或其他作用域内引用了全局变量，则脚本引擎不得不一级一级查看作用域直到搜索到全局作用域。查询本地作用域变量更快。&lt;/p&gt;&#xD;
&lt;p&gt;其次，全局变量将始终存在在脚本生命周期中。而本地变量在本地作用域结束后就将被销毁，其所使用的内存也会被垃圾收集器回收。&lt;/p&gt;&#xD;
&lt;p&gt;最后，&lt;em&gt;window&lt;/em&gt;&amp;nbsp;对象也共享全局作用域，也就是说本质上是两个作用域而不是一个。使用全局变量不能像使用本地变量那样使用前缀，因此脚本引擎要花更多时间查找全局变量。&lt;/p&gt;&#xD;
&lt;p&gt;也可在全局作用域中创建全局函数。函数中可以调用其他函数，随着函数调用级数增加，脚本引擎需要花更多时间才能找到全局变量以找到全局变量。&lt;/p&gt;&#xD;
&lt;p&gt;考虑下面的简单例子，&lt;em&gt;i&lt;/em&gt;&amp;nbsp;和&amp;nbsp;&lt;em&gt;s&lt;/em&gt;&amp;nbsp;是全局作用域且函数使用这两个全局变量：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var i, s = '';&lt;/p&gt;&#xD;
&lt;p&gt;function testfunction() {&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; 20; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;s += i;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;testfunction();&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的函数效率更高。在大多数浏览器中，包括 Opera 9、最新版 Internet Explorer, Firefox, Konqueror 和 Safari，后者执行速度比上面代码快30%。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;function testfunction() {&lt;/p&gt;&#xD;
&lt;p&gt;var i, s = '';&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; 20; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;s += i;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;testfunction();&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注意隐式对象转换&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Literal，如字符串、数字和布尔值在 ECMAScript 中有两种表示方法。 每个类型都可以创建变量值或对象。如&amp;nbsp;var oString = 'some content';, 创建了字符串值，而&amp;nbsp;var oString = new String('some content');创建了字符串对象。&lt;/p&gt;&#xD;
&lt;p&gt;所有的属性和方法都定义在 string 对象中，而不是 string 值中。每次使用 string 值的方法或属性， ECMAScript 引擎都会隐式的用相同 string 值创建新的 string 对象。此对象只用于此请求，以后每次视图调用 string 值方法是都会重新创建。&lt;/p&gt;&#xD;
&lt;p&gt;下面的代码将要求脚本引擎创建21个新 string 对象，每次使用&amp;nbsp;&lt;em&gt;length&lt;/em&gt;&amp;nbsp;属性时都会产生一个，每一个&amp;nbsp;&lt;em&gt;charAt&lt;/em&gt;方法也会产生一个：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var s = '0123456789';&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; s.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;s.charAt(i);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的代码和上面相同，但只创建了一个对象，因此其效率更高：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var s = new String('0123456789');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; s.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;s.charAt(i);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;如果代码中常调用 literal 值的方法，你应像上面例子那样考虑创建对象。&lt;/p&gt;&#xD;
&lt;p&gt;注意本文中大部分技巧对于所有浏览器都有效，但此技巧特别针对于 Opera。此优化技巧在 Internet Explorer 和 Firefox 中改进效果没有在 Opera 中明显。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;在关键函数中避免&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;for-in&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;for-in&amp;nbsp;常被误用，特别是简单的&amp;nbsp;for&amp;nbsp;循环更合适时。for-in&amp;nbsp;循环需要脚本引擎创建所有可枚举的属性列表，然后检查是否存在重复。&lt;/p&gt;&#xD;
&lt;p&gt;有时脚本已知可枚举的属性。这时简单的&amp;nbsp;for&amp;nbsp;循环即可遍历所有属性，特别是当使用顺序数字枚举时，如数组中。&lt;/p&gt;&#xD;
&lt;p&gt;下面是不正确的&amp;nbsp;for-in&amp;nbsp;循环使用：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var oSum = 0;&lt;/p&gt;&#xD;
&lt;p&gt;for( var i in oArray ) {&lt;/p&gt;&#xD;
&lt;p&gt;oSum += oArray[i];&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;for&amp;nbsp;循环无疑会更高效：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var oSum = 0;&lt;/p&gt;&#xD;
&lt;p&gt;var oLength = oArray.length;&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; oLength; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;oSum += oArray[i];&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;优化&lt;/strong&gt;&lt;strong&gt; string &lt;/strong&gt;&lt;strong&gt;合并&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;字符串合并是比较慢的。+&amp;nbsp;运算符并不管是否将结果保存在变量中。它会创建新 string 对象，并将结果赋给此对象；也许新对象会被赋给某个变量。下面是一个常见的字符串合并语句：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;a += 'x' + 'y';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此代码首先创建临时string对象保存合并后的'xy'值，然后和&lt;em&gt;a&lt;/em&gt;变量合并，最后将结果赋给&lt;em&gt;a&lt;/em&gt;。下面的代码使用两条分开的命令，但每次都直接赋值给&lt;em&gt;a&lt;/em&gt;&amp;nbsp;，因此不需要创建临时string对象。结果在大部分浏览器中，后者比前者快20%，而且消耗更少的内存：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;a += 'x';&lt;/p&gt;&#xD;
&lt;p&gt;a += 'y';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;基本运算符比函数调用更快&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;尽管单独使用效果不明显，但如果在需要高性能的关键循环和函数中使用基本运算符代替函数调用将可能提高脚本性能。例子包括数组的&lt;em&gt;&amp;nbsp;push&lt;/em&gt;&amp;nbsp;方法，其效率低于直接在数组末位赋值。另一个例子是&lt;em&gt;&amp;nbsp;Math&lt;/em&gt;&amp;nbsp;对象方法，大部分情况下，简单的数学运算符效率更高更合适。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var min = Math.min(a,b);&lt;/p&gt;&#xD;
&lt;p&gt;A.push(v);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面代码实现相同功能，但效率更高：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var min = a &amp;lt; b ? a : b;&lt;/p&gt;&#xD;
&lt;p&gt;A[A.length] = v;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;向&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;setTimeout()&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;setInterval()&lt;/strong&gt;&lt;strong&gt;传送函数名，而不要传送字符串&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;setTimeout()&amp;nbsp;和&amp;nbsp;setInterval()&amp;nbsp;方法近似于&amp;nbsp;eval。如果传进参数是字符串，则在一段时间之后，会和&amp;nbsp;eval一样执行字符串值，当然其低效率也和&amp;nbsp;eval&amp;nbsp;一样。&lt;/p&gt;&#xD;
&lt;p&gt;但这些方法也可以接受函数作为第一个参数。在一段时间后将调用此函数，但此函数可在编译时被解释和优化，也就是说会有更好的性能。典型的使用 string 作为参数例子如下：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;setInterval('updateResults()',1000);&lt;/p&gt;&#xD;
&lt;p&gt;setTimeout('x+=3;prepareResult();if(!hasCancelled){runmore();}',500);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一个语句可以直接传递函数名。第二个语句中，可以使用匿名函数封装代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;setInterval(updateResults,1000);&lt;/p&gt;&#xD;
&lt;p&gt;setTimeout(function () {&lt;/p&gt;&#xD;
&lt;p&gt;x += 3;&lt;/p&gt;&#xD;
&lt;p&gt;prepareResult();&lt;/p&gt;&#xD;
&lt;p&gt;if( !hasCancelled ) {&lt;/p&gt;&#xD;
&lt;p&gt;runmore();&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;},500);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;需要注意的是 timeout 或时间延迟可能并不准确。通常浏览器会花比要求更多的时间。有些浏览器会稍微提早完成下一个延迟以补偿。有些浏览器每次可能都会等待准确时间。很多因素，如 CPU 速度、线程状态和 JavaScript 负载都会影响时间延迟的精度。大多数浏览器无法提供1ms以下的延迟，可能会设置最小可能延迟，通常在10 和 100 ms之间。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;DOM&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通常主要有三种情况引起 DOM 运行速度变慢。第一就是执行大量 DOM 操作的脚本，如从获取的数据中建造新的 DOM 树。第二种情况是脚本引起太多的 reflow 或重绘。第三种情况是使用较慢的 DOM 节点定位方法。&lt;/p&gt;&#xD;
&lt;p&gt;第二种和第三种情况比较常见且对性能影响比较严重，因此先介绍前两种情况。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;重绘&lt;/strong&gt;&lt;strong&gt;(Repaint)&lt;/strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;strong&gt; reflow&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;重绘也被称为重画，每当以前不可见的元素变得可见（或反之）时就需要重绘操作；重绘不会改变页面布局。如给元素添加轮廓、改变背景颜色、改变样式。重绘对性能影响很大，因为需要脚本引擎搜索所有元素以确定哪些是可见的及哪些是应被显示的。&lt;/p&gt;&#xD;
&lt;p&gt;Reflow 是更大规模的变化。当 DOM 数被改变时、影响布局的样式被修改时、当元素的&amp;nbsp;&lt;em&gt;className&lt;/em&gt;&amp;nbsp;属性被修改时或当浏览器窗口大小变化时都会引起 reflow。脚本引擎必须 reflow 相关元素以确定哪些部分不应被现实。其子节点也会被 reflow 以考虑其父节点的新布局。DOM 中此元素之后出现的元素也被 reflow 以计算新布局，因为它们的位置可能已被移动了。祖先节点也需要 reflow 以适应子节点大小的改变。总之，所有元素都需被重绘。&lt;/p&gt;&#xD;
&lt;p&gt;Reflow 从性能角度来说是非常耗时的操作，是导致 DOM 脚本较慢的主要原因之一，特别在手机等处理能力较弱的设备上。很多情况下，reflow 和重新布局整个网页耗时相近。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;减少&lt;/strong&gt;&lt;strong&gt; reflow &lt;/strong&gt;&lt;strong&gt;次数&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;很多情况下脚本需要进行会引起 reflow 或重绘的操作，如动画就需要 reflow 操作，因此 reflow 是 Web 开发不可或缺的特性。为了让脚本能快速运行，应在不影响整体视觉效果的情况下尽量减少 reflow 次数。&lt;/p&gt;&#xD;
&lt;p&gt;浏览器可以选择缓存 reflow 操作，如可以等到脚本线程结束后才 reflow 以呈现变化。Opera 可以等待足够数量的改变后才 reflow、或等待足够长时间后才 reflow、或等待脚本线程结束后才 reflow。也就是说如果一个脚本线程中的发生很多间隔很小的改变时，可能只引起一个 reflow 。但开发者不能依赖此特性，特别是考虑到运行 Opera 的不同设备的运算速度有很大差异。&lt;/p&gt;&#xD;
&lt;p&gt;注意不同元素的 reflow 消耗时间不同。Reflow 表格元素消耗的时间最多是 Reflow 块元素时间的3倍。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;最小化&lt;/strong&gt;&lt;strong&gt; reflow &lt;/strong&gt;&lt;strong&gt;影响&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;正常的 reflow 可能影响整个页面。reflow 的页面内容越多，则 reflow 操作的时间也越长。Reflow 的页面内容越多，需要的时间也就越长。位置固定的元素不影响页面的布局，因此如果它们 reflow 则只需 reflow 其本身。其背后的网页需要被重绘，但这比 reflow 整个页面要快得多。&lt;/p&gt;&#xD;
&lt;p&gt;所以动画不应该被用于整个页面，最好用于固定位置元素。大部分动画符合此要求。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;修改&lt;/strong&gt;&lt;strong&gt; DOM &lt;/strong&gt;&lt;strong&gt;树&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;修改 DOM 树&lt;em&gt;会&lt;/em&gt;导致 reflow 。向 DOM 中添加新元素、修改 text 节点值或修改属性都可能导致 reflow。顺序执行多个修改会引起超过一个 reflow，因此最好将多个修改放在不可见的 DOM 树 fragment 中。这样就只需要一次 DOM 修改操作：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var docFragm = document.createDocumentFragment();&lt;/p&gt;&#xD;
&lt;p&gt;var elem, contents;&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; textlist.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;elem = document.createElement('p');&lt;/p&gt;&#xD;
&lt;p&gt;contents = document.createTextNode(textlist[i]);&lt;/p&gt;&#xD;
&lt;p&gt;elem.appendChild(contents);&lt;/p&gt;&#xD;
&lt;p&gt;docFragm.appendChild(elem);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;document.body.appendChild(docFragm);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;也可以在元素的克隆版本中进行多个 DOM 树修改操作，在修改结束后用克隆版本替换原版本即可，这样只需要一个 reflow 操作。注意如果元素中包含表单控件，则不能使用此技巧，因为用户所做修改将无法反映在 DOM 树种。此技巧也不应该用于绑定事件处理器的元素，因为理论上不应该克隆这些元素。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var original = document.getElementById('container');&lt;/p&gt;&#xD;
&lt;p&gt;var cloned = original.cloneNode(true);&lt;/p&gt;&#xD;
&lt;p&gt;cloned.setAttribute('width','50%');&lt;/p&gt;&#xD;
&lt;p&gt;var elem, contents;&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; textlist.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;elem = document.createElement('p');&lt;/p&gt;&#xD;
&lt;p&gt;contents = document.createTextNode(textlist[i]);&lt;/p&gt;&#xD;
&lt;p&gt;elem.appendChild(contents);&lt;/p&gt;&#xD;
&lt;p&gt;cloned.appendChild(elem);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;original.parentNode.replaceChild(cloned,original);&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;修改不可见元素&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果一个元素的&amp;nbsp;&lt;em&gt;display&lt;/em&gt;&amp;nbsp;样式被设置为&amp;nbsp;&lt;em&gt;none&lt;/em&gt;，即使其内容变化也不再需要重绘此元素，因为根本就不会显示此元素。可以利用这一点。如果需要对一个元素或其内容做出多个修改，又无法将这些更改放在一个重绘中，则可以先将元素设置为&amp;nbsp;display:none ，做出修改后，在把元素改回原来状态。&lt;/p&gt;&#xD;
&lt;p&gt;上面方法将导致两个额外的 reflow，一个是隐藏元素时另一个是重新显示此元素时，但此方法的总体效率仍较高。如果隐藏的元素影响滚动条位置，上面的方法也有可能会引起滚动条跳动。但此技术也被用于固定位置元素而不会引起任何不好看的影响。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var posElem = document.getElementById('animation');&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.display = 'none';&lt;/p&gt;&#xD;
&lt;p&gt;posElem.appendChild(newNodes);&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.width = '10em';&lt;/p&gt;&#xD;
&lt;p&gt;... other changes ...&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.display = 'block';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;测量大小&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如上面所述，浏览器可能会缓存多个修改一起执行，并只执行一次 reflow 。但注意为保证结果正确，测量元素大小也会引起 reflow 。尽管这不会造成任何重绘，但仍会在后台进行 reflow 操作。&lt;/p&gt;&#xD;
&lt;p&gt;使用&lt;em&gt;&amp;nbsp;offsetWidth&lt;/em&gt;&amp;nbsp;这样的属性或&amp;nbsp;&lt;em&gt;getComputedStyle&lt;/em&gt;&amp;nbsp;这样的方法都会引起 reflow 。即使不使用返回的结果，上述操作也会引起立即 reflow。如果重复需要测量结果，可以考虑只测量一次但用变量保存结果。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var posElem = document.getElementById('animation');&lt;/p&gt;&#xD;
&lt;p&gt;var calcWidth = posElem.offsetWidth;&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.fontSize = ( calcWidth / 10 ) + 'px';&lt;/p&gt;&#xD;
&lt;p&gt;posElem.firstChild.style.marginLeft = ( calcWidth / 20 ) + 'px';&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.left = ( ( -1 * calcWidth ) / 2 ) + 'px';&lt;/p&gt;&#xD;
&lt;p&gt;... other changes ...&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一次修改多个样式值&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;与 DOM 树修改相似，可将多个样式修改一次进行，以尽量减少重绘或 reflow数目。常见设置样式方法是逐个设置：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var toChange = document.getElementById('mainelement');&lt;/p&gt;&#xD;
&lt;p&gt;toChange.style.background = '#333';&lt;/p&gt;&#xD;
&lt;p&gt;toChange.style.color = '#fff';&lt;/p&gt;&#xD;
&lt;p&gt;toChange.style.border = '1px solid #00f';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;上面代码可能引起多次 reflow 和重绘。有两种改进方法。如果元素采用了多个样式，而且这些样式值事先知道，可以通过修改元素 class 使用新样式：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;div {&lt;/p&gt;&#xD;
&lt;p&gt;background: #ddd;&lt;/p&gt;&#xD;
&lt;p&gt;color: #000;&lt;/p&gt;&#xD;
&lt;p&gt;border: 1px solid #000;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;div.highlight {&lt;/p&gt;&#xD;
&lt;p&gt;background: #333;&lt;/p&gt;&#xD;
&lt;p&gt;color: #fff;&lt;/p&gt;&#xD;
&lt;p&gt;border: 1px solid #00f;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;document.getElementById('mainelement').className = 'highlight';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第二种方法是为元素定义新样式，而不是一个个赋值。这主要用于动态修改，如在动画中，无法事前知道新样式值。通过使用&lt;em&gt;&amp;nbsp;style&lt;/em&gt;&amp;nbsp;对象的&amp;nbsp;&lt;em&gt;cssText&lt;/em&gt;&amp;nbsp;属性，或者通过&amp;nbsp;&lt;em&gt;setAttribute&lt;/em&gt;. 可以实现此技巧。Internet Explorer 不允许第二种形式，支持第一种形式。有些较老的浏览器，包括 Opera 8 需要使用第二种形式，不支持第一种形式。最简单的方式是测试看是否支持第一种形式，如果支持就使用，如果不支持则使用第二种形式。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var posElem = document.getElementById('animation');&lt;/p&gt;&#xD;
&lt;p&gt;var newStyle = 'background: ' + newBack + ';' +&lt;/p&gt;&#xD;
&lt;p&gt;'color: ' + newColor + ';' +&lt;/p&gt;&#xD;
&lt;p&gt;'border: ' + newBorder + ';';&lt;/p&gt;&#xD;
&lt;p&gt;if( typeof( posElem.style.cssText ) != 'undefined' ) {&lt;/p&gt;&#xD;
&lt;p&gt;posElem.style.cssText = newStyle;&lt;/p&gt;&#xD;
&lt;p&gt;} else {&lt;/p&gt;&#xD;
&lt;p&gt;posElem.setAttribute('style',newStyle);&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;用流畅性换取速度&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作为开发者，当然想要动画运行的越流畅越好，通常使用较小的时间间隔或较小的变化。如每10ms更新一次动画，或者每次移动1个像素。此动画可能在桌面电脑上或某些浏览器中可以完美运行。但10ms时间间隔可能是浏览器使用100%CPU才能达到的最小值。有些浏览器甚至不能完成&amp;mdash;&amp;mdash;要求每秒100个 reflow 对大部分浏览器来说都不容易。低性能的电脑或者其他设备可能无法达到此种速度，在这些设备上动画可能非常慢甚至失去响应。&lt;/p&gt;&#xD;
&lt;p&gt;因此最好暂时把开发者的骄傲放在一边，牺牲流畅性而换取速度。把时间间隔改为50ms或把动画步长设为5个像素，会消耗更少的计算资源，在低性能设备上也能正常运行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免搜索大量节点&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当需要查找节点时，尽量使用 DOM 内置方法和集合缩小搜索范围。如你想要定位某个包含某种属性的元素，可使用下面代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allElements = document.getElementsByTagName('*');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allElements.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( allElements[i].hasAttribute('someattr') ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;即使没听说过 XPath 这样的高级技巧，也可以看出上面的代码有两个问题导致速度变慢。首先它搜索每一个元素，而不是尝试缩小搜索范围。其次即使已经找到所需元素上卖弄代码还继续搜索。如果已知要找的元素在 id 为&amp;nbsp;&lt;em&gt;inhere&lt;/em&gt;的 div 中，最好使用下面的代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allElements = document.getElementById('inhere').getElementsByTagName('*');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allElements.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( allElements[i].hasAttribute('someattr') ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;break;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;如果已知要找元素是 div 的直接子节点，则下面的代码速度更快：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allChildren = document.getElementById('inhere').childNodes;&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allChildren.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( allChildren[i].nodeType == 1 &amp;amp;&amp;amp; allChildren[i].hasAttribute('someattr') ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;break;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;基本的思想就是尽量避免逐个查看 DOM 节点。DOM 有很多更好更快的方法，如 DOM 2 Traversal TreeWalker，效率要高于递归查找&amp;nbsp;&lt;em&gt;childNodes&lt;/em&gt;&amp;nbsp;集合。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用&lt;/strong&gt;&lt;strong&gt; XPath &lt;/strong&gt;&lt;strong&gt;提高速度&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;假如需要基于 H2-H4 元素在 HTML 网页中创建目录。在 HTML 中标题元素可以出现在很多地方，因此无法使用递归函数获取这些元素。传统 DOM 可能使用如下方法：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allElements = document.getElementsByTagName('*');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allElements.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( allElements[i].tagName.match(/^h[2-4]$/i) ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;若网页有超过2000个元素，此方法速度会很慢。如果支持 XPath，则可以使用一个快得多的方法，因为 XPath 查询引擎可比需被解释的 JavaScript 更好的被优化。在有些情况下，XPath 速度可能会快2个数量级以上。下面代码和上面完成一样的功能，但使用 XPath 因此速度要更快：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var headings = document.evaluate( '//h2|//h3|//h4', document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );&lt;/p&gt;&#xD;
&lt;p&gt;var oneheading;&lt;/p&gt;&#xD;
&lt;p&gt;while( oneheading = headings.iterateNext() ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面版本代码融合上述两种方法；在支持 XPath 的地方使用快速方法，在不支持时使用传统 DOM 方法：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;if( document.evaluate ) {&lt;/p&gt;&#xD;
&lt;p&gt;var headings = document.evaluate( '//h2|//h3|//h4', document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );&lt;/p&gt;&#xD;
&lt;p&gt;var oneheading;&lt;/p&gt;&#xD;
&lt;p&gt;while( oneheading = headings.iterateNext() ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;} else {&lt;/p&gt;&#xD;
&lt;p&gt;var allElements = document.getElementsByTagName('*');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allElements.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;if( allElements[i].tagName.match(/^h[2-4]$/i) ) {&lt;/p&gt;&#xD;
&lt;p&gt;...&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免在遍历&lt;/strong&gt;&lt;strong&gt; DOM &lt;/strong&gt;&lt;strong&gt;时修改&lt;/strong&gt;&lt;strong&gt; DOM&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有些 DOM 集合是实时的，如果在你的脚本遍历列表时相关元素产生变化，则此集合会立刻变化而不需要等待脚本遍历结束。&lt;em&gt;childNodes&lt;/em&gt;&amp;nbsp;集合和&lt;em&gt;&amp;nbsp;getElementsByTagName&amp;nbsp;&lt;/em&gt;返回的节点列表都是这样的实时集合。&lt;/p&gt;&#xD;
&lt;p&gt;如果在遍历这样的集合的同时向其中添加元素，则可能会遇到无限循环，因为你不停的向列表中添加元素，永远也不会碰到列表结束。这不是唯一的问题。为提高性能，可能会对这些集合做出优化，如记住其长度、记住脚本中上一个访问元素序号，这样在你访问下一个元素时可快速定位。&lt;/p&gt;&#xD;
&lt;p&gt;如果你此时修改 DOM 树，即使修改的元素不在此集合中，集合还是会重新搜索以查看是否有新元素。这样就无法记住上一个访问元素序号或记住集合长度，因为集合本身可能已经变了，这样就无法使用优化：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allPara = document.getElementsByTagName('p');&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allPara.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;allPara[i].appendChild(document.createTextNode(i));&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面的代码在 Opera 和 Internet Explorer 等主流浏览器中比上面代码快10倍以上。先创建一个要修改元素的静态列表，然后遍历静态列表并作出相应修改，而不是遍历&amp;nbsp;&lt;em&gt;getElementsByTagName&amp;nbsp;&lt;/em&gt;返回的节点列表：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var allPara = document.getElementsByTagName('p');&lt;/p&gt;&#xD;
&lt;p&gt;var collectTemp = [];&lt;/p&gt;&#xD;
&lt;p&gt;for( var i = 0; i &amp;lt; allPara.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;collectTemp[collectTemp.length] = allPara[i];&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;for( i = 0; i &amp;lt; collectTemp.length; i++ ) {&lt;/p&gt;&#xD;
&lt;p&gt;collectTemp[i].appendChild(document.createTextNode(i));&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;collectTemp = null;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用变量保存&lt;/strong&gt;&lt;strong&gt; DOM &lt;/strong&gt;&lt;strong&gt;值&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有些 DOM 返回值无法缓存，每次调用时都会重新调用函数。如&lt;em&gt;&amp;nbsp;getElementById&lt;/em&gt;&amp;nbsp;方法。下面是一个低效率代码的例子：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;document.getElementById('test').property1 = 'value1';&lt;/p&gt;&#xD;
&lt;p&gt;document.getElementById('test').property2 = 'value2';&lt;/p&gt;&#xD;
&lt;p&gt;document.getElementById('test').property3 = 'value3';&lt;/p&gt;&#xD;
&lt;p&gt;document.getElementById('test').property4 = 'value4';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此代码为定位同一个对象调用了四次&amp;nbsp;&lt;em&gt;getElementById&lt;/em&gt;&amp;nbsp;方法。下面的代码只调用了一次并将结果保存在变量中，单看这一个操作可能比上面单个操作要略慢，因为需要执行赋值语句。但后面不再需要调用 getElementById 方法！下面的代码比上面的代码要快5-10倍：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var sample = document.getElementById('test');&lt;/p&gt;&#xD;
&lt;p&gt;sample.property1 = 'value1';&lt;/p&gt;&#xD;
&lt;p&gt;sample.property2 = 'value2';&lt;/p&gt;&#xD;
&lt;p&gt;sample.property3 = 'value3';&lt;/p&gt;&#xD;
&lt;p&gt;sample.property4 = 'value4';&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;页面载入&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;避免保存来自其他文档的引用&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果文档访问过其他文档中的节点或对象，在脚本结束后避免保留这些引用。如果在全局变量或对象属性中保存过这些引用，通过设置为 null 清除之或者直接删除之。&lt;/p&gt;&#xD;
&lt;p&gt;原因是另一个文档被销毁后，如弹出窗口被关闭，尽管那个文档已经不再了，所有对那个文档中对象的引用都会在内存中保存整个 DOM 树和脚本环境。这也适用那些包含在frame，内联 frame，或 OBJECT 元素中的网页。.&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;var remoteDoc = parent.frames['sideframe'].document;&lt;/p&gt;&#xD;
&lt;p&gt;var remoteContainer = remoteDoc.getElementById('content');&lt;/p&gt;&#xD;
&lt;p&gt;var newPara = remoteDoc.createElement('p');&lt;/p&gt;&#xD;
&lt;p&gt;newPara.appendChild(remoteDoc.createTextNode('new content'));&lt;/p&gt;&#xD;
&lt;p&gt;remoteContainer.appendChild(newPara);&lt;/p&gt;&#xD;
&lt;p&gt;//remove references&lt;/p&gt;&#xD;
&lt;p&gt;remoteDoc = null;&lt;/p&gt;&#xD;
&lt;p&gt;remoteContainer = null;&lt;/p&gt;&#xD;
&lt;p&gt;newPara = null;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;快速历史浏览（&lt;/strong&gt;&lt;strong&gt;history navigation&lt;/strong&gt;&lt;strong&gt;）&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Opera (和许多其他浏览器) 默认使用快速历史浏览。当用户点击后退或前进时，将记录当前页面的状态及页面中的脚本。当用户回到刚才的页面时，将立即显示刚才的页面，如同从没有离开此页一样。不需要重新载入页面也不需要重新初始化。脚本继续运行，DOM 也和离开此页前完全相同。对用户来说这样反应很快，载入较慢的网页应用程序会有更好的性能。&lt;/p&gt;&#xD;
&lt;p&gt;尽管 Opera 提供&lt;a href="http://www.opera.com/support/search/supsearch.dml?index=827"&gt;开发者控制此行为&lt;/a&gt;的方式，最好还是尽量保持快速历史浏览功能。也就是说最好避免会影响此功能的动作，包括提交表单时禁用表单控件或让页面内容透明或不可见的渐出特效。&lt;/p&gt;&#xD;
&lt;p&gt;简单的解决方法是使用 onunload 监听器 reset 渐出效果或重新 enable 表单控件。注意对有些浏览器来说，如 Firefox 和 Safari，为&amp;nbsp;&lt;em&gt;unload&lt;/em&gt;&amp;nbsp;事件添加监听器会禁用历史浏览。而在 Opera 中禁用提交按钮会导致禁用历史浏览。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;window.onunload = function () {&lt;/p&gt;&#xD;
&lt;p&gt;document.body.style.opacity = '1';&lt;/p&gt;&#xD;
&lt;p&gt;};&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用&lt;/strong&gt;&lt;strong&gt; XMLHttpRequest&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此技巧不一定适用于每一个项目，但它能显著降低从服务器下载数据量，也能避免重载页面时销毁及创建脚本环境的开销。开始时正常载入页面，然后使用 XMLHttpRequest 下载最少量的新内容。这样 JavaScript 环境会一直存在。&lt;/p&gt;&#xD;
&lt;p&gt;注意此方法也可能会导致问题。首先此方法完全破坏历史浏览。尽管可通过内联frame储存信息来解决此问题，但这显然不符合使用 XMLHttpRequest 的初衷。因此尽量少用，只在不需要回退到先前内容时使用。此方法还会影响辅助器具的使用（ assistive device），因为将无法察觉 DOM 已被更改，因此最好在不会引起问题的地方使用XMLHttpRequest。&lt;/p&gt;&#xD;
&lt;p&gt;若 JavaScript 不可用或不支持 XMLHttpRequest 则此技巧也会失效。最简单避免此问题的方法是使用正常链接指向新页面。增加一个检测链接是否被激活的事件处理器。处理器可以探测是否支持 XMLHttpRequest ，如果支持则载入新数据并阻止链接默认动作。载入新数据后，用其取代页面的部分内容，然后 request 对象就可以被销毁并允许垃圾收集器回收内存资源。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;document.getElementById('nextlink').onclick = function () {&lt;/p&gt;&#xD;
&lt;p&gt;if( !window.XMLHttpRequest ) { return true; }&lt;/p&gt;&#xD;
&lt;p&gt;var request = new XMLHttpRequest();&lt;/p&gt;&#xD;
&lt;p&gt;request.onreadystatechange = function () {&lt;/p&gt;&#xD;
&lt;p&gt;if( request.readyState != 4 ) { return; }&lt;/p&gt;&#xD;
&lt;p&gt;var useResponse = request.responseText.replace( /^[\w\W]*&amp;lt;div id="container"&amp;gt;|&amp;lt;\/div&amp;gt;\s*&amp;lt;\/body&amp;gt;[\w\W]*$/g , '' );&lt;/p&gt;&#xD;
&lt;p&gt;document.getElementById('container').innerHTML = useResponse;&lt;/p&gt;&#xD;
&lt;p&gt;request.onreadystatechange = null;&lt;/p&gt;&#xD;
&lt;p&gt;request = null;&lt;/p&gt;&#xD;
&lt;p&gt;};&lt;/p&gt;&#xD;
&lt;p&gt;request.open( 'GET', this.href, true );&lt;/p&gt;&#xD;
&lt;p&gt;request.send(null);&lt;/p&gt;&#xD;
&lt;p&gt;return false;&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;动态创建&lt;/strong&gt;&lt;strong&gt; SCRIPT &lt;/strong&gt;&lt;strong&gt;元素&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;加载和处理脚本需要时间，但有些脚本在载入后却从来未被使用。载入这样的脚本浪费时间和资源，并影响当前的脚本执行，因此最好不要引用这种不用的脚本。可以通过简单的加载脚本判断需要哪些脚本，并只为后面需要的脚本创建 script 元素。&lt;/p&gt;&#xD;
&lt;p&gt;理论上，这个加载脚本可在页面载入结束后通过创建 SCRIPT 元素加入 DOM。这在所有主流浏览器中都可以正常工作，但这可能对浏览器的提出更多的要求，甚至大于要载入的脚本本身。而且在页面载入之前可能就需要脚本，因此最好在页面加载过程中，通过&amp;nbsp;document.write&amp;nbsp;创建 script 标签。记住一定要转义&amp;lsquo;/&amp;rsquo;字符防止终止当前脚本运行：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;if( document.createElement &amp;amp;&amp;amp; document.childNodes ) {&lt;/p&gt;&#xD;
&lt;p&gt;document.write('&amp;lt;script type="text\/javascript" src="dom.js"&amp;gt;&amp;lt;\/script&amp;gt;');&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;if( window.XMLHttpRequest ) {&lt;/p&gt;&#xD;
&lt;p&gt;document.write('&amp;lt;script type="text\/javascript" src="xhr.js"&amp;gt;&amp;lt;\/script&amp;gt;');&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;location.replace()&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;控制历史项&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有时需要通过脚本修改页面地址。常见的方法是给&amp;nbsp;location.href&amp;nbsp;赋新地址。这将和打开新链接一样添加新历史项、载入新页面。&lt;/p&gt;&#xD;
&lt;p&gt;有时不想添加新历史项，因为用户不需要回到前面的页面。这在内存资源有限的设备中很有用。通过替换历史项恢复当前页面所使用的内存。可以通过&amp;nbsp;location.replace()方法实现。&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;location.replace('newpage.html');&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注意页面仍被保存在 cache 中，仍占用内存，但比保存在历史中要少的多。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者&amp;nbsp;&lt;a href="http://dev.opera.com/author/28143"&gt;Mark 'Tarquin' Wilton-Jones&lt;/a&gt;&amp;nbsp;&amp;middot; 2006年11月2日&lt;/p&gt;&#xD;
&lt;p&gt;本文翻译自&amp;nbsp;&lt;a href="http://dev.opera.com/articles/view/efficient-javascript/"&gt;Efficient JavaScript&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaxIE/aggbug/1856327.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaxIE/archive/2010/10/20/1856327.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
