<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>网站前端,web前端,前端脚本,前端优化&#124;时代前端 &#187; JavaScript</title>
	<atom:link href="http://www.52shidai.com/category/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.52shidai.com</link>
	<description>网站前端研究中心</description>
	<lastBuildDate>Thu, 02 Feb 2012 03:36:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>jQ.Mobi—针对移动设备优化的jQuery</title>
		<link>http://www.52shidai.com/javascript/jquery/926.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/926.html#comments</comments>
		<pubDate>Thu, 02 Feb 2012 03:06:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[前端优化]]></category>
		<category><![CDATA[jQ.Mobi]]></category>
		<category><![CDATA[移动设备]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=926</guid>
		<description><![CDATA[appMobi已经开放了jQ.Mobi的源代码，它对jQuery进行了重写，与jQuery Mobile竞争以分享开发者份额。 jQ.Mobi是jQuery的部分重写版本，但针对HTML5和移动设备做了优化。它的文件大小只有3KB，而jQuery则有35KB，并且据JSPerf test的数据，它在Android上要比jQuery快3倍，在iOS上快2.2倍。该框架是由appMobi发布并开源的。因为jQ.Mobi是插件式开发，所以它的编程语法和jQuery完全相同。jQ.Mobi只包含jQuery API的子集，也就是appMobi认为给iOS和Android提供完全相同用户体验最重要的那部分。 jQ.Mobi由三个组件组成： 查询（query）程序库 jQ.Ui——为WebKit浏览器提供的用户界面程序库 jQ.Plugin——针对WebKit浏览器的插件支持 他们创建了一个演示来展现框架的功能。 人们为什么要在jQuery团队发布了jQuery Mobile 1.0两个月之后，又创建了新的基于jQuery的JavaScript框架呢？appMobi这样做的原因在于，jQuery植根于桌面浏览器，因此他们的移动版本并没有很好地优化，并且也无法在移动设备上——特别是在Android设备中——提供良好的体验。 jQuery团队的移动领域主管Todd Parker承认jQuery Mobile中存在一些问题，并且团队刚刚发布了维护版本（1.0.1），其中修正了大量缺陷，他们还会在1.2版本中提供更多小工具并做出改进。 查看英文原文：jQ.Mobi – jQuery Optimized for Mobile Devices 您可能感兴趣的文章jQuery-bind不能处理绑定hover事件9个实用jQuery日历插件jQuery 操作css 设置样式JQUERY操作XML实例教程不要滥用jQuery的$(this)编写高性能的jQuery代码jQuery中的mouseenter和mouseleave事件流动导航菜单-Fluid Navigation 使用Jquery+CSS创建高亮显示文本中重要关键字（Jquery ）12个用jQuery插件改变Button按钮的漂亮特效]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.52shidai.com/?attachment_id=4232" rel="attachment wp-att-4232"><img title="QQ截图20120131164856" src="http://www.mhtml5.com/wp-content/uploads/2012/01/QQ%E6%88%AA%E5%9B%BE20120131164856.jpg" alt="" width="283" height="323" /></a></p>
<p>appMobi已经开放了<a href="http://www.jqmobi.com/">jQ.Mobi</a>的源代码，它对<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>进行了重写，与<a href="http://jquerymobile.com/">jQuery Mobile</a>竞争以分享开发者份额。</p>
<p><a href="http://jqmobi.com/">jQ.Mobi</a>是<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>的部分重写版本，但针对HTML5和<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e7%a7%bb%e5%8a%a8%e8%ae%be%e5%a4%87" title="查看 移动设备 中的全部文章" target="_blank">移动设备</a></span>做了优化。它的文件大小只有3KB，而jQuery则有35KB，并且据<a href="http://jsperf.com/jqm3/4">JSPerf test</a>的数据，它在Android上要比jQuery快3倍，在iOS上快2.2倍。该框架是由<a href="http://www.appmobi.com/">appMobi</a>发布并开源的。因为<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jq-mobi" title="查看 jQ.Mobi 中的全部文章" target="_blank">jQ.Mobi</a></span>是插件式开发，所以它的编程语法和jQuery完全相同。<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jq-mobi" title="查看 jQ.Mobi 中的全部文章" target="_blank">jQ.Mobi</a></span>只包含jQuery API的子集，也就是appMobi认为给iOS和Android提供完全相同用户体验最重要的那部分。</p>
<p>jQ.Mobi由三个组件组成：</p>
<ul>
<li>查询（query）程序库</li>
<li>jQ.Ui——为WebKit浏览器提供的用户界面程序库</li>
<li>jQ.Plugin——针对WebKit浏览器的插件支持</li>
</ul>
<p>他们创建了一个<a href="http://www.jqmobi.com/testdrive/index.html">演示</a>来展现框架的功能。</p>
<p>人们为什么要在jQuery团队发布了<a href="http://jquerymobile.com/">jQuery Mobile 1.0</a>两个月之后，又创建了新的基于jQuery的JavaScript框架呢？appMobi这样做的原因在于，jQuery植根于桌面浏览器，因此他们的移动版本并没有很好地优化，并且也无法在<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e7%a7%bb%e5%8a%a8%e8%ae%be%e5%a4%87" title="查看 移动设备 中的全部文章" target="_blank">移动设备</a></span>上——特别是在Android设备中——提供良好的体验。</p>
<p>jQuery团队的移动领域主管Todd Parker承认<a href="http://jquerymobile.com/blog/2012/01/10/upcoming-releases-1-0-1-1-1-and-beyond/">jQuery Mobile中存在一些问题</a>，并且团队刚刚发布了维护版本（<a href="http://jquerymobile.com/blog/2012/01/26/jquery-mobile-1-0-1-released/">1.0.1</a>），其中修正了大量缺陷，他们还会在1.2版本中提供更多小工具并做出改进。</p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2012/01/jQMobi">jQ.Mobi – jQuery Optimized for Mobile Devices</a></p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/748.html" title="jQuery-bind不能处理绑定hover事件">jQuery-bind不能处理绑定hover事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/738.html" title="9个实用jQuery日历插件">9个实用jQuery日历插件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/732.html" title="jQuery 操作css 设置样式">jQuery 操作css 设置样式</a></li><li><a href="http://www.52shidai.com/javascript/jquery/705.html" title="JQUERY操作XML实例教程">JQUERY操作XML实例教程</a></li><li><a href="http://www.52shidai.com/javascript/jquery/621.html" title="不要滥用jQuery的$(this)">不要滥用jQuery的$(this)</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/926.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Path的Menu菜单（加号）效果</title>
		<link>http://www.52shidai.com/javascript/jquery/832.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/832.html#comments</comments>
		<pubDate>Tue, 13 Dec 2011 03:39:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[html5/css3]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Path]]></category>
		<category><![CDATA[效果]]></category>
		<category><![CDATA[菜单]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=832</guid>
		<description><![CDATA[Path最新的更新，通过优秀的用户体验设计赢得了大批用户和业内的好评，被成为移动版的“Facebook”！一时之间，在国内你如果不知道Path2.0的话，你就OUT了。 Path 2的UI设计相当出色。最核心的是左下角的红白色加号按钮，点击后会出现6类功能，依次是：照片、和谁在一起、当前地点、在听的音乐、在想的事情、以及睡眠，使用起来得心应手，十分方便。 你不仅可以和Path好友分享，还能把你的分享发布到Facebook或Foursquare等网站上。和之前版本相比，Path 2从侧重照片分享走向“分享一切”、好友上限从50人增加到150人。 除了在产品圈热议之外；其实在技术圈，被讨论最多的是path那个Menu的实现问题。所有给力的产品都离不开程序猿同学的各种努力，看看怎样用不同的语言实现Path2.0的Menu效果！ @LeveyZhu 的实现效果： https://github.com/levey/QuadCurveMenu Tunghsiao Liu ：CSS实现的效果：http://sparanoid.com/lab/path-menu/ 一老外兄弟的实现：https://github.com/beaucollins/radial-menu Benzhe ：javacript实现 https://github.com/ben304/Path2.0-Menu/ 再来一个CSS实现：http://lab.victorcoulon.fr/css/path-menu/ 貌似被ban 本文实现方式整理自中文技术问答网站SegmentFault 您可能感兴趣的文章非常经典动画导航菜单效果代码jquery 经典动画菜单效果]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.52shidai.com/wp-content/uploads/2011/12/path-menu-xiaoguo.jpg"><img class="alignnone size-full wp-image-833" title="Path的Menu菜单（加号）效果" src="http://www.52shidai.com/wp-content/uploads/2011/12/path-menu-xiaoguo.jpg" alt="Path的Menu菜单（加号）效果" width="278" height="400" /></a></p>
<p><a href="http://path.com/" target="_blank">Path</a>最新的更新，通过优秀的用户体验设计赢得了大批用户和业内的好评，被成为移动版的“Facebook”！一时之间，在国内你如果不知道<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/path" title="查看 Path 中的全部文章" target="_blank">Path</a></span>2.0的话，你就OUT了。</p>
<p><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/path" title="查看 Path 中的全部文章" target="_blank">Path</a></span> 2的UI设计相当出色。最核心的是左下角的红白色加号按钮，点击后会出现6类功能，依次是：照片、和谁在一起、当前地点、在听的音乐、在想的事情、以及睡眠，使用起来得心应手，十分方便。</p>
<p>你不仅可以和Path好友分享，还能把你的分享发布到Facebook或Foursquare等网站上。和之前版本相比，Path 2从侧重照片分享走向“分享一切”、好友上限从50人增加到150人。</p>
<p>除了在产品圈热议之外；其实在技术圈，被讨论最多的是path那个<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/menu" title="查看 Menu 中的全部文章" target="_blank">Menu</a></span>的实现问题。所有给力的产品都离不开程序猿同学的各种努力，看看怎样用不同的语言实现Path2.0的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/menu" title="查看 Menu 中的全部文章" target="_blank">Menu</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%95%88%e6%9e%9c" title="查看 效果 中的全部文章" target="_blank">效果</a></span>！</p>
<ol>
<li><a href="https://twitter.com/#!/LeveyZhu" target="_blank">@LeveyZhu</a> 的实现<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%95%88%e6%9e%9c" title="查看 效果 中的全部文章" target="_blank">效果</a></span>： <a href="https://github.com/levey/QuadCurveMenu" target="_blank">https://github.com/levey/QuadCurveMenu</a></li>
<li>Tunghsiao Liu ：CSS实现的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%95%88%e6%9e%9c" title="查看 效果 中的全部文章" target="_blank">效果</a></span>：<a href="http://sparanoid.com/lab/path-menu/" target="_blank">http://sparanoid.com/lab/path-menu/</a></li>
<li>一老外兄弟的实现：<a href="https://github.com/beaucollins/radial-menu" target="_blank">https://github.com/beaucollins/radial-menu</a></li>
<li>Benzhe ：javacript实现 <a href="https://github.com/ben304/Path2.0-Menu/" target="_blank">https://github.com/ben304/Path2.0-Menu/</a></li>
<li>再来一个CSS实现：<a href="http://lab.victorcoulon.fr/css/path-menu/" target="_blank">http://lab.victorcoulon.fr/css/path-menu/</a> 貌似被ban</li>
</ol>
<p>本文实现方式整理自中文技术问答网站<a href="http://segmentfault.com/question/761/" target="_blank">SegmentFault</a></p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/333.html" title="非常经典动画导航菜单效果代码">非常经典动画导航菜单效果代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/83.html" title="jquery 经典动画菜单效果">jquery 经典动画菜单效果</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/832.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>31个Javascript的实用工具</title>
		<link>http://www.52shidai.com/javascript/759.html</link>
		<comments>http://www.52shidai.com/javascript/759.html#comments</comments>
		<pubDate>Tue, 22 Nov 2011 13:49:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[前端优化]]></category>
		<category><![CDATA[工具]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=759</guid>
		<description><![CDATA[下面提到的这些工具包括各种实用工具，优化器，测试和调试工具，它们可以提高开发者创建Web站点的效率。 1，JavaScript compressor and comparison tool 有许多工具可以帮助你压缩JavaScript代码，但是这个过程比较耗时，并且，对于某个特定的场景来说，很难分析出具体哪个工具表现的最好。这 个应用程序可以对那些工具的常规压缩做一个汇总统计，它可以让开发者在不安装这些工具的情况下，对在自己的JavaScript代码上应用那些工具的情况 进行比较。 具体可以参考：http://compressorrater.thruhere.net/ 2，Regular expression validator tool 这个基于Web的JavaScript正则表达式验证器可以让你轻松地为JavaScript测试和编写正则表达式。这个工具可以帮助你检查语法方面的错误，此外，它还为你提供一个正则表达式库。 具体可以参考：http://tools.netshiftmedia.com/regexlibrary/ 3，Regular expression generator 在IE中，这个脚本运行在 JDC 1.0.3 之上，这就是它在 Firefox，Opera 和 Safari 上运行的稍微快一些的原因。 具体可以参考：http://www.jslab.dk/tools.regex.php 4，Jsbeautifier 这个微型的美化器可以重新调整 bookmarklet 和丑陋的JavaScript的格式和缩进，也可以对使用流行的 Dean Edward 的 Packer 打包的脚本进行拆包，对通过javascriptobfuscator.com 混淆的脚本进行反混淆。 具体可以参考：http://jsbeautifier.org/ 5，Jsbin JS Bin是一个开源的，协同的JavaScript调试工具。 具体可以参考：http://jsbin.com/ &#160; 6，Jslint JSlint会对JavaScript的源代码进行扫描。如果它发现了一个问题，会返回一个描述这个问题的消息和源代码中的大概位置。这个问题不一 定是一个语法错误（虽然通常情况下，这个问题都是一个语法错误）。JSLint 会发现一些样式约定和结构问题。它无法证明你的程序是正确的。它只能帮助你发现一些问题。 具体可以参考：http://www.jslint.com/ 7，Rockstarapps Rockstarapps 的使命比较简单：给开发者提供一套工具，让他们可以在云中创建经过高度优化的Web应用程序。 具体可以参考：http://rockstarapps.com/joomla-1.5.8/home.html 8，Prettyprinter 这是一个源代码美化器（源代码格式化器），和缩进的效果是类似的。 [...]]]></description>
			<content:encoded><![CDATA[<p>下面提到的这些<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%b7%a5%e5%85%b7" title="查看 工具 中的全部文章" target="_blank">工具</a></span>包括各种实用<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%b7%a5%e5%85%b7" title="查看 工具 中的全部文章" target="_blank">工具</a></span>，优化器，测试和调试<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%b7%a5%e5%85%b7" title="查看 工具 中的全部文章" target="_blank">工具</a></span>，它们可以提高开发者创建Web站点的效率。</p>
<p><strong>1，<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/javascript" title="查看 JavaScript 中的全部文章" target="_blank">JavaScript</a></span> compressor and comparison tool</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502580.jpg" alt="JavaScript compressor and comparison tool" width="600" height="300" border="0" /></p>
<p>有许多工具可以帮助你压缩<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/javascript" title="查看 JavaScript 中的全部文章" target="_blank">JavaScript</a></span>代码，但是这个过程比较耗时，并且，对于某个特定的场景来说，很难分析出具体哪个工具表现的最好。这 个应用程序可以对那些工具的常规压缩做一个汇总统计，它可以让开发者在不安装这些工具的情况下，对在自己的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/javascript" title="查看 JavaScript 中的全部文章" target="_blank">JavaScript</a></span>代码上应用那些工具的情况 进行比较。</p>
<p>具体可以参考：http://compressorrater.thruhere.net/</p>
<p><strong>2，Regular expression validator tool</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502581.jpg" alt="Regular expression validator tool" width="600" height="300" border="0" /></p>
<p>这个基于Web的JavaScript正则表达式验证器可以让你轻松地为JavaScript测试和编写正则表达式。这个工具可以帮助你检查语法方面的错误，此外，它还为你提供一个正则表达式库。</p>
<p>具体可以参考：http://tools.netshiftmedia.com/regexlibrary/</p>
<p><strong>3，Regular expression generator</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502582.jpg" alt="Regular expression generator" width="600" height="300" border="0" /></p>
<p>在IE中，这个脚本运行在 JDC 1.0.3 之上，这就是它在 Firefox，Opera 和 Safari 上运行的稍微快一些的原因。</p>
<p>具体可以参考：http://www.jslab.dk/tools.regex.php</p>
<p><strong>4，Jsbeautifier</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502583.jpg" alt="Jsbeautifier" width="600" height="300" border="0" /></p>
<p>这个微型的美化器可以重新调整 bookmarklet 和丑陋的JavaScript的格式和缩进，也可以对使用流行的 Dean Edward 的 Packer 打包的脚本进行拆包，对通过javascriptobfuscator.com 混淆的脚本进行反混淆。</p>
<p>具体可以参考：http://jsbeautifier.org/</p>
<p><strong>5，Jsbin</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502584.jpg" alt="Jsbin" width="600" height="300" border="0" /></p>
<p>JS Bin是一个开源的，协同的JavaScript调试工具。</p>
<p>具体可以参考：http://jsbin.com/</p>
<p>&nbsp;</p>
<p><strong>6，Jslint</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502585.jpg" alt="Jslint" width="600" height="300" border="0" /></p>
<p>JSlint会对JavaScript的源代码进行扫描。如果它发现了一个问题，会返回一个描述这个问题的消息和源代码中的大概位置。这个问题不一 定是一个语法错误（虽然通常情况下，这个问题都是一个语法错误）。JSLint 会发现一些样式约定和结构问题。它无法证明你的程序是正确的。它只能帮助你发现一些问题。</p>
<p>具体可以参考：http://www.jslint.com/</p>
<p><strong>7，Rockstarapps</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502586.jpg" alt="Rockstarapps" width="600" height="300" border="0" /></p>
<p>Rockstarapps 的使命比较简单：给开发者提供一套工具，让他们可以在云中创建经过高度优化的Web应用程序。</p>
<p>具体可以参考：http://rockstarapps.com/joomla-1.5.8/home.html</p>
<p><strong>8，Prettyprinter</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502587.jpg" alt="Prettyprinter" width="600" height="300" border="0" /></p>
<p>这是一个源代码美化器（源代码格式化器），和缩进的效果是类似的。</p>
<p>具体可以参考：http://www.prettyprinter.de/</p>
<p><strong>9，Pixastic</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502588.jpg" alt="Pixastic" width="600" height="300" border="0" /></p>
<p>Pixastic是一个实验性的库，使用这个库，你只需要一点点的 JavaScript 代码，就可以执行各种图像操作。它支持的效果包括淡化/灰度调整，倒置，翻转，亮度/对比度的调整，色调/饱和度，浮现，模糊，等等。</p>
<p>具体可以参考：http://www.pixastic.com/</p>
<p><strong>10，Extjs</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/1502589.jpg" alt="Extjs" width="600" height="300" border="0" /></p>
<p>构建丰富的，可持续发展的Web应用程序比以往更加快捷了。许多著名的公司（Adobe, Amazon, CNN 等）都在使用extjs。</p>
<p>具体可以参考：http://www.sencha.com/</p>
<p>&nbsp;</p>
<p><strong>11，Slickspeed</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025810.jpg" alt="Slickspeed" width="600" height="300" border="0" /></p>
<p>各种测试在一个中立的环境中运行，在主要的JavaScript测试中，既不包括库也不包括框架，这样可以避免偏颇。</p>
<p>具体可以参考：http://mootools.net/slickspeed/</p>
<p><strong>12，Scriptalizer</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025811.jpg" alt="Scriptalizer" width="600" height="300" border="0" /></p>
<p>对于那些在互联网上部署和传输的解释性语言（例如：JavaScript）来说，对源代码进行最小化是很有帮助的，因为这可以减少需要传输的数据量。</p>
<p>具体可以参考：http://www.scriptalizer.com/</p>
<p><strong>13，Yui compressor</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025812.jpg" alt="Yui compressor" width="600" height="300" border="0" /></p>
<p>YUI Compressor 是100%安全的 JavaScript 最小化器，它比大多数其他工具的压缩比都要高。在YUI库上的测试表明，和 JSMin 比起来，它可以节省超过20%的体积（在HTTP压缩以后，这个数字是10%）。</p>
<p>具体可以参考：http://developer.yahoo.com/yui/compressor/</p>
<p><strong>14，Js minifier</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025813.jpg" alt="Js minifier" width="600" height="300" border="0" /></p>
<p>具体可以参考：http://fmarcia.info/jsmin/test.html</p>
<p><strong>15，Jslitmus</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025814.jpg" alt="Jslitmus" width="600" height="300" border="0" /></p>
<p>JSLitmus 是一个轻量级的工具，主要用于创建 ad-hoc JavaScript benchmark tests。</p>
<p>具体可以参考：http://broofa.com/Tools/JSLitmus/</p>
<p>&nbsp;</p>
<p><strong>16，Js regular expression tester</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025815.jpg" alt="Js regular expression tester" width="600" height="300" border="0" /></p>
<p>这个方便的实用程序可以在一个浏览器中，使用 JavaScript 来测试 JavaScript 正则表达式。它的界面和其他正则表达式测试工具类似，但是，和其他工具不同的是，它用JavaScript 测试正则表达式的 JavaScript 实现。</p>
<p>具体可以参考：http://www.codeproject.com/KB/scripting/regex2.aspx</p>
<p><strong>17，Qooxdoo</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025816.jpg" alt="Qooxdoo" width="600" height="300" border="0" /></p>
<p>qooxdoo是一个集综合性和创新性于一身的框架，它主要用于创建富互联网应用程序（RIA）。面向对象的 JavaScript 可以让开发者构建跨浏览器的应用程序。无须掌握HTML, CSS的知识，也无须掌握 DOM 知识。</p>
<p>具体可以参考：http://qooxdoo.org/</p>
<p><strong>18，JavascriptMVC</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025817.jpg" alt="JavascriptMVC" width="600" height="300" border="0" /></p>
<p>JavascriptMVC是一个开源的框架，它融合了企业级的 JavaScript 开发方面的最佳理念。它可以通过执行最佳实践，增加可维护性，和推广约定优于配置的理念等方式来帮助你成功地完成项目。</p>
<p>具体可以参考：http://javascriptmvc.com/</p>
<p><strong>19，GNUcitizen</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025818.jpg" alt="GNUcitizen" width="600" height="300" border="0" /></p>
<p>为了把JavaScript攻击向量和其他的客户端和服务端技术组合在一起，AttackAPI提供了简单而直观的编程界面。</p>
<p>具体可以参考：http://www.gnucitizen.org/blog/attackapi/</p>
<p><strong>20，Jsfuzzer</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025819.jpg" alt="Jsfuzzer" width="600" height="300" border="0" /></p>
<p>这个 fuzzing 工具支持事件，标签，样式和 HTML 属性的 fuzzing。你可以使用各种深度的不完整标签，也可以对所有参数进行随机排列。它还包含一个带有所有新的攻击向量的数据库。</p>
<p>具体可以参考：http://code.google.com/p/jsfuzzer/</p>
<p>&nbsp;</p>
<p><strong>21，J3unit</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025820.jpg" alt="J3unit" width="600" height="300" border="0" /></p>
<p>J3Unit是一个面向对象的 JavaScript 单元测试框架。J3Unit可以直接在Web浏览器中运行JavaScript测试，也可以自动地运行 JUnit 和Jetty。J3Unit是建立在JSUnit 和 Script.aculo.us 基础之上的，它提供了一种更好的方式来自动化JavaScript单元测试。</p>
<p>具体可以参考：http://j3unit.sourceforge.net/</p>
<p><strong>22，Jsunit</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025821.jpg" alt="Jsunit" width="600" height="300" border="0" /></p>
<p>JsUnit是一个客户端（浏览器内）JavaScript单元测试框架。它实际上是JUnit到JavaScript的一个通道。此外，它还包括一个平台，这个平台可以自动地执行多个浏览器和运行不同的操作系统的多台机器上的测试。</p>
<p>具体可以参考：http://www.jsunit.net/</p>
<p><strong>23,Firebug</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025822.jpg" alt="Firebug" width="600" height="300" border="0" /></p>
<p>Firebug是和 Firefox 集成在一起的，当你浏览页面的时候，你随时可以使用它提供的丰富的Web开发工具。在任何一个Web页面中，你都可以实时地编辑，调试和监控 CSS，HTML，和JavaScript。</p>
<p>具体可以参考：http://getfirebug.com/</p>
<p><strong>24，Venkman</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025823.jpg" alt="Venkman" width="600" height="300" border="0" /></p>
<p>Venkman 是 Mozilla 的 JavaScript 调试器的代号。Venkman 旨在为基于 Gecko 的浏览器（即：Firefox 3.x,Netscape 7.x 系列的浏览器）提供一个强大的 JavaScript 调试环境。</p>
<p>具体可以参考：http://www.mozilla.org/projects/venkman/</p>
<p><strong>25，Drosera</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025824.jpg" alt="Drosera" width="600" height="300" border="0" /></p>
<p>为了调试你的应用程序中的 JavaScript 代码，你需要为你的应用程序指定一个默认的“bundle identifier”。此外，你还需要使用 TOT WebKit 框架来发布你的应用程序。通过 WebKitTools/Scripts 内的 run-webkit-app 脚本，你可以轻松地完成这些工作，然后，你会发现你的应用程序已经显示在 Drosera 的窗口中了。</p>
<p>具体可以参考：http://webkit.org/blog/61/introducing-drosera/</p>
<p>&nbsp;</p>
<p><strong>26，Dragonfly</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025825.jpg" alt="Dragonfly" width="600" height="300" border="0" /></p>
<p>欢迎 Opera Dragonfly 的 alpha版的到来，这是一个为基于 Presto 的 Opera 浏览器而提供的功能完备的调试环境。Opera Dragonfly 提供的那些工具可以让你更快速，更轻松地进行开发，它们可以调试你的 JavaScript 代码，也可以检查DOM，CSS，网络流量和数据存储。Opera Dragonfly 内置的远程调试功能让移动开发变得前所未有的轻松。</p>
<p>具体可以参考：http://www.opera.com/dragonfly/</p>
<p><strong>27，Nitobibug</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025826.jpg" alt="Nitobibug" width="600" height="300" border="0" /></p>
<p>对于专家和新手来说，NitobiBug 都是一个实用的工具。它让 JavaScript 和 DOM 问题的调试变得更加快捷，更加简单。</p>
<p>具体可以参考：http://www.nitobibug.com/</p>
<p><strong>28，Wavemaker</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025827.jpg" alt="Wavemaker" width="600" height="300" border="0" /></p>
<p>具体可以参考：http://www.wavemaker.com/</p>
<p><strong>29，Jaxer</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025828.jpg" alt="Jaxer" width="600" height="300" border="0" /></p>
<p>Jaxer是一个 Aptana Ajax Server，它内置在 Aptana Studio 中。Jaxer可以让你在提供那个页面以前或者是在回调期间，在服务器上执行 JavaScript 代码。</p>
<p>具体可以参考：http://jaxer.org/</p>
<p><strong>30，Jxlib</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025829.jpg" alt="Jxlib" width="600" height="300" border="0" /></p>
<p>一个 JavaScript 库，主要用于创建基于传说中的 MooTools 库的图形化的用户界面。</p>
<p>具体可以参考：http://jxlib.org/</p>
<p><strong>31，Dojotoolkit</strong></p>
<p><img title="在新窗口打开图片" src="http://images.51cto.com/files/uploadimg/20101206/15025830.jpg" alt="Dojotoolkit" width="600" height="300" border="0" /></p>
<p>Dojo 可以节省你的时间，提供强大的性能，缩短你的开发过程。为了提供良好的Web体验，有经验的开发人员都会使用这个工具包。</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/web-front/801.html" title="Web 前端优化最佳实践之 JavaScript 篇">Web 前端优化最佳实践之 JavaScript 篇</a></li><li><a href="http://www.52shidai.com/javascript/661.html" title="javascript 正则表达式-替换">javascript 正则表达式-替换</a></li><li><a href="http://www.52shidai.com/javascript/614.html" title="高质量JavaScript代码书写基本要点|值得收藏">高质量JavaScript代码书写基本要点|值得收藏</a></li><li><a href="http://www.52shidai.com/seo/611.html" title="前端开发的一些必备工具信息">前端开发的一些必备工具信息</a></li><li><a href="http://www.52shidai.com/javascript/585.html" title="js入门学习：Javascript的学习笔记">js入门学习：Javascript的学习笔记</a></li><li><a href="http://www.52shidai.com/javascript/583.html" title="学习JavaScript三件必须了解的事">学习JavaScript三件必须了解的事</a></li><li><a href="http://www.52shidai.com/javascript/556.html" title="JavaScript操作iframe里的dom">JavaScript操作iframe里的dom</a></li><li><a href="http://www.52shidai.com/javascript/323.html" title="javascript中的107个基础知识收集整理">javascript中的107个基础知识收集整理</a></li><li><a href="http://www.52shidai.com/seo/298.html" title="所有网站长必备的SEO工具大全">所有网站长必备的SEO工具大全</a></li><li><a href="http://www.52shidai.com/javascript/62.html" title="JavaScript面向对象之静态与非静态类">JavaScript面向对象之静态与非静态类</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/759.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>判断IE浏览器的简单快速方法</title>
		<link>http://www.52shidai.com/javascript/753.html</link>
		<comments>http://www.52shidai.com/javascript/753.html#comments</comments>
		<pubDate>Sun, 20 Nov 2011 08:48:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[判断IE]]></category>
		<category><![CDATA[判断浏览器]]></category>
		<category><![CDATA[浏览器兼容]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=753</guid>
		<description><![CDATA[说道浏览器兼容一直让人头痛。处理兼容问题经常要判断用户浏览器类型。 以前要写一大窜代码来判断是否为ＩＥ浏览器。以后再也不用这么麻烦了。 第一种方法：通过IE与非IE浏览器对垂直制表符支持特性搞出的一段简短的条件： var ie = !+”\v1″; 第二种方法：利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器，如果数组里面最后一个字符为逗号，JS 引擎会自动剔除它。 var ie = !-[1,]; 大家可以测试一下： var ie = !-[1,]; alert(ie); 赶快试试，这个判断 该死的ie把，这样能让你事半功倍。 随机日志推荐]]></description>
			<content:encoded><![CDATA[<p>说道<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%b5%8f%e8%a7%88%e5%99%a8%e5%85%bc%e5%ae%b9" title="查看 浏览器兼容 中的全部文章" target="_blank">浏览器兼容</a></span>一直让人头痛。处理兼容问题经常要判断用户浏览器类型。<br />
以前要写一大窜代码来判断是否为ＩＥ浏览器。以后再也不用这么麻烦了。</p>
<p>第一种方法：通过IE与非IE浏览器对垂直制表符支持特性搞出的一段简短的条件：</p>
<p>var ie = !+”\v1″;</p>
<p>第二种方法：利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器，如果数组里面最后一个字符为逗号，JS 引擎会自动剔除它。<br />
var ie = !-[1,];</p>
<p>大家可以测试一下：</p>
<p>var ie = !-[1,];</p>
<p>alert(ie);</p>
<p>赶快试试，这个判断 该死的ie把，这样能让你事半功倍。</p>
<h2  class="related_post_title">随机日志推荐</h2><ul class="related_post"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/753.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery-bind不能处理绑定hover事件</title>
		<link>http://www.52shidai.com/javascript/jquery/748.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/748.html#comments</comments>
		<pubDate>Wed, 03 Aug 2011 03:29:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[hover]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/jquery/748.html</guid>
		<description><![CDATA[看这个例子： $(document).ready(function(){ $('.some-class').bind({ hover: function(e) { // Hover event handler alert("hover"); }, click: function(e) { // Click event handler alert("click"); }, blur: function(e) { // Blur event handler } }); }); 奇怪的事情发生了，这里的 “hover” 事件完全没有反应。 而像 “click” 和 “blur” 这两个都能正常调用。 同时，如下的代码也是正常运行的： $(".some-class").hover(function(){ // stuff }) 为什么 bind 不能绑定 hover 呢？ 答案是： 应该使用 mouseenter 和 mouseleave 这两个事件来代替 [...]]]></description>
			<content:encoded><![CDATA[<p>看这个例子：</p>
<p><span style="color: #a5a5a5;"><code>$(document).ready(</code><code>function</code><code>(){</code></span></p>
<p><span style="color: #a5a5a5;"><code>$(</code><code>'.some-class'</code><code>).<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/bind" title="查看 bind 中的全部文章" target="_blank">bind</a></span>({</code></span></p>
<p><span style="color: #a5a5a5;"><code><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/hover" title="查看 hover 中的全部文章" target="_blank">hover</a></span>: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Hover event handler</span></code></p>
<p><span style="color: #a5a5a5;"><code>alert(</code><code>"<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/hover" title="查看 hover 中的全部文章" target="_blank">hover</a></span>"</code><code>);</code></span></p>
<p><code><span style="color: #a5a5a5;">},</span></code></p>
<p><span style="color: #a5a5a5;"><code>click: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Click event handler</span></code></p>
<p><span style="color: #a5a5a5;"><code>alert(</code><code>"click"</code><code>);</code></span></p>
<p><code><span style="color: #a5a5a5;">},</span></code></p>
<p><span style="color: #a5a5a5;"><code>blur: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Blur event handler</span></code></p>
<p><code><span style="color: #a5a5a5;">}</span></code></p>
<p><code><span style="color: #a5a5a5;">});</span></code></p>
<p><code><span style="color: #a5a5a5;">});</span></code></p>
<p>奇怪的事情发生了，这里的 “hover” 事件完全没有反应。 而像 “click” 和 “blur” 这两个都能正常调用。</p>
<p>同时，如下的代码也是正常运行的：</p>
<p><span style="color: #a5a5a5;"><code>$(</code><code>".some-class"</code><code>).hover(</code><code>function</code><code>(){</code></span></p>
<p><code><span style="color: #a5a5a5;">// stuff</span></code></p>
<p><code><span style="color: #a5a5a5;">})</span></code></p>
<p>为什么 <span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/bind" title="查看 bind 中的全部文章" target="_blank">bind</a></span> 不能绑定 hover 呢？</p>
<p>答案是：<br />
应该使用 mouseenter 和 mouseleave 这两个事件来代替 (这也是 .hover() 函数中使用的事件)  所以完全可以直接像这样来引用:</p>
<p><span style="color: #a5a5a5;"><code>$(document).ready(</code><code>function</code><code>(){</code></span></p>
<p><span style="color: #a5a5a5;"><code>$(</code><code>'.some-class'</code><code>).bind({</code></span></p>
<p><span style="color: #a5a5a5;"><code>mouseenter: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Hover event handler</span></code></p>
<p><span style="color: #a5a5a5;"><code>alert(</code><code>"hover"</code><code>);</code></span></p>
<p><code><span style="color: #a5a5a5;">},</span></code></p>
<p><span style="color: #a5a5a5;"><code>mouseleave: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Hover event handler</span></code></p>
<p><span style="color: #a5a5a5;"><code>alert(</code><code>"hover"</code><code>);</code></span></p>
<p><code><span style="color: #a5a5a5;">},</span></code></p>
<p><span style="color: #a5a5a5;"><code>click: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Click event handler</span></code></p>
<p><span style="color: #a5a5a5;"><code>alert(</code><code>"click"</code><code>);</code></span></p>
<p><code><span style="color: #a5a5a5;">},</span></code></p>
<p><span style="color: #a5a5a5;"><code>blur: </code><code>function</code><code>(e) {</code></span></p>
<p><code><span style="color: #a5a5a5;">// Blur event handler</span></code></p>
<p><code><span style="color: #a5a5a5;">}</span></code></p>
<p><code><span style="color: #a5a5a5;">});</span></code></p>
<p><code><span style="color: #a5a5a5;">});</span></code></p>
<p>因为 .hover() 是 <span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span> 自己定义的事件… 是为了方便用户绑定调用 mouseenter 和 mouseleave  事件而已，它并非一个真正的事件，所以当然不能当做 .bind() 中的事件参数来调用。</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/926.html" title="jQ.Mobi—针对移动设备优化的jQuery">jQ.Mobi—针对移动设备优化的jQuery</a></li><li><a href="http://www.52shidai.com/javascript/jquery/738.html" title="9个实用jQuery日历插件">9个实用jQuery日历插件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/732.html" title="jQuery 操作css 设置样式">jQuery 操作css 设置样式</a></li><li><a href="http://www.52shidai.com/javascript/jquery/705.html" title="JQUERY操作XML实例教程">JQUERY操作XML实例教程</a></li><li><a href="http://www.52shidai.com/javascript/jquery/621.html" title="不要滥用jQuery的$(this)">不要滥用jQuery的$(this)</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/748.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>9个实用jQuery日历插件</title>
		<link>http://www.52shidai.com/javascript/jquery/738.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/738.html#comments</comments>
		<pubDate>Tue, 12 Jul 2011 03:44:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[日历插件]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/jquery/738.html</guid>
		<description><![CDATA[1. FullCalendar FullCalendar是很出名的jQuery日历插件，它支持拖拽等功能，整合了Google Calendar，而且可以通过JSON来绑定事件，设计师可以轻松地自定义日历样式，工程师则利用它提供的接口来处理用户触发事件。 2. Astonishing iCal-like Calendar 这里是一篇教程，教你如何利用jQuery和CSS制作一个模仿iphone样式的日历控件。 3. jQuery UI Datepicker jQuery UI Datepicker 是一个提供了很多配置项的日历插件，你可以自定义日期的格式和语言，可通过按钮限制可选的日期范围，也可轻松地添加其他功能的按钮。 4. jMonthCalendar jMonthCalendar支持没个月份里的所有天数添加内容，本身可以应用到开发工作中。 5. Date Picker Date Picker 遵循MIT &#38; GPL发布.，有着很多的配置项和特性，例如你可以同时打开多个日期选择器，轻松地通过修改css来自定义样式，支持多种日期选择模式。 6. jQuery Week Calendar jQuery Week Calendar 是一个在web应用中显示一周情况的插件，可以通过数据或者JSON来绑定相应的触发事件，而且这些事件都可以拖拽、缩放，而且还有很多选项和事件回调函数可以使用在应用中，具体的可以参考官方文档。 7. Simple jQuery Date-picker Plugin 这是一个很简洁的日期选择器，但是提供了很多实用功能。 8. jQuery Date Picker Plugin 跟上面介绍的类似，在显示风格上略有区别。 9. jQuery Interactive Date Range Picker 这个强大的日历控件时jQqueryUI中日历组建的改良版，它有十分平滑的显示过渡效果，最新版使用的是jQuery UI 1.7 一级 jQuery UI CSS 框架，你可以通过jQuery UI来修改出自己期望的效果. &#160; 您可能感兴趣的文章jQ.Mobi—针对移动设备优化的jQueryjQuery-bind不能处理绑定hover事件jQuery 操作css [...]]]></description>
			<content:encoded><![CDATA[<h3>1. <a title="FullCalendar" href="http://arshaw.com/fullcalendar/" target="_blank">FullCalendar</a></h3>
<p>FullCalendar是很出名的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%97%a5%e5%8e%86%e6%8f%92%e4%bb%b6" title="查看 日历插件 中的全部文章" target="_blank">日历插件</a></span>，它支持拖拽等功能，整合了Google Calendar，而且可以通过JSON来绑定事件，设计师可以轻松地自定义日历样式，工程师则利用它提供的接口来处理用户触发事件。<br />
<img title="FullCalendar" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081705982.jpg" alt="FullCalendar" width="500" height="396" /></p>
<h3>2. <a title="Astonishing iCal-like Calendar" href="http://www.stefanoverna.com/log/create-astonishing-ical-like-calendars-with-jquery" target="_blank">Astonishing iCal-like Calendar</a></h3>
<p>这里是一篇教程，教你如何利用<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>和CSS制作一个模仿iphone样式的日历控件。<img title="Astonishing iCal-like Calendar" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081706130.jpg" alt="Astonishing iCal-like Calendar" width="500" height="454" /></p>
<h3>3. <a title="jQuery" href="http://docs.jquery.com/UI/Datepicker" target="_blank" >jQuery UI Datepicker</a></h3>
<p>jQuery UI Datepicker 是一个提供了很多配置项的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%97%a5%e5%8e%86%e6%8f%92%e4%bb%b6" title="查看 日历插件 中的全部文章" target="_blank">日历插件</a></span>，你可以自定义日期的格式和语言，可通过按钮限制可选的日期范围，也可轻松地添加其他功能的按钮。</p>
<p><img title="jQuery UI Datepicker" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081707960.jpg" alt="jQuery UI Datepicker" width="500" height="171" /></p>
<h3>4. <a title="jMonthCalendar" href="http://www.bytecyclist.com/projects/jmonthcalendar/" target="_blank">jMonthCalendar</a></h3>
<p>jMonthCalendar支持没个月份里的所有天数添加内容，本身可以应用到开发工作中。</p>
<p><img title="jMonthCalendar" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081707757.jpg" alt="jMonthCalendar" width="500" height="237" /></p>
<h3>5. <a title="Date Picker" href="http://www.eyecon.ro/datepicker/" target="_blank">Date Picker</a></h3>
<p>Date Picker 遵循MIT &amp; GPL发布.，有着很多的配置项和特性，例如你可以同时打开多个日期选择器，轻松地通过修改css来自定义样式，支持多种日期选择模式。</p>
<p><img title="Date Picker" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081708336.jpg" alt="Date Picker" width="500" height="135" /></p>
<h3>6. <a title="jQuery Week Calendar" href="http://www.redredred.com.au/projects/jquery-week-calendar/" target="_blank">jQuery Week Calendar</a></h3>
<p>jQuery Week Calendar 是一个在web应用中显示一周情况的插件，可以通过数据或者JSON来绑定相应的触发事件，而且这些事件都可以拖拽、缩放，而且还有很多选项和事件回调函数可以使用在应用中，具体的可以参考官方文档。<img title="jQuery Week Calendar" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081708953.jpg" alt="jQuery Week Calendar" width="500" height="285" /></p>
<h3>7. <a title="Simple jQuery Date-picker Plugin" href="http://teddevito.com/demos/calendar.php" target="_blank">Simple jQuery Date-picker Plugin</a></h3>
<p>这是一个很简洁的日期选择器，但是提供了很多实用功能。</p>
<p><img title="Simple jQuery Date-picker Plugin" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081709998.jpg" alt="Simple jQuery Date-picker Plugin" width="500" height="218" /></p>
<h3>8. <a title="jQuery Date Picker Plugin" href="http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/" target="_blank">jQuery Date Picker Plugin</a></h3>
<p>跟上面介绍的类似，在显示风格上略有区别。<br />
<img title="jQuery Date Picker Plugin" src="http://www.bobd.cn/design/UploadFiles1008/200910/20091013081709170.jpg" alt="jQuery Date Picker Plugin" width="500" height="220" /></p>
<h3>9. <a title="jQuery Interactive Date Range Picker" href="http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/" target="_blank">jQuery Interactive Date Range Picker</a></h3>
<p>这个强大的日历控件时jQqueryUI中日历组建的改良版，它有十分平滑的显示过渡效果，最新版使用的是jQuery UI 1.7 一级 jQuery UI CSS 框架，你可以通过jQuery UI来修改出自己期望的效果.</p>
<p>&nbsp;</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/926.html" title="jQ.Mobi—针对移动设备优化的jQuery">jQ.Mobi—针对移动设备优化的jQuery</a></li><li><a href="http://www.52shidai.com/javascript/jquery/748.html" title="jQuery-bind不能处理绑定hover事件">jQuery-bind不能处理绑定hover事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/732.html" title="jQuery 操作css 设置样式">jQuery 操作css 设置样式</a></li><li><a href="http://www.52shidai.com/javascript/jquery/705.html" title="JQUERY操作XML实例教程">JQUERY操作XML实例教程</a></li><li><a href="http://www.52shidai.com/javascript/jquery/621.html" title="不要滥用jQuery的$(this)">不要滥用jQuery的$(this)</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/738.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 操作css 设置样式</title>
		<link>http://www.52shidai.com/javascript/jquery/732.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/732.html#comments</comments>
		<pubDate>Mon, 16 May 2011 09:57:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css样式]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/jquery/732.html</guid>
		<description><![CDATA[pcss(name) br /访问第一个匹配元素的样式属性。/p p&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p pReturn a style property on the first matched element. br /返回值 br /String/p p参数 br /name (String) : 要访问的属性名称/p p示例 br /取得第一个段落的color样式属性的值。 /p pjQuery 代码:/p p$(quot;pquot;).css(quot;colorquot;); /p pcss(properties) br /把一个“名/值对”对象设置为所有匹配元素的样式属性。 br /这是一种在所有匹配的元素上设置大量样式属性的最佳方式。/p p&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p pSet a key/value object as style properties to all matched elements. br /This is the best way to [...]]]></description>
			<content:encoded><![CDATA[<p>pcss(name)   br /访问第一个匹配元素的样式属性。/p  p&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p  pReturn a style property on the first matched element.   br /返回值    br /String/p  p参数   br /name (String) : 要访问的属性名称/p  p示例   br /取得第一个段落的color样式属性的值。 /p  p<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span> 代码:/p  p$(quot;pquot;).css(quot;colorquot;); /p  pcss(properties)   br /把一个“名/值对”对象设置为所有匹配元素的样式属性。    br /这是一种在所有匹配的元素上设置大量样式属性的最佳方式。/p  p&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p  pSet a key/value object as style properties to all matched elements.   br /This is the best way to set several style properties on all matched elements.    br /返回值    br /<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>/p  p参数   br /properties (Map) : 要设置为样式属性的名/值对/p  p示例   br /将所有段落的字体颜色设为红色并且背景为蓝色。 /p  p<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span> 代码:/p  p$(quot;pquot;).css({ color: quot;#ff0011quot;, background: quot;bluequot; });    br /&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p  p如果属性名包含 quot;-quot;的话，必须使用引号: /p  pjQuery 代码:/p  p$(quot;pquot;).css({ quot;margin-leftquot;: quot;10pxquot;, quot;background-colorquot;: quot;bluequot; }); /p  pcss(name,value)   br /在所有匹配的元素中，设置一个样式属性的值。    br /数字将自动转化为像素值/p  p&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;/p  pSet a single style property to a value on all matched elements.   br /If a number is provided, it is automatically converted into a pixel value.    br /返回值    br /jQuery/p  p参数   br /name (value) : 属性名/p  pvalue (String, Number) : 属性值/p  p示例   br /将所有段落字体设为红色 /p  pjQuery 代码:/p  p$(quot;pquot;).css(quot;colorquot;,quot;redquot;); /p</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/926.html" title="jQ.Mobi—针对移动设备优化的jQuery">jQ.Mobi—针对移动设备优化的jQuery</a></li><li><a href="http://www.52shidai.com/javascript/jquery/748.html" title="jQuery-bind不能处理绑定hover事件">jQuery-bind不能处理绑定hover事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/738.html" title="9个实用jQuery日历插件">9个实用jQuery日历插件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/705.html" title="JQUERY操作XML实例教程">JQUERY操作XML实例教程</a></li><li><a href="http://www.52shidai.com/javascript/jquery/621.html" title="不要滥用jQuery的$(this)">不要滥用jQuery的$(this)</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/732.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JQUERY操作XML实例教程</title>
		<link>http://www.52shidai.com/javascript/jquery/705.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/705.html#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:34:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[实例教程]]></category>
		<category><![CDATA[操作XML]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=705</guid>
		<description><![CDATA[JQUERY操作XML实例教程 text.xml &#60;?xml version=”1.0&#8243; encoding=”utf-8&#8243; ?&#62; &#60;msglist&#62; &#60;msg name=”11&#8243;&#62; &#60;id&#62;1&#60;/id&#62; &#60;content&#62;content1&#60;/content&#62; &#60;/msg&#62; &#60;msg name=”22&#8243;&#62; &#60;id&#62;2&#60;/id&#62; &#60;content&#62;content2&#60;/content&#62; &#60;/msg&#62; &#60;/msglist&#62; index.html &#60;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&#62; &#60;html xmlns=”http://www.w3.org/1999/xhtml” &#62; &#60;head runat=”server”&#62; &#60;title&#62;jQuery操作Xml入门&#60;/title&#62; &#60;script type=”text/javascript” src=”jquery-1.4.4.min.js”&#62;&#60;/script&#62; &#60;script type=”text/javascript”&#62; $(function(){    $.ajax({        url : “test.xml”,     dataType : “xml”,     error : function(xml) {         [...]]]></description>
			<content:encoded><![CDATA[<p><strong>JQUERY<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%93%8d%e4%bd%9cxml" title="查看 操作XML 中的全部文章" target="_blank">操作XML</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%ae%9e%e4%be%8b%e6%95%99%e7%a8%8b" title="查看 实例教程 中的全部文章" target="_blank">实例教程</a></span></strong></p>
<p><strong>text.xml </strong></p>
<p>&lt;?xml version=”1.0&#8243; encoding=”utf-8&#8243; ?&gt;<br />
&lt;msglist&gt;<br />
&lt;msg name=”11&#8243;&gt;<br />
&lt;id&gt;1&lt;/id&gt;<br />
&lt;content&gt;content1&lt;/content&gt;<br />
&lt;/msg&gt;<br />
&lt;msg name=”22&#8243;&gt;<br />
&lt;id&gt;2&lt;/id&gt;<br />
&lt;content&gt;content2&lt;/content&gt;<br />
&lt;/msg&gt;<br />
&lt;/msglist&gt;</p>
<p><strong>index.html </strong></p>
<p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;<br />
&lt;html xmlns=”http://www.w3.org/1999/xhtml” &gt;<br />
&lt;head runat=”server”&gt;<br />
&lt;title&gt;<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>操作Xml入门&lt;/title&gt;<br />
&lt;script type=”text/javascript” src=”jquery-1.4.4.min.js”&gt;&lt;/script&gt;<br />
&lt;script type=”text/javascript”&gt;<br />
$(function(){<br />
   $.ajax({<br />
       url : “test.xml”,<br />
    dataType : “xml”,<br />
    error : function(xml) {<br />
        alert(“Error loading XML document ” + xml);<br />
    },<br />
    success : function(xml) {<br />
        $(xml).find(“msglist &gt; msg”).each(function() {<br />
        // $(this).find(“content”).text(); //取值<br />
    //  $(“ul”).append(“&lt;li&gt;” + $(this).find(“content”).text() + “&lt;/li&gt;”);<br />
     $(“ul”).append(“&lt;li&gt;” + $(this).attr(“name”) + “&lt;/li&gt;”);<br />
      //($(this).attr(“name”));  //获取属性<br />
     });<br />
    }<br />
   });<br />
});<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;ul&gt;&lt;/ul&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/926.html" title="jQ.Mobi—针对移动设备优化的jQuery">jQ.Mobi—针对移动设备优化的jQuery</a></li><li><a href="http://www.52shidai.com/javascript/jquery/748.html" title="jQuery-bind不能处理绑定hover事件">jQuery-bind不能处理绑定hover事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/738.html" title="9个实用jQuery日历插件">9个实用jQuery日历插件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/732.html" title="jQuery 操作css 设置样式">jQuery 操作css 设置样式</a></li><li><a href="http://www.52shidai.com/javascript/jquery/621.html" title="不要滥用jQuery的$(this)">不要滥用jQuery的$(this)</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/705.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>随机产生图片的轮换的js代码</title>
		<link>http://www.52shidai.com/javascript/702.html</link>
		<comments>http://www.52shidai.com/javascript/702.html#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:23:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[随机产生]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=702</guid>
		<description><![CDATA[随机产生轮换的图片，本例弄来做广告轮换，还需要小小的改动，就是加上a链接，这样就可以做广告轮换了。 但是本例只是简单讲解让大家自己动手制作广告轮换吧。 源程序讲解： a = 3                                 设置变量a的初值为3。 var pp = Math.random();               定义一个变量pp，值为一个随机数。 var foot = Math.round(pp * (a-1))+1;   定义一个变量foot,值为一个经过四舍五入的整数，此数不 大于3。 function create()                    定义一个函数。 { this.src = ” this.border = ” this.alt = ” }                      初始化图片的属性。 b = new Array()                      设置b为一个数组。 for(var i=1; i&#60;=a; i++)              开始一个循环，当i&#60;a时，i=i+1。 { b[i] = new create() } b[1].src = “img/4.jpg” b[1].border [...]]]></description>
			<content:encoded><![CDATA[<p><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e9%9a%8f%e6%9c%ba%e4%ba%a7%e7%94%9f" title="查看 随机产生 中的全部文章" target="_blank">随机产生</a></span>轮换的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%9b%be%e7%89%87" title="查看 图片 中的全部文章" target="_blank">图片</a></span>，本例弄来做广告轮换，还需要小小的改动，就是加上a链接，这样就可以做广告轮换了。</p>
<p>但是本例只是简单讲解让大家自己动手制作广告轮换吧。</p>
<p>源程序讲解：</p>
<p>a = 3                                 设置变量a的初值为3。</p>
<p>var pp = Math.random();               定义一个变量pp，值为一个随机数。</p>
<p>var foot = Math.round(pp * (a-1))+1;   定义一个变量foot,值为一个经过四舍五入的整数，此数不</p>
<p>大于3。</p>
<p>function create()                    定义一个函数。</p>
<p>{ this.src = ”</p>
<p>this.border = ”</p>
<p>this.alt = ” }                      初始化<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%9b%be%e7%89%87" title="查看 图片 中的全部文章" target="_blank">图片</a></span>的属性。</p>
<p>b = new Array()                      设置b为一个数组。</p>
<p>for(var i=1; i&lt;=a; i++)              开始一个循环，当i&lt;a时，i=i+1。</p>
<p>{ b[i] = new create() }</p>
<p>b[1].src = “img/4.jpg”</p>
<p>b[1].border = “0&#8243;</p>
<p>b[1].alt = “”</p>
<p>b[2].src = “img/2.jpg”</p>
<p>b[2].border = “0&#8243;</p>
<p>b[2].alt = “”</p>
<p>b[3].src = “img/3.jpg”</p>
<p>b[3].border = “0&#8243;</p>
<p>b[3].alt = “”                        分别定义数组b中的值。</p>
<p>var pic = “”;</p>
<p>pic += &#8216;&lt;img src=&#8217;+b[foot].src+&#8217; border=”0&#8243;&#8216;+&#8217; alt=&#8217;+b[foot].alt+&#8217;&gt;&#8217;;&gt;&#8217;;  pic的值为<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e9%9a%8f%e6%9c%ba%e4%ba%a7%e7%94%9f" title="查看 随机产生 中的全部文章" target="_blank">随机产生</a></span>一幅数组b中的图。</p>
<p>document.write(pic)                   输出pic的值。</p>
<p>注:本例中所用到的三张图放在与本页面同级的”img”文件夹内,名字分别为2.jpg，3.jpg，4.jpg。</p>
<p>如果自己想加上更多的图片，就希望大家自己举一反三了。</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/web-front/804.html" title="Web 前端优化最佳实践之 图象篇">Web 前端优化最佳实践之 图象篇</a></li><li><a href="http://www.52shidai.com/javascript/696.html" title="javascript图片预加载技术">javascript图片预加载技术</a></li><li><a href="http://www.52shidai.com/javascript/338.html" title="封装好的javascript图片滑动效果">封装好的javascript图片滑动效果</a></li><li><a href="http://www.52shidai.com/wordpress/296.html" title="在Wordpress中自动获取文章中的图片">在Wordpress中自动获取文章中的图片</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/702.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>javascript图片预加载技术</title>
		<link>http://www.52shidai.com/javascript/696.html</link>
		<comments>http://www.52shidai.com/javascript/696.html#comments</comments>
		<pubDate>Thu, 17 Mar 2011 08:39:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[预加载]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=696</guid>
		<description><![CDATA[图片预加载技术的典型应用： 如lightbox方式展现照片，无疑需要提前获得大图的尺寸，这样才能居中定位，由于javascript无法获取img文件头数据，必须等待其加载完毕后才能获取真实的大小然后展示出来，所以lightbox显示的图片的速度体验要比直接输出的差很多，而本文说提到的预加载技术主要针对获取图片尺寸。 一段典型的使用预加载获取图片大小的例子： var imgLoad = function (url, callback) { var img = new Image(); img.src = url; if (img.complete) { callback(img.width, img.height); } else { img.onload = function () { callback(img.width, img.height); img.onload = null; }; }; }; web应用程序区别于桌面应用程序，响应速度才是最好的用户体验。如果想要速度与优雅兼得，那就必须提前获得图片尺寸，如何在图片没有加载完毕就能获取图片尺寸？ 一、结合flash加载图片，获取图片头部数据的尺寸 flash虽然很强大，但它与生俱来的缺点让人爱恨交织，加上很多移动设备不支持falsh无疑更是致命的伤，还是放弃吧。 二、在服务端保存图片尺寸数据 这里不得不提到腾讯Qzone的lightbox相册，它就是这样做的。它能在图片没有加载完全的时候就居中放大图片，速度与优雅基本兼得。不过它仍然难以避免blog插入的外链图片的问题，也只能按传统的方式加载完毕才能展示。 三、javascript通过占位方式获取图片头部数据的尺寸 十多年的上网经验告诉我：浏览器在加载图片的时候你会看到图片会先占用一块地然后才慢慢加载完毕，并且这里大部分的图片都是没有预设width与height属性的，因为浏览器能够获取图片的头部数据。基于此，只需要使用javascript定时侦测图片的尺寸状态便可得知图片尺寸就绪的状态。 实现代码： var imgReady = function (url, callback, error) { [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%9b%be%e7%89%87" title="查看 图片 中的全部文章" target="_blank">图片</a></span><span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e9%a2%84%e5%8a%a0%e8%bd%bd" title="查看 预加载 中的全部文章" target="_blank">预加载</a></span>技术的典型应用</strong>：</p>
<p>如lightbox方式展现照片，无疑需要提前获得大图的尺寸，这样才能居中定位，由于javascript无法获取img文件头数据，必须等待其加载完毕后才能获取真实的大小然后展示出来，所以lightbox显示的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%9b%be%e7%89%87" title="查看 图片 中的全部文章" target="_blank">图片</a></span>的速度体验要比直接输出的差很多，而本文说提到的<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e9%a2%84%e5%8a%a0%e8%bd%bd" title="查看 预加载 中的全部文章" target="_blank">预加载</a></span>技术主要针对获取<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e5%9b%be%e7%89%87" title="查看 图片 中的全部文章" target="_blank">图片</a></span>尺寸。</p>
<p>一段典型的使用预加载获取图片大小的例子：</p>
<p>var imgLoad = function (url, callback) {<br />
var img = new Image();<br />
img.src = url;<br />
if (img.complete) {<br />
callback(img.width, img.height);<br />
} else {<br />
img.onload = function () {<br />
callback(img.width, img.height);<br />
img.onload = null;<br />
};<br />
};<br />
};</p>
<p>web应用程序区别于桌面应用程序，响应速度才是最好的用户体验。如果想要速度与优雅兼得，那就必须提前获得图片尺寸，如何在图片没有加载完毕就能获取图片尺寸？</p>
<p><strong>一、结合flash加载图片，获取图片头部数据的尺寸</strong></p>
<p>flash虽然很强大，但它与生俱来的缺点让人爱恨交织，加上很多移动设备不支持falsh无疑更是致命的伤，还是放弃吧。</p>
<p><strong>二、在服务端保存图片尺寸数</strong>据</p>
<p>这里不得不提到腾讯Qzone的lightbox相册，它就是这样做的。它能在图片没有加载完全的时候就居中放大图片，速度与优雅基本兼得。不过它仍然难以避免blog插入的外链图片的问题，也只能按传统的方式加载完毕才能展示。</p>
<p><strong>三、javascript通过占位方式获取图片头部数据的尺</strong>寸</p>
<p>十多年的上网经验告诉我：浏览器在加载图片的时候你会看到图片会先占用一块地然后才慢慢加载完毕，并且这里大部分的图片都是没有预设width与height属性的，因为浏览器能够获取图片的头部数据。基于此，只需要使用javascript定时侦测图片的尺寸状态便可得知图片尺寸就绪的状态。</p>
<p>实现代码：</p>
<p>var imgReady = function (url, callback, error) {<br />
var width, height, intervalId, check, div,<br />
img = new Image(),<br />
body = document.body;<br />
img.src = url;<br />
// 从缓存中读取<br />
if (img.complete) {<br />
return callback(img.width, img.height);<br />
};<br />
// 通过占位提前获取图片头部数据<br />
if (body) {<br />
div = document.createElement(&#8216;div&#8217;);<br />
div.style.cssText = &#8216;visibility:hidden;position:absolute;left:0;top:0;width:1px;<br />
height:1px;overflow:hidden&#8217;;<br />
div.appendChild(img)<br />
body.appendChild(div);<br />
width = img.offsetWidth;<br />
height = img.offsetHeight;<br />
check = function () {<br />
if (img.offsetWidth !== width || img.offsetHeight !== height) {<br />
clearInterval(intervalId);<br />
callback(img.offsetWidth, img.clientHeight);<br />
img.onload = null;<br />
div.innerHTML = ”;<br />
div.parentNode.removeChild(div);<br />
};<br />
};<br />
intervalId = setInterval(check, 150);<br />
};<br />
// 加载完毕后方式获取<br />
img.onload = function () {<br />
callback(img.width, img.height);<br />
img.onload = img.onerror = null;<br />
clearInterval(intervalId);<br />
body &amp;&amp; img.parentNode.removeChild(img);<br />
};<br />
// 图片加载错误<br />
img.onerror = function () {<br />
error &amp;&amp; error();<br />
clearInterval(intervalId);<br />
body &amp;&amp; img.parentNode.removeChild(img);<br />
};<br />
};</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="runcode">
<p><textarea name="runcode" style="height:300px;width:620px;font-size:12px" class="runcode_text" id="runcode_mHTQx_">
&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;img ready&lt;/title&gt;
&lt;script&gt;
var imgReady = function (url, callback, error) {
	var width, height, intervalId, check, div,
		img = new Image(),
		body = document.body;
	img.src = url;
	// 从缓存中读取
	if (img.complete) {
		return callback(img.width, img.height);
	};
	// 通过占位提前获取图片头部数据
	if (body) {
		div = document.createElement('div');
		div.style.cssText = 'visibility:hidden;position:absolute;left:0;top:0;width:1px;height:1px;overflow:hidden';
		div.appendChild(img)
		body.appendChild(div);
		width = img.offsetWidth;
		height = img.offsetHeight;
		check = function () {
			if (img.offsetWidth !== width || img.offsetHeight !== height) {
				clearInterval(intervalId);
				callback(img.offsetWidth, img.clientHeight);
				img.onload = null;
				div.innerHTML = '';
				div.parentNode.removeChild(div);
			};
		};
		intervalId = setInterval(check, 150);
	};
	// 加载完毕后方式获取
	img.onload = function () {
		callback(img.width, img.height);
		img.onload = img.onerror = null;
		clearInterval(intervalId);
		body &amp;&amp; img.parentNode.removeChild(img);
	};
	// 图片加载错误
	img.onerror = function () {
		error &amp;&amp; error();
		clearInterval(intervalId);
		body &amp;&amp; img.parentNode.removeChild(img);
	};
};
&lt;/script&gt;
&lt;script&gt;
/* demo script */
window.onload = function () {
var imgUrl = 'http://www.planeart.cn/demo/imgReady/vistas24.jpg?',
	testReadyBtn = document.getElementById('testReadyBtn'),
	clsCacheBtn = document.getElementById('clsCacheBtn'),
	status = document.getElementById('status'),
	statusReady = document.getElementById('statusReady'),
	statusLoad = document.getElementById('statusLoad'),
	imgWrap = document.getElementById('imgWrap');
var imgLoad = function (url, callback) {
	var img = new Image();
	img.src = url;
	if (img.complete) {
		callback(img.width, img.height);
	} else {
		img.onload = function () {
			callback(img.width, img.height);
			img.onload = null;
		};
	};
};
testReadyBtn.onclick = function () {
	var that = this;
	that.disabled = true;
	status.style.display = 'block';
	statusLoad.innerHTML = statusReady.innerHTML = 'Loading...';
	imgWrap.innerHTML = '&lt;img src=&quot;' + imgUrl + '&quot; /&gt;';
	// 使用占位方式快速获取大小
	imgReady(imgUrl, function (width, height) {
		statusReady.innerHTML = 'width:' + width + '; height:' + height;
	}, function () {
		statusReady.innerHTML = 'Img Error!';
	});
	// 使用传统方式获取大小
	imgLoad(imgUrl, function (width, height) {
		statusLoad.innerHTML = 'width:' + width + '; height:' + height;
		that.disabled = false;
	}, function () {
		statusLoad.innerHTML = 'Img Error!';
		that.disabled = false;
	});
};
clsCacheBtn.onclick = function () {
	imgUrl += new Date().getTime();
	status.style.display = 'none';
	imgWrap.innerHTML = '';
};
};
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;文章：&lt;a href=&quot;http://www.52shidai.com&quot;&gt;时代前端&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;button id=&quot;testReadyBtn&quot;&gt;开始加载图片&lt;/button&gt; &lt;button id=&quot;clsCacheBtn&quot;&gt;清空缓存&lt;/button&gt;(如果图片加载过后，浏览器会缓存)&lt;/p&gt;
&lt;div id=&quot;status&quot; style=&quot;display:none&quot;&gt;
	&lt;p&gt;&lt;strong&gt;imgReady:&lt;/strong&gt;&lt;p&gt;
	&lt;p id=&quot;statusReady&quot;&gt;&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;imgLoad:&lt;/strong&gt;&lt;/p&gt;
	&lt;p id=&quot;statusLoad&quot;&gt;&lt;p&gt;
&lt;/div&gt;
&lt;div id=&quot;imgWrap&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;display:none&quot;&gt;&lt;script src=&quot;http://s86.cnzz.com/stat.php?id=1581115&amp;web_id=1581115&quot; charset=&quot;gb2312&quot;&gt;&lt;/script&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>
<p><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_mHTQx_');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_mHTQx_');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_mHTQx_','runcode_mHTQx_');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/web-front/804.html" title="Web 前端优化最佳实践之 图象篇">Web 前端优化最佳实践之 图象篇</a></li><li><a href="http://www.52shidai.com/javascript/702.html" title="随机产生图片的轮换的js代码">随机产生图片的轮换的js代码</a></li><li><a href="http://www.52shidai.com/javascript/338.html" title="封装好的javascript图片滑动效果">封装好的javascript图片滑动效果</a></li><li><a href="http://www.52shidai.com/wordpress/296.html" title="在Wordpress中自动获取文章中的图片">在Wordpress中自动获取文章中的图片</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/696.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>检测CSS是否溢出的脚本</title>
		<link>http://www.52shidai.com/javascript/688.html</link>
		<comments>http://www.52shidai.com/javascript/688.html#comments</comments>
		<pubDate>Wed, 02 Mar 2011 10:33:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[检测]]></category>
		<category><![CDATA[溢出]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=688</guid>
		<description><![CDATA[我的理解，CSS Bug 包含： 兼容性 Bug 内容 Bug (即运营填入内容或数据库读取内容后出现的 Bug) 其中兼容性 Bug 通常在开发阶段就能解决，而内容 Bug 通常被我们忽略。比如忘记对文字设置 overflow: hidden；比如忘记对图片设置宽高；等。不知大家是否也有类似经历? 所以，为自动化这块的测试工作，我写了个 简单的脚本 ，功能有二： 文本内容 * 2 图片替换为大图 我们先拿淘宝首页开刀，看看效果。。(还是有一些可以改善的地方的) 使用很简单，在地址栏运行以下脚本即可，或者把他们加入 BookMarklet 随时运行。 文本＋图片 javascript:(function(){var f=[],h=document;(function(n){var p=arguments.callee,l=n.childNodes,m=0,k=l.length;for(;m&#60;k;m++){var o=l[m];if(o.nodeType===1){p(o)}else{if(o.nodeType===3){f.push(o)}}}})(h.body);for(var d=0;d&#60;f.length;d++){var b=f[d],j=b.nodeValue.replace(/^\s+&#124;\s+$/g,""),c=h.createTextNode(j);if(j!==""&#38;&#38;j.length!==1){b.parentNode.insertBefore(c,b)}}var g=document.images,a=0,e=g.length;for(;a&#60;e;a++){g[a].src="http://www.yoobao.com/shoppic/2010410425118938.jpg"}})(); 只文本 javascript:(function(){var list=[],doc=document;(function(parent){var func=arguments.callee,nodes=parent.childNodes,i=0,len=nodes.length;for(;i&#60;len;i++){var node=nodes[i];if(node.nodeType===1){func(node);}else if(node.nodeType===3){list.push(node);}}})(doc.body);for(var i=0;i&#60;list.length;i++){var node=list[i],value=node.nodeValue.replace(/^\s+&#124;\s+$/g,''),tmpNode=doc.createTextNode(value);if(value!==''&#38;&#38;value.length!==1){node.parentNode.insertBefore(tmpNode,node);}}})(); 只图片 javascript:(function(){var images=document.images,n=0,len=images.length;for(;n&#60;len;n++){images[n].src='http://www.yoobao.com/shoppic/2010410425118938.jpg';}})(); 最后，友情提示下： 此工具不可滥用，并非所有地方都要考虑溢出的扩展性。 打开一个网站，把上面的三个代码随意一个贴到地址栏里，回车 ok。 本文转自：http://www.chencheng.org/blog/archives/css-overflow-test-script.html &#160; 您可能感兴趣的文章用css截取文字超出部分显示省略号Web 前端优化最佳实践之 CSS 篇Monster-Chrome浏览器的扩展插件（前端检测）]]></description>
			<content:encoded><![CDATA[<p>我的理解，CSS Bug 包含：</p>
<ol>
<li>兼容性 Bug</li>
<li>内容 Bug (即运营填入内容或数据库读取内容后出现的 Bug)</li>
</ol>
<p>其中兼容性 Bug 通常在开发阶段就能解决，而内容 Bug 通常被我们忽略。比如忘记对文字设置 overflow: hidden；比如忘记对图片设置宽高；等。不知大家是否也有类似经历?</p>
<p>所以，为自动化这块的测试工作，我写了个 <a href="https://gist.github.com/846006" target="_blank">简单的脚本</a> ，功能有二：</p>
<ol>
<li>文本内容 * 2</li>
<li>图片替换为大图</li>
</ol>
<p>我们先拿淘宝首页开刀，看看效果。。(还是有一些可以改善的地方的)<br />
<a href="http://img03.taobaocdn.com/tps/i3/T17M41XnRjXXXXXXXX-1005-520.png" target="_blank"><img src="http://img03.taobaocdn.com/tps/i3/T17M41XnRjXXXXXXXX-1005-520.png" alt="" width="560" /></a></p>
<p>使用很简单，在地址栏运行以下<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e8%84%9a%e6%9c%ac" title="查看 脚本 中的全部文章" target="_blank">脚本</a></span>即可，或者把他们加入 <a href="http://en.wikipedia.org/wiki/Bookmarklet" target="_blank">BookMarklet</a> 随时运行。</p>
<ol>
<li><a href="http://www.chencheng.org/blog/archives/css-overflow-test-script.html">文本＋图片</a></li>
<div>
<div>
<code>javascript:(function(){var f=[],h=document;(function(n){var p=arguments.callee,l=n.childNodes,m=0,k=l.length;for(;m&lt;k;m++){var o=l[m];if(o.nodeType===1){p(o)}else{if(o.nodeType===3){f.push(o)}}}})(h.body);for(var d=0;d&lt;f.length;d++){var b=f[d],j=b.nodeValue.replace(/^\s+|\s+$/g,""),c=h.createTextNode(j);if(j!==""&amp;&amp;j.length!==1){b.parentNode.insertBefore(c,b)}}var g=document.images,a=0,e=g.length;for(;a&lt;e;a++){g[a].src="http://www.yoobao.com/shoppic/2010410425118938.jpg"}})();</code>
</div>
</div>
<li><a href="http://www.chencheng.org/blog/archives/css-overflow-test-script.html">只文本</a></li>
<div>
<div>
<code>javascript:(function(){var list=[],doc=document;(function(parent){var func=arguments.callee,nodes=parent.childNodes,i=0,len=nodes.length;for(;i&lt;len;i++){var node=nodes[i];if(node.nodeType===1){func(node);}else if(node.nodeType===3){list.push(node);}}})(doc.body);for(var i=0;i&lt;list.length;i++){var node=list[i],value=node.nodeValue.replace(/^\s+|\s+$/g,''),tmpNode=doc.createTextNode(value);if(value!==''&amp;&amp;value.length!==1){node.parentNode.insertBefore(tmpNode,node);}}})();</code>
</div>
</div>
<li><a href="http://www.chencheng.org/blog/archives/css-overflow-test-script.html">只图片</a></li>
<div>
<div>
<code>javascript:(function(){var images=document.images,n=0,len=images.length;for(;n&lt;len;n++){images[n].src='http://www.yoobao.com/shoppic/2010410425118938.jpg';}})();</code>
</div>
</div>
</ol>
<p>最后，友情提示下：</p>
<p>此工具不可滥用，并非所有地方都要考虑<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%ba%a2%e5%87%ba" title="查看 溢出 中的全部文章" target="_blank">溢出</a></span>的扩展性。</p>
<p>打开一个网站，把上面的三个代码随意一个贴到地址栏里，回车 ok。</p>
<p>本文转自：http://www.chencheng.org/blog/archives/<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/css" title="查看 css 中的全部文章" target="_blank">css</a></span>-overflow-test-script.html</p>
<p>&nbsp;</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/css-2/885.html" title="用css截取文字超出部分显示省略号">用css截取文字超出部分显示省略号</a></li><li><a href="http://www.52shidai.com/web-front/799.html" title="Web 前端优化最佳实践之 CSS 篇">Web 前端优化最佳实践之 CSS 篇</a></li><li><a href="http://www.52shidai.com/seo/566.html" title="Monster-Chrome浏览器的扩展插件（前端检测）">Monster-Chrome浏览器的扩展插件（前端检测）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/688.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>javascript 正则表达式-替换</title>
		<link>http://www.52shidai.com/javascript/661.html</link>
		<comments>http://www.52shidai.com/javascript/661.html#comments</comments>
		<pubDate>Tue, 30 Nov 2010 02:10:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[替换]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=661</guid>
		<description><![CDATA[Javascript经典正则表达式 三道测试题： 1， var str=“ abbbbacc”; var rs=str.replace(“a”,”0”); (A)0bbbbacc (B)0bbbb0cc 2，var str=“ abbbbacc”; var rs=str.replace(“/a/”,”0”); (A)0bbbbacc (B)0bbbb0cc 3，var str=“ abbbbacc”; var rs=str.replace(“/a/g”,”0”); (A)0bbbbacc (B)0bbbb0cc 附注：String对象的replace方法签名为： replace(regx,str) 一，概述 1，正则表达式，可以说是任何一种编程语言都提供的机制，它主要是提供了对字符串的处理能力。 2，正则表达式在页面处理中的使用场景： 1）表单验证。验证某些域符合某种规则，例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等 2）处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象，一个例子就是定位id属性中含有某个特殊字符的div对象。 3）纯编程逻辑。直接用于编程的逻辑之中。 3，说明：本部分所举的正则表达式的代码片断，都是经过测试的，但有一点需要注意，对于换行的字符串的定义，我们在表述时使用的是类似如下的形式： var str=“It’s is a beautiful city”； 这种形式直接写在JS代码中是错误的，那如何获取具有换行的字符串呢？简单的办法：在textarea中输入文本并换行，然后将该值赋给JS变量即可。例如： var str=document.forms[0].mytextarea.value; 二，语法与使用 1，定义正则表达式 1）定义正则表达式有两种形式，一种是普通方式，一种是构造函数方式。 2）普通方式：var reg=/表达式/附加参数 表达式：一个字符串，代表了某种规则，其中可以使用某些特殊字符，来代表特殊的规则，后面会详细说明。 附加参数：用来扩展表达式的含义，目前主要有三个参数： g：代表可以进行全局匹配。 i：代表不区分大小写匹配。 m：代表可以进行多行匹配。 上面三个参数，可以任意组合，代表复合含义，当然也可以不加参数。 例子： var [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript经典<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f" title="查看 正则表达式 中的全部文章" target="_blank">正则表达式</a></span><br />
三道测试题：<br />
1， var str=“ abbbbacc”;<br />
var rs=str.replace(“a”,”0”);<br />
(A)0bbbbacc (B)0bbbb0cc<br />
2，var str=“ abbbbacc”;<br />
var rs=str.replace(“/a/”,”0”);<br />
(A)0bbbbacc (B)0bbbb0cc<br />
3，var str=“ abbbbacc”;<br />
var rs=str.replace(“/a/g”,”0”);<br />
(A)0bbbbacc (B)0bbbb0cc<br />
附注：String对象的replace方法签名为：<br />
replace(regx,str)</p>
<p>一，概述<br />
1，<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f" title="查看 正则表达式 中的全部文章" target="_blank">正则表达式</a></span>，可以说是任何一种编程语言都提供的机制，它主要是提供了对字符串的处理能力。<br />
2，正则表达式在页面处理中的使用场景：<br />
1）表单验证。验证某些域符合某种规则，例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等<br />
2）处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象，一个例子就是定位id属性中含有某个特殊字符的div对象。<br />
3）纯编程逻辑。直接用于编程的逻辑之中。<br />
3，说明：本部分所举的正则表达式的代码片断，都是经过测试的，但有一点需要注意，对于换行的字符串的定义，我们在表述时使用的是类似如下的形式：<br />
var str=“It’s is<br />
a  beautiful city”；<br />
这种形式直接写在JS代码中是错误的，那如何获取具有换行的字符串呢？简单的办法：在textarea中输入文本并换行，然后将该值赋给JS变量即可。例如：<br />
var str=document.forms[0].mytextarea.value;<br />
二，语法与使用<br />
1，定义正则表达式<br />
1）定义正则表达式有两种形式，一种是普通方式，一种是构造函数方式。<br />
2）普通方式：var reg=/表达式/附加参数<br />
表达式：一个字符串，代表了某种规则，其中可以使用某些特殊字符，来代表特殊的规则，后面会详细说明。<br />
附加参数：用来扩展表达式的含义，目前主要有三个参数：<br />
g：代表可以进行全局匹配。<br />
i：代表不区分大小写匹配。<br />
m：代表可以进行多行匹配。<br />
上面三个参数，可以任意组合，代表复合含义，当然也可以不加参数。<br />
例子：<br />
var reg=/a*b/;<br />
var reg=/abc+f/g;<br />
3）构造函数方式：var reg=new RegExp(“表达式”,”附加参数”);<br />
其中“表达式”与“附加参数”的含义与上面那种定义方式中的含义相同。<br />
例子：<br />
var reg=new RegExp(“a*b”);<br />
var reg=new RegExp(“abc+f”,”g”);<br />
4）普通方式与构造函数方式的区别<br />
普通方式中的表达式必须是一个常量字符串，而构造函数中的表达式可以是常量字符串，也可以是一个js变量，例如根据用户的输入来作为表达式参数等等：<br />
var reg=new RegExp(document.forms[0].exprfiled.value,”g”);<br />
2，表达式模式<br />
1）表达式模式，是指表达式的表达方式与样式， 即 var reg=/表达式/附加参数 中的“表达式”怎样去描述？<br />
2）从规范上讲，表达式模式分为简单模式和复合模式。<br />
3）简单模式：是指通过普通字符的组合来表达的模式，例如<br />
var reg=/abc0d/;<br />
可见简单模式只能表示具体的匹配。<br />
4）复合模式：是指含有通配符来表达的模式，例如：<br />
var reg=/a+b?\w/;<br />
其中的+、?和\w都属于通配符，代表着特殊的含义。因此复合模式可以表达更为抽象化的逻辑。<br />
下面我们着重说一下复合模式中各个通配符的含义及其使用。<br />
5)复合模式中特殊字符的讲解：<br />
1&gt;\：在许多编程语言里面被用作转义符，一般来说<br />
\符号后面如果跟的是普通字符c，那么\c就代表特殊的含义，例如n本来代表字符n，但\n就代表换行。<br />
\符号后面如果跟的是特殊字符c，那么\c就代表普通字符c，例如\一般用作转义符，但\\则调表普通字符\。<br />
Javascript的正则表达式中\的用法与上面相同，只是不同的编程语言，特殊字符表可能不太一样罢了。<br />
2&gt;^：匹配输入字符串的起始端，如果是多行匹配，即表达式的附加参数中含有m，则也在一个换行符后匹配。<br />
例子：/^B/匹配 “Bab Bc ”中的第一个B<br />
例子2：/^B/gm匹配<br />
“Badd B<br />
cdaf<br />
B dsfB”<br />
中的第一行第一个B，第三行中的第一个B</p>
<p>3&gt;$：匹配输入字符创的尾端，如果是多行匹配，即表达式的附加参数中含有m，则也在一个换行符前匹配。<br />
与^的用法相反。<br />
例子：/t$/匹配“bat”中的t，但是不匹配“hate”中的t<br />
例子2：/t$/匹配<br />
“tag at<br />
bat”<br />
中第一行的最后一个t和第二行的t。<br />
4&gt;*：匹配前一个字符0次或多次。<br />
例子：/ab*/匹配“dddabbbbc”中的“abbbb”，也匹配“ddda”中的“a”<br />
5&gt;+：匹配前一个字符1次或多次。<br />
例子：/ab+/匹配“dddabbbbc”中的“abbbb”，但不匹配“ddda”<br />
与后面的{1,}（原型：{n,}）的用法类似<br />
6&gt;?：?的用法比较特殊，一般来说它用来对前一个字符做0次或1次匹配，但是它有另外两种特殊的用法：<br />
如果紧跟在*、+、?和{ }之后，则表示原始匹配的最小次数匹配，例如：<br />
/ba*/本来匹配“bbbaaaa”中的“baaaa”，但是/ba*?/则匹配“bbbaaaa”中的“b”（因为*表示0次或多次匹配，而加?应该表示最少次数匹配，即0次匹配）。<br />
同理：/ba+?/则匹配“baaaa”中的“ba”。<br />
作为语法结构符号，使用于前置断言中，即后面要说到的x(?=y)和x(?!=y)<br />
7&gt;.：小数点中的“.”号，匹配任何一个单独的字符，但是换行符除外。<br />
标准中总共有哪些字符？请参考：字符集<br />
例如：/a.b/匹配“acbaa”中的“acb”，但是不匹配“abbb”。<br />
8&gt;(x)：表示匹配x(并非特指字符x或者特指一个字符，x表示一个字符串)，而且匹配会被记住，在语法中这种()被称为“capturing parentheses ”，即捕捉用的小括号。<br />
匹配会被记住，是因为在表达式提供的函数中，有些函数返回一个数组，该数组会保存所匹配的所有字符串，例如exec()函数。<br />
另外还要注意()中的x被记住的前提是匹配x。<br />
例子1：<br />
var regx=/a(b)c/;<br />
var rs=regx.exec(“abcddd”);<br />
从上面可以看出,/a(b)c/匹配“abcddd”中的“abc”，因为()的原因，b也会记录下来，因此rs返回的数字内容为：<br />
{abc,b}<br />
例子2：<br />
var regx=/a(b)c/;<br />
var rs=regx.exec(“acbcddd”);<br />
rs返回null，因为/a(b)c/不匹配“acbcddd”，所以()中的b不会被记录下来（尽管字符串中含有b）</p>
<p>9&gt;(?:x)：匹配x，但不会记住x，这种格式中的()被称为“non-capturing parentheses ”，即非捕捉用的小括号。<br />
例子：<br />
var regx=/a(?:b)c/;<br />
var rs=regx.exec(“abcddd”);<br />
从上面可以看出,/a(?:b)c/匹配“abcddd”中的“abc”，因为(?:)的原因，b不会记录下来，因此rs返回的数字内容为：<br />
{abc}<br />
10&gt;X(?=y)：匹配x，仅当后面紧跟着y时。如果符合匹配，则只有x会被记住，y不会被记住。<br />
例子：<br />
var regx=/user(?=name)/;<br />
var rs=regx.exec(“The username is Mary”);<br />
结果：匹配成功，而且rs的值为{user}<br />
11&gt;X(?!y)：匹配x，仅当后面不紧跟着y时。如果符合匹配，则只有x会被记住，y不会被记住。<br />
例子：<br />
var regx=/user(?!name)/;<br />
var rs=regx.exec(“The user name is Mary”);<br />
结果：匹配成功，而且rs的值为{user}<br />
例子2：<br />
var regx=/\d+(?!\.)/;<br />
var rs=regx.exec(“54.235”);<br />
结果：匹配成果，rs的值为{5}，不匹配54是因为54后面跟着“.”号，当然235也匹配，但是由于exec方法的行为，235不会被返回<br />
12&gt;x|y：匹配x或y。注意如果x和y都匹配上了，那么只记住x。<br />
例子：<br />
var regx=/beijing|shanghai/;<br />
var rs=regx.exec(“I love beijing and shanghai”);<br />
结果：匹配成功，rs的值为{beijing}，虽然shanghai也匹配，但不会被记住。<br />
13&gt;{n}：匹配前一个字符的n次出现。<br />
n必须是一个非负数，当然如果是一个负数或小数也不会报语法错误。<br />
例子：<br />
var regx=/ab{2}c/;<br />
var rs=regx.exec(“abbcd”);<br />
结果：匹配成功，rs的值为：{abbc}。<br />
14&gt;{n,}：匹配前一个字符的至少n次出现。<br />
例子：<br />
var regx=/ab{2,}c/;<br />
var rs=regx.exec(“abbcdabbbc”);<br />
结果：匹配成功，rs的值为：{abbc}。注意为什么abbbc也符合条件为什么没有被记住，这与exec方法的行为有关，后面会统一讲解。<br />
15&gt;{n,m}：匹配前一个字符的至少n次最多m次的出现。<br />
只要n与m为数字，而且m&gt;=n就不会报语法错误。<br />
例子：<br />
var regx=/ab{2,5}c/;<br />
var rs=regx.exec(“abbbcd”);<br />
结果：匹配成功，rs的值为：{abbbc}。<br />
例子2：<br />
var regx=/ab{2,2}c/;<br />
var rs=regx.exec(“abbcd”);<br />
结果：匹配成功，rs的值为：{abbc}。<br />
例子3：<br />
var regx=/ab(2,5)/;<br />
var rs=regx.exec(“abbbbbbbbbb”);<br />
结果：匹配成功，rs的值为：{abbbbb}，这说明，如果前一个字符出现多于m次，则只匹配m次。另外：<br />
var regx=/ab(2,5)c/;<br />
var rs=regx.exec(“abbbbbbbbbbc”);<br />
结果：匹配失败，rs的值为：null，为什么匹配失败，因为b多于5个则b(2,5)会匹配前5个b，，而表达式/ab(2,5)c/中b后面是c，但字符串中5个b之后还是b所以会报错。<br />
16&gt;[xyz]：xyz表示一个字符串，该模式表示匹配[]中的一个字符，形式上[xyz]等同于[x-z]。<br />
例子：<br />
var regx=/a[bc]d/;<br />
var rs=regx.exec(“abddgg”);<br />
结果：匹配成功，rs的值为：{abd}<br />
例子2：<br />
var regx=/a[bc]d/;<br />
var rs=regx.exec(“abcd”);<br />
结果：匹配失败，rs的值为：null，之所以失败，是因为[bc]表示匹配b或c中的一个，但不会同时匹配。<br />
17&gt;[^xyz]：该模式表示匹配非[]中的一个字符，形式上[^xyz]等同于[^x-z]。<br />
例子：<br />
var regx=/a[^bc]d/;<br />
var rs=regx.exec(“afddgg”);<br />
结果：匹配成功，rs的值为：{afd}<br />
例子2：<br />
var regx=/a[^bc]d/;<br />
var rs=regx.exec(“abd”);<br />
结果：匹配失败，rs的值为：。<br />
18&gt;[\b]：匹配退格键。<br />
19&gt;\b：匹配一个词的边界符，例如空格和换行符等等，当然匹配换行符时，表达式应该附加参数m。<br />
例子：<br />
var regx=/\bc./;<br />
var rs=regx.exec(“Beijing is a beautiful city”);<br />
结果：匹配成功，rs的值为：{ci}，注意c前边的空格不会匹配到结果中，即{ ci}是不正确的。<br />
20&gt;\B：代表一个非单词边界。<br />
例子：<br />
var regx=/\Bi./;<br />
var rs=regx.exec(“Beijing is a beautiful city”);<br />
结果：匹配成功，rs的值为：{ij}，即匹配了Beijing中的ij。<br />
21&gt;\cX，匹配一个控制字符。例如， \cM 匹配一个 Control-M 或<br />
回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一<br />
个原义的 ’c’ 字符。（实际的例子还需补充）<br />
21&gt;\d：匹配一个数字字符，等同于[0-9]。<br />
例子：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“user1”);<br />
结果：匹配成功，rs的值为：{user1}<br />
22&gt;\D：匹配一个非数字字符，等同于[^0-9]。<br />
例子：<br />
var regx=/user\D/;<br />
var rs=regx.exec(“userA”);<br />
结果：匹配成功，rs的值为：{userA}<br />
23&gt;\f：匹配一个换页符。<br />
24&gt;\n：匹配一个换行符。因为是换行符，所以在表达式中要加入m参数。<br />
例子：<br />
var regx=/a\nbc/m;<br />
var str=“a<br />
bc”;<br />
var rs=regx.exec(str);<br />
结果：匹配成功，rs的值为：{  }，如果表达式为/a\n\rbc/，则不会被匹配，因此在一般的编辑器中一个”Enter”键代表着“回车换行”，而非“换行回车”，至少在textarea域中是这样的。<br />
25&gt;\r：匹配一个回车符<br />
26&gt;\s：匹配一个空格符，等同于[ \f\n\r\t\v\u00A0\u2028\u2029].<br />
例子：<br />
var regx=/\si/;<br />
var rs=regx.exec(“Beijing is a city”);<br />
结果：匹配成功，rs的值为：{ i}<br />
27&gt;\S：匹配一个非空格符，等同于[ ^\f\n\r\t\v\u00A0\u2028\u2029].<br />
例子：<br />
var regx=/\Si/;<br />
var rs=regx.exec(“Beijing is a city”);<br />
结果：匹配成功，rs的值为：{ei}<br />
28&gt;\t：匹配一个tab<br />
例子：<br />
var regx=/a\tb/;<br />
var rs=regx.exec(“a bc”);<br />
结果：匹配成功，rs的值为： {a       bc}<br />
29&gt;\v：匹配一个竖向的tab<br />
30&gt;\w：匹配一个数字、_或字母表字符，即[A-Za-z0-9_ ]。<br />
例子：<br />
var regx=/\w/;<br />
var rs=regx.exec(“$25.23”);<br />
结果：匹配成功，rs的值为：{2}<br />
31&gt;\W：匹配一个非数字、_或字母表字符，即[^A-Za-z0-9_ ]。<br />
例子：<br />
var regx=/\w/;<br />
var rs=regx.exec(“$25.23”);<br />
结果：匹配成功，rs的值为：{$}<br />
32&gt;\n：注意不是\n，这里n是一个正整数，表示匹配第n个()中的字符。<br />
例子：<br />
var regx=/user([,-])group\1role/;<br />
var rs=regx.exec(“user-group-role”);<br />
结果：匹配成功，rs的值为：{user-group-role,-}，同样对user,group,role的匹配也是成功的，但像user-group,role等就不对了。<br />
33&gt;\0：匹配一个NUL字符。<br />
34&gt;\xhh：匹配一个由两位16进制数字所表达的字符。<br />
35&gt;\uhhhh：匹配一个由四位16进制数字所表达的字符。</p>
<p>3，表达式操作<br />
1）表达式操作，在这里是指和表达式相关的方法，我们将介绍六个方法。<br />
2）表达式对象（RegExp）方法：<br />
1&gt;exec(str)，返回str中与表达式相匹配的第一个字符串，而且以数组的形式表现，当然如果表达式中含有捕捉用的小括号，则返回的数组中也可能含有()中的匹配字符串，例如：<br />
var regx=/\d+/;<br />
var rs=regx.exec(“3432ddf53”);<br />
返回的rs值为：{3432}<br />
var regx2=new RegExp(“ab(\d+)c”);<br />
var rs2=regx2.exec(“ab234c44”);<br />
返回的rs值为：{ab234c,234}<br />
另外，如果有多个合适的匹配，则第一次执行exec返回一个第一个匹配，此时继续执行exec，则依次返回第二个第三个匹配。例如：<br />
var regx=/user\d/g;<br />
var rs=regx.exec(“ddduser1dsfuser2dd”);<br />
var rs1=regx.exec(“ddduser1dsfuser2dd”);<br />
则rs的值为{user1}，rs的值为{rs2}，当然注意regx中的g参数是必须的，否则无论exec执行多少次，都返回第一个匹配。后面还有相关内容涉及到对此想象的解释。<br />
2&gt;test(str)，判断字符串str是否匹配表达式，返回一个布尔值。例如：<br />
var regx=/user\d+/g;<br />
var flag=regx.test(“user12dd”);<br />
flag的值为true。<br />
3）String对象方法<br />
1&gt;match(expr)，返回与expr相匹配的一个字符串数组，如果没有加参数g，则返回第一个匹配，加入参数g则返回所有的匹配<br />
例子：<br />
var regx=/user\d/g;<br />
var str=“user13userddduser345”;<br />
var rs=str.match(regx);<br />
rs的值为：{user1,user3}<br />
2&gt;search(expr)，返回字符串中与expr相匹配的第一个匹配的index值。<br />
例子：<br />
var regx=/user\d/g;<br />
var str=“user13userddduser345”;<br />
var rs=str.search(regx);<br />
rs的值为：0<br />
3&gt;replace(expr,str)，将字符串中匹配expr的部分<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%9b%bf%e6%8d%a2" title="查看 替换 中的全部文章" target="_blank">替换</a></span>为str。另外在replace方法中，str中可以含有一种变量符号$，格式为$n，代表匹配中被记住的第n的匹配字符串（注意小括号可以记忆匹配）。<br />
例子：<br />
var regx=/user\d/g;<br />
var str=“user13userddduser345”;<br />
var rs=str.replace(regx,”00”);<br />
rs的值为：003userddd0045<br />
例子2：<br />
var regx=/u(se)r\d/g;<br />
var str=“user13userddduser345”;<br />
var rs=str.replace(regx,”$1”);<br />
rs的值为：se3userdddse45<br />
对于replace(expr,str)方法还要特别注意一点，如果expr是一个表达式对象则会进行全局<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%9b%bf%e6%8d%a2" title="查看 替换 中的全部文章" target="_blank">替换</a></span>（此时表达式必须附加参数g，否则也只是<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e6%9b%bf%e6%8d%a2" title="查看 替换 中的全部文章" target="_blank">替换</a></span>第一个匹配），如果expr是一个字符串对象，则只会替换第一个匹配的部分，例如：<br />
var regx=“user”<br />
var str=“user13userddduser345”;<br />
var rs=str.replace(regx,”00”);<br />
rs的值为： 0013userddduser345<br />
4&gt;split(expr)，将字符串以匹配expr的部分做分割，返回一个数组，而且表达式是否附加参数g都没有关系，结果是一样的。<br />
例子：<br />
var regx=/user\d/g;<br />
var str=“user13userddduser345”;<br />
var rs=str.split(regx);<br />
rs的值为：{3userddd,45}<br />
4，表达式相关属性<br />
1）表达式相关属性，是指和表达式相关的属性，如下面的形式：<br />
var regx=/myexpr/;<br />
var rs=regx.exec(str);<br />
其中，和表达式自身regx相关的属性有两个，和表达式匹配结果rs相关的属性有三个，下面将逐一介绍。<br />
2）和表达式自身相关的两个属性：<br />
1&gt;lastIndex，返回开始下一个匹配的位置，注意必须是全局匹配（表达式中带有g参数）时，lastIndex才会有不断返回下一个匹配值，否则该值为总是返回第一个下一个匹配位置，例如：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var lastIndex1=regx.lastIndex;<br />
rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var lastIndex2=regx.lastIndex;<br />
rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var lastIndex3=regx.lastIndex;<br />
上面lastIndex1为9，第二个lastIndex2也为9，第三个也是9；如果regx=/user\d/g，则第一个为9，第二个为18，第三个为0。<br />
2&gt;source，返回表达式字符串自身。例如：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var source=regx.source;<br />
source的值为user\d<br />
3）和匹配结果相关的三个属性：<br />
1&gt;index，返回当前匹配的位置。例如：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var index1=rs.index;<br />
rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var index2=rs.index;<br />
rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var index3=rs.index;<br />
index1为4，index2为4，index3为4，如果表达式加入参数g，则index1为4，index2为13，index3会报错（index为空或不是对象）。<br />
2&gt;input，用于匹配的字符串。例如：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var input=rs.input;<br />
input的值为sdsfuser1dfsfuser2。<br />
3&gt;[0]，返回匹配结果中的第一个匹配值，对于match而言可能返回一个多值的数字，则除了[0]外，还可以取[1]、[2]等等。例如：<br />
var regx=/user\d/;<br />
var rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var value1=rs[0];<br />
rs=regx.exec(“sdsfuser1dfsfuser2”);<br />
var value2=rs[0];<br />
value1的值为user1,value2的值为user2<br />
5，实际应用</p>
<div id="_mcePaste">1）实际应用一</div>
<div id="_mcePaste">描述：有一表单，其中有一个“用户名”input域</div>
<div id="_mcePaste">要求：汉字，而且不能少于2个汉字，不能多于4个汉字。</div>
<div id="_mcePaste">实现：</div>
<div id="_mcePaste">&lt;script&gt;</div>
<div id="_mcePaste">function checkForm(obj){</div>
<div id="_mcePaste">var username=obj.username.value;</div>
<div id="_mcePaste">var regx=/^[\u4e00-\u9fa5]{2,4}$/g</div>
<div id="_mcePaste">if(!regx.test(username)){</div>
<div id="_mcePaste">alert(“Invalid username!”);</div>
<div id="_mcePaste">return false;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">return true;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">&lt;/script&gt;</div>
<div id="_mcePaste">&lt;form name=“myForm”onSubmit=“return checkForm(this)”&gt;</div>
<div id="_mcePaste">&lt;input type=“text” name=“username”/&gt;</div>
<div id="_mcePaste">&lt;input type=“submit” vlaue=“submit”/&gt;</div>
<div id="_mcePaste">&lt;/form&gt;</div>
<div id="_mcePaste">2）实际应用二</div>
<div id="_mcePaste">描述：给定一个含有html标记的字符串，要求将其中的html标记去掉。</div>
<div id="_mcePaste">实现：</div>
<div id="_mcePaste">&lt;script&gt;</div>
<div id="_mcePaste">function toPlainText(htmlStr){</div>
<div id="_mcePaste">var regx=/&lt;[^&gt;]*&gt;|&lt;\/[^&gt;]*&gt;/gm;</div>
<div id="_mcePaste">var str=htmlStr.replace(regx,”");</div>
<div id="_mcePaste">return str;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">&lt;/script&gt;</div>
<div id="_mcePaste">&lt;form name=“myForm”&gt;</div>
<div id="_mcePaste">&lt;textarea id=“htmlInput”&gt;&lt;/textarea&gt;</div>
<div id="_mcePaste">&lt;input type=“button” value=“submit” onclick=“toPlainText(document.getElementById(‘htmlInput’).value”/&gt;</div>
<div id="_mcePaste">&lt;/form&gt;</div>
<p>1）实际应用一描述：有一表单，其中有一个“用户名”input域要求：汉字，而且不能少于2个汉字，不能多于4个汉字。实现：&lt;script&gt;function checkForm(obj){     var username=obj.username.value;     var regx=/^[\u4e00-\u9fa5]{2,4}$/g     if(!regx.test(username)){               alert(“Invalid username!”);               return false;      }     return true;}&lt;/script&gt;&lt;form name=“myForm”onSubmit=“return checkForm(this)”&gt;    &lt;input type=“text” name=“username”/&gt;    &lt;input type=“submit” vlaue=“submit”/&gt;&lt;/form&gt;2）实际应用二描述：给定一个含有html标记的字符串，要求将其中的html标记去掉。实现：&lt;script&gt;function toPlainText(htmlStr){     var regx=/&lt;[^&gt;]*&gt;|&lt;\/[^&gt;]*&gt;/gm;     var str=htmlStr.replace(regx,”");     return str;}&lt;/script&gt;&lt;form name=“myForm”&gt;    &lt;textarea id=“htmlInput”&gt;&lt;/textarea&gt;    &lt;input type=“button” value=“submit” onclick=“toPlainText(document.getElementById(‘htmlInput’).value”/&gt;&lt;/form&gt;</p>
<p>三，小结<br />
1，Javascript正则表达式，我想在一般的程序员之中，使用者应该不是很多，因为我们处理的页面一般都不是很复杂，而复杂的逻辑一般我们都在后台处理完成了。但是目前趋势已经出现了扭转，富客户端已经被越来越多的人接受，而Javascript就是其中的关键技术，对于复杂的客户端逻辑而言，正则表达式的作用也是很关键的，同时它也是Javascript高手必须要掌握的重要技术之一。<br />
2，为了能够便于大家对前面讲述的内容有一个更为综合和深刻的认识，我将前面的一些关键点和容易犯糊涂的地方再系统总结一下，这部分很关键！<br />
总结1：附件参数g的用法<br />
表达式加上参数g之后，表明可以进行全局匹配，注意这里“可以”的含义。我们详细叙述：<br />
1）对于表达式对象的exec方法，不加入g，则只返回第一个匹配，无论执行多少次均是如此，如果加入g，则第一次执行也返回第一个匹配，再执行返回第二个匹配，依次类推。例如<br />
var regx=/user\d/;<br />
var str=“user18dsdfuser2dsfsd”;<br />
var rs=regx.exec(str);//此时rs的值为{user1}<br />
var rs2=regx.exec(str);//此时rs的值依然为{user1}<br />
如果regx=/user\d/g；则rs的值为{user1}，rs2的值为{user2}<br />
通过这个例子说明：对于exec方法，表达式加入了g，并不是说执行exec方法就可以返回所有的匹配，而是说加入了g之后，我可以通过某种方式得到所有的匹配，这里的“方式”对于exec而言，就是依次执行这个方法即可。<br />
2）对于表达式对象的test方法，加入g于不加上g没有什么区别。<br />
3）对于String对象的match方法，不加入g，也只是返回第一个匹配，一直执行match方法也总是返回第一个匹配，加入g，则一次返回所有的匹配（注意这与表达式对象的exec方法不同，对于exec而言，表达式即使加上了g，也不会一次返回所有的匹配）。例如：<br />
var regx=/user\d/;<br />
var str=“user1sdfsffuser2dfsdf”;<br />
var rs=str.match(regx);//此时rs的值为{user1}<br />
var rs2=str.match(regx);//此时rs的值依然为{user1}<br />
如果regx=/user\d/g，则rs的值为{user1,user2}，rs2的值也为{user1,user2}<br />
4）对于String对象的replace方法，表达式不加入g，则只替换第一个匹配，如果加入g，则替换所有匹配。（开头的三道测试题能很好的说明这一点）<br />
5）对于String对象的split方法，加上g与不加g是一样的，即：<br />
var sep=/user\d/;<br />
var array=“user1dfsfuser2dfsf”.split(sep);<br />
则array的值为{dfsf, dfsf}<br />
此时sep=/user\d/g，返回值是一样的。<br />
6）对于String对象的search方法，加不加g也是一样的。<br />
总结2：附加参数m的用法<br />
附加参数m，表明可以进行多行匹配，但是这个只有当使用^和$模式时才会起作用，在其他的模式中，加不加入m都可以进行多行匹配（其实说多行的字符串也是一个普通字符串），我们举例说明这一点<br />
1）使用^的例子<br />
var regx=/^b./g;<br />
var str=“bd76 dfsdf<br />
sdfsdfs dffs<br />
b76dsf  sdfsdf”;<br />
var rs=str.match(regx);<br />
此时加入g和不加入g，都只返回第一个匹配{bd}，如果regx=/^b./gm，则返回所有的匹配{bd,b7}，注意如果regx=/^b./m，则也只返回第一个匹配。所以，加入m表明可以进行多行匹配，加入g表明可以进行全局匹配，综合到一起就是可以进行多行全局匹配<br />
2）使用其他模式的例子，例如<br />
var regx=/user\d/;<br />
var str=“sdfsfsdfsdf<br />
sdfsuser3 dffs<br />
b76dsf  user6”;<br />
var rs=str.match(regx);<br />
此时不加参数g，则返回{user3}，加入参数g返回{user3,user6}，加不加入m对此没有影响。<br />
3）因此对于m我们要清楚它的使用，记住它只对^和$模式起作用，在这两种模式中，m的作用为：如果不加入m，则只能在第一行进行匹配，如果加入m则可以在所有的行进行匹配。我们再看一个^的例子<br />
var regx=/^b./;<br />
var str=“ret76 dfsdf<br />
bjfsdfs dffs<br />
b76dsf  sdfsdf”;<br />
var rs=str.match(regx);<br />
此时rs的值为null，如果加入g，rs的值仍然为null，如果加入m，则rs的值为{bj}（也就是说，在第一行没有找到匹配，因为有参数m，所以可以继续去下面的行去找是否有匹配），如果m和g都加上，则返回{bj,b7}（只加m不加g说明，可以去多行进行匹配，但是找到一个匹配后就返回，加入g 表明将多行中所有的匹配返回，当然对于match方法是如此，对于exec呢，则需要执行多次才能依次返回）<br />
总结3：在HTML的textarea输入域中，按一个Enter键，对应的控制字符为“\r\n”，即“回车换行”，而不是“\n\r”，即“换行回车”，我们看一个前面我们举过的例子：<br />
var regx=/a\r\nbc/;<br />
var str=“a<br />
bc”;<br />
var rs=regx.exec(str);<br />
结果：匹配成功，rs的值为：{      }，如果表达式为/a\n\rbc/，则不会被匹配，因此在一般的编辑器中一个”Enter”键代表着“回车换行”，而非“换行回车”，至少在textarea域中是这样的。</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/web-front/801.html" title="Web 前端优化最佳实践之 JavaScript 篇">Web 前端优化最佳实践之 JavaScript 篇</a></li><li><a href="http://www.52shidai.com/javascript/759.html" title="31个Javascript的实用工具">31个Javascript的实用工具</a></li><li><a href="http://www.52shidai.com/javascript/614.html" title="高质量JavaScript代码书写基本要点|值得收藏">高质量JavaScript代码书写基本要点|值得收藏</a></li><li><a href="http://www.52shidai.com/javascript/609.html" title="javascript的正则表达式集合">javascript的正则表达式集合</a></li><li><a href="http://www.52shidai.com/javascript/585.html" title="js入门学习：Javascript的学习笔记">js入门学习：Javascript的学习笔记</a></li><li><a href="http://www.52shidai.com/javascript/583.html" title="学习JavaScript三件必须了解的事">学习JavaScript三件必须了解的事</a></li><li><a href="http://www.52shidai.com/javascript/556.html" title="JavaScript操作iframe里的dom">JavaScript操作iframe里的dom</a></li><li><a href="http://www.52shidai.com/javascript/323.html" title="javascript中的107个基础知识收集整理">javascript中的107个基础知识收集整理</a></li><li><a href="http://www.52shidai.com/javascript/62.html" title="JavaScript面向对象之静态与非静态类">JavaScript面向对象之静态与非静态类</a></li><li><a href="http://www.52shidai.com/javascript/56.html" title="JavaScript trim函数的十二种实现">JavaScript trim函数的十二种实现</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/661.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>js做的可以随意拖拽组合效果</title>
		<link>http://www.52shidai.com/javascript/650.html</link>
		<comments>http://www.52shidai.com/javascript/650.html#comments</comments>
		<pubDate>Thu, 25 Nov 2010 05:26:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[拖拽]]></category>
		<category><![CDATA[组合]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=650</guid>
		<description><![CDATA[js显示4行4排的块，可以随意组合，随即拖动，每一块还可以单独收缩和关闭，效果不错，很给力，哪位人士有兴趣可以自己改改做出更炫的效果。 &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /&#62; &#60;title&#62;时代前端-52shidai.com&#60;/title&#62; &#60;style type=&#34;text/css&#34;&#62; html, body { width:100%; max-height:100%; padding:0px; margin:0px; } body { text-align:center; font-size:14px; } .cell { float:left; clear:right; } .row { clear:both; } .r_nbsp { width:20px; } .root { width:868px; margin: 0 auto; } .root * [...]]]></description>
			<content:encoded><![CDATA[<p>js显示4行4排的块，可以随意<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/%e7%bb%84%e5%90%88" title="查看 组合 中的全部文章" target="_blank">组合</a></span>，随即拖动，每一块还可以单独收缩和关闭，效果不错，很给力，哪位人士有兴趣可以自己改改做出更炫的效果。</p>
<div class="runcode">
<p><textarea name="runcode" style="overflow-y:visible;width:620px;font-size:12px" class="runcode_text" id="runcode_IPjzFR">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot; /&gt;
&lt;title&gt;时代前端-52shidai.com&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
html, body {
width:100%;
max-height:100%;
padding:0px;
margin:0px;
}
body {
text-align:center;
font-size:14px;
}
.cell {
float:left;
clear:right;
}
.row {
clear:both;
}
.r_nbsp {
width:20px;
}
.root {
width:868px;
margin: 0 auto;
}
.root * {
/*此属性FF的说*/
-moz-user-select:none;
}
.line {
width:202px;
height:0px;
overflow:hidden;
}
.move {
border:#CCCCCC 1px solid;
width:200px;
height:aotu;
margin-top:5px;
margin-bottom:5px;
display:none;
}
.title {
height:24px;
line-height:24px;
background:#0080C0;
}
.title_a {
width:140px;
float:left;
cursor:move;
font-size:12px;
font-weight:bold;
color:#FFFFFF;
text-align:center;
}
.title_b, .title_c {
float:left;
width:30px;
font-size:9px;
color:#CCCCCC;
}
.title_b {
cursor:pointer;
}
.title_c {
cursor:default;
}
.content {
height:100px;
border-top:#CCCCCC 1px solid;
background-color:#F7F7F7;
font-size:12px;
line-height:100px;
}
.CDrag_temp_div {
border:#CCCCCC 1px dashed;
margin-top:5px;
margin-bottom:5px;
}
a#DEL_CDrag {
color:#6699CC;
text-decoration:none;
}
a#DEL_CDrag:hover {
color:#FF0000;
}
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var Class = {
//创建类
create: function () {
   return function () {
    this.initialize.apply(this, arguments);
   };
}
};
var $A = function (a) {
//转换数组
return a ? Array.apply(null, a) : new Array;
};
var $ = function (id) {
//获取对象
return document.getElementById(id);
};
Object.extend = function (a, b) {
//追加方法
for (var i in b) a[i] = b[i];
return a;
};
Object.extend(Object, {
addEvent : function (a, b, c, d) {
//添加函数
   if (a.attachEvent) a.attachEvent(b[0], c);
   else a.addEventListener(b[1] || b[0].replace(/^on/, &quot;&quot;), c, d || false);
   return c;
},
delEvent : function (a, b, c, d) {
   if (a.detachEvent) a.detachEvent(b[0], c);
   else a.removeEventListener(b[1] || b[0].replace(/^on/, &quot;&quot;), c, d || false);
   return c;
},
reEvent : function () {
//获取Event
   return window.event ? window.event : (function (o) {
    do {
     o = o.caller;
    } while (o &amp;&amp; !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0]));
    return o.arguments[0];
   })(this.reEvent);
}
});
Function.prototype.bind = function () {
//绑定事件
var wc = this, a = $A(arguments), o = a.shift();
return function () {
   wc.apply(o, a.concat($A(arguments)));
};
};
var CDrag = Class.create();
CDrag.IE = /MSIE/.test(window.navigator.userAgent);
CDrag.Table = Class.create();
CDrag.Table.prototype = {
//列的拖拽暂时不考虑
initialize : function () {
//初始化
   var wc = this;
   wc.items = []; //创建列组
},
add : function () {
//添加列
   var wc = this, id = wc.items.length, arg = arguments;
   return wc.items[id] = new CDrag.Table.Cols(id, wc, arg[0]);
}
};
CDrag.Table.Cols = Class.create();
CDrag.Table.Cols.prototype = {
initialize : function (id, parent, element) {
//初始化
   var wc = this;
   wc.items = []; //创建列组
   wc.id = id;
   wc.parent = parent;
   wc.element = element;
},
add : function () {
//添加行
   var wc = this, id = wc.items.length, arg = arguments;
   return wc.items[id] = new CDrag.Table.Rows(id, wc, arg[0], arg[1]);
},
ins : function (num, row) {
//插入行
   var wc = this, items = wc.items, i;
   if (row.parent == wc &amp;&amp; row.id &lt; num) num --; //同列向下移动的时候
   for (i = num ; i &lt; items.length ; i ++) items[i].id ++;
   items.splice(num, 0, row);
   row.id = num, row.parent = wc;
   return row;
},
del : function (num) {
//删除行
   var wc = this, items = wc.items, i;
   if (num &gt;= items.length) return;
   for (i = num + 1; i &lt; items.length ; i ++) items[i].id = i - 1;
   return items.splice(num, 1)[0];
}
};
CDrag.Table.Rows = Class.create();
CDrag.Table.Rows.prototype = {
initialize : function (id, parent, element, window) {
//初始化
   var wc = this, temp;
   wc.id = id;
   wc.parent = parent;
   wc.root_id = element;
   wc.window = window;
   wc.element = wc.element_init();
   temp = wc.element.childNodes[CDrag.IE ? 0 : 1];
   wc.title = temp.childNodes[0];
   wc.reduce = temp.childNodes[1];
   wc.close = temp.childNodes[2];
   wc.content = wc.element.childNodes[CDrag.IE ? 1 : 3];
   wc.mousedown = wc.reduceFunc = wc.closeFunc = null;
   wc.load();
},
element_init : function () {
//初始化元素
   var wc = this, div = $(&quot;root_row&quot;).cloneNode(true);
   wc.parent.element.appendChild(div);
   div.style.display = &quot;block&quot;;
   return div;
},
load : function () {
//加载信息
   var wc = this, info = database.parse(wc.root_id);
   wc.title.innerHTML = info.title;
   wc.content.innerHTML = info.content;
   if (wc.window == 0) {
    wc.content.style.display = &quot;none&quot;;
    wc.reduce.innerHTML = &quot;放大&quot;;
   } else {
    wc.content.style.display = &quot;block&quot;;
    wc.reduce.innerHTML = &quot;缩小&quot;;
   }
   wc.content.style.display = (wc.window == 0 ? &quot;none&quot; : &quot;block&quot;);
}
};
CDrag.prototype = {
initialize : function () {
//初始化成员
   var wc = this;
   wc.table = new CDrag.Table; //建立表格对象
   wc.iFunc = wc.eFunc = null;
   wc.obj = { on : { a : null, b : &quot;&quot; }, row : null, left : 0, top : 0 };
   wc.temp = { row : null, div : document.createElement(&quot;div&quot;) };
   wc.temp.div.setAttribute(CDrag.IE ? &quot;className&quot; : &quot;class&quot;, &quot;CDrag_temp_div&quot;);
   wc.temp.div.innerHTML = &quot;&amp;nbsp;&quot;;
},
reMouse : function (a) {
//获取鼠标位置
   var e = Object.reEvent();
   return {
    x : document.documentElement.scrollLeft + e.clientX,
    y : document.documentElement.scrollTop + e.clientY
   };
},
rePosition : function (o) {
//获取元素绝对位置
   var $x = $y = 0;
   do {
    $x += o.offsetLeft;
    $y += o.offsetTop;
   } while ((o = o.offsetParent)); // &amp;&amp; o.tagName != &quot;BODY&quot;
   return { x : $x, y : $y };
},
sMove : function (o) {
//当拖动开始时设置参数
   var wc = this;
   if (wc.iFunc || wc.eFinc) return;
   var mouse = wc.reMouse(), obj = wc.obj, temp = wc.temp, div = o.element, position = wc.rePosition(div);
   obj.row = o;
   obj.on.b = &quot;me&quot;;
   obj.left = mouse.x - position.x;
   obj.top = mouse.y - position.y;
   temp.row = document.body.appendChild(div.cloneNode(true)); //复制预拖拽对象
   with (temp.row.style) {
   //设置复制对象
    position = &quot;absolute&quot;;
    left = mouse.x - obj.left + &quot;px&quot;;
    top = mouse.y - obj.top + &quot;px&quot;;
    zIndex = 100;
    opacity = &quot;0.3&quot;;
    filter = &quot;alpha(opacity:30)&quot;;
   }
   with (temp.div.style) {
   //设置站位对象
    height = div.clientHeight + &quot;px&quot;;
    width = div.clientWidth + &quot;px&quot;;
   }
   div.parentNode.replaceChild(temp.div, div);
   wc.iFunc = Object.addEvent(document, [&quot;onmousemove&quot;], wc.iMove.bind(wc));
   wc.eFunc = Object.addEvent(document, [&quot;onmouseup&quot;], wc.eMove.bind(wc));
   document.onselectstart = new Function(&quot;return false&quot;);
},
iMove : function () {
//当鼠标移动时设置参数
   var wc = this, mouse = wc.reMouse(), cols = wc.table.items, obj = wc.obj, temp = wc.temp,
    row = obj.row, div = temp.row, t_position, t_cols, t_rows, i, j;
   with (div.style) {
    left = mouse.x - obj.left + &quot;px&quot;;
    top = mouse.y - obj.top + &quot;px&quot;;
   }
   for (i = 0 ; i &lt; cols.length ; i ++) {
    t_cols = cols[i];
    t_position = wc.rePosition(t_cols.element);
    if (t_position.x &lt; mouse.x &amp;&amp; t_position.x + t_cols.element.offsetWidth &gt; mouse.x) {
     if (t_cols.items.length &gt; 0) { //如果此列行数大于0
      if (wc.rePosition(t_cols.items[0].element).y + 20 &gt; mouse.y) {
       //如果鼠标位置大于第一行的位置即是最上。。
       //向上
       obj.on.a = t_cols.items[0];
       obj.on.b = &quot;up&quot;;
       obj.on.a.element.parentNode.insertBefore(temp.div, obj.on.a.element);
      } else if (t_cols.items.length &gt; 1 &amp;&amp; t_cols.items[0] == row &amp;&amp;
       wc.rePosition(t_cols.items[1].element).y + 20 &gt; mouse.y) {
       //如果第一行是拖拽对象而第鼠标大于第二行位置则，没有动。。
       //向上
       obj.on.b = &quot;me&quot;;
       t_cols.items[1].element.parentNode.insertBefore(temp.div, t_cols.items[1].element);
      } else {
       for (j = t_cols.items.length - 1 ; j &gt; -1 ; j --) {
        //重最下行向上查询
        t_rows = t_cols.items[j];
        if (t_rows == obj.row) {
         if (t_cols.items.length == 1) {
          t_cols.element.appendChild(temp.div);
          obj.on.b = &quot;me&quot;;
         }
         continue;
        }
        if (wc.rePosition(t_rows.element).y &lt; mouse.y) {
         //如果鼠标大于这行则在这行下面
         if (t_rows.id + 1 &lt; t_cols.items.length &amp;&amp; t_cols.items[t_rows.id + 1] != obj.row) {
          //如果这行有下一行则重这行下一行的上面插入
          t_cols.items[t_rows.id + 1].element.parentNode.
           insertBefore(temp.div, t_cols.items[t_rows.id + 1].element);
          obj.on.a = t_rows;
          obj.on.b = &quot;down&quot;;
         } else if (t_rows.id + 2 &lt; t_cols.items.length) {
          //如果这行下一行是拖拽对象则插入到下两行，即拖拽对象返回原位
          t_cols.items[t_rows.id + 2].element.parentNode.
           insertBefore(temp.div, t_cols.items[t_rows.id + 2].element);
          obj.on.b = &quot;me&quot;;
         } else {
          //前面都没有满足则放在最低行
          t_rows.element.parentNode.appendChild(temp.div);
          obj.on.a = t_rows;
          obj.on.b = &quot;down&quot;;
         }
         return;
        }
       }
      }
     } else {
     //此列无内容添加新行
      t_cols.element.appendChild(temp.div);
      obj.on.a = t_cols;
      obj.on.b = &quot;new&quot;;
     }
    }
   }
},
eMove : function () {
//当鼠标释放时设置参数
   var wc = this, obj = wc.obj, temp = wc.temp, row = obj.row, div = row.element, o_cols, n_cols, number;
   if (obj.on.b != &quot;me&quot;) {
    number = (obj.on.b == &quot;down&quot; ? obj.on.a.id + 1 : 0);
    n_cols = (obj.on.b != &quot;new&quot; ? obj.on.a.parent : obj.on.a);
    o_cols = obj.row.parent;
    n_cols.ins(number, o_cols.del(obj.row.id));
    wc.set_cookie();
   }
   temp.div.parentNode.replaceChild(div, temp.div);
   temp.row.parentNode.removeChild(temp.row);
   delete temp.row;
   Object.delEvent(document, [&quot;onmousemove&quot;], wc.iFunc);
   Object.delEvent(document, [&quot;onmouseup&quot;], wc.eFunc);
   document.onselectstart = wc.iFunc = wc.eFunc = null;
},
add : function (o) {
//添加对象
   var wc = this;
   o.mousedown = Object.addEvent(o.title, [&quot;onmousedown&quot;], wc.sMove.bind(wc, o));
   o.reduceFunc = Object.addEvent(o.reduce, [&quot;onclick&quot;], wc.reduce.bind(wc, o));
   o.closeFunc = Object.addEvent(o.close, [&quot;onclick&quot;], wc.close.bind(wc, o));
},
close : function (o) {
//关闭对象
   var wc = this, parent = o.parent;
   Object.delEvent(o.close, [&quot;onclick&quot;], o.closeFunc);
   Object.delEvent(o.reduce, [&quot;onclick&quot;], o.reduceFunc);
   Object.delEvent(o.title, [&quot;onmousedown&quot;], o.mousedown);
   o.closeFunc = o.reduceFunc = o.mousedown = null;
   parent.element.removeChild(o.element);
   parent.del(o.id);
   delete o;
   wc.set_cookie();
},
reduce : function (o) {
//变大变小
   var wc = this;
   if ((o.window = (o.window == 1 ? 0 : 1))) {
    o.content.style.display = &quot;block&quot;;
    o.reduce.innerHTML = &quot;缩小&quot;;
   } else {
    o.content.style.display = &quot;none&quot;;
    o.reduce.innerHTML = &quot;放大&quot;;
   }
   wc.set_cookie();
},
set_cookie : function () {
//设置COOKIE
   var wc = this, cols = wc.table.items, date = new Date, a = [], b = [], i, j, r;
   date.setDate(date.getDate() + 1);
   for (i = 0 ; i &lt; cols.length ; i ++) {
    for (r = cols[i].items, j = 0 ; j &lt; r.length ; j ++)
     b[b.length] = &quot;{id:'&quot; + r[j].root_id + &quot;',window:&quot; + r[j].window + &quot;}&quot;;
    a[a.length] = &quot;cols:'&quot; + cols[i].element.id + &quot;',rows:[&quot; + b.splice(0, b.length).join(&quot;,&quot;) + &quot;]&quot;;
   }
   document.cookie = &quot;CDrag=&quot; + escape(&quot;[{&quot; + a.join(&quot;},{&quot;) + &quot;}]&quot;) + &quot;;expires=&quot; + date.toGMTString();
},
del_cookie : function () {
//删除COOKIE
   var date;
   if (/(CDrag=[^;]+(?:;|$))/.test(document.cookie)) {
    date = new Date;
    date.setTime(date.getTime() - 1);
    document.cookie = &quot;CDrag=&quot; + RegExp.$1 + &quot;;expires=&quot; + date.toGMTString();
   }
},
parse : function (o) {
//初始化成员
   try {
    var wc = this, table = wc.table, cols, rows, div, i, j;
    for (i = 0 ; i &lt; o.length ; i ++) {
     div = $(o[i].cols), cols = table.add(div);
     for (j = 0 ; j &lt; o[i].rows.length ; j ++)
      wc.add(cols.add(o[i].rows[j].id, o[i].rows[j].window));
    }
   } catch (exp) {
    wc.del_cookie();
   }
}
};
Object.addEvent(window, [&quot;onload&quot;], function () {
var wc = new CDrag,
   json = /CDrag=([^;]+)(?:;|$)/.test(document.cookie) ? eval('(' + unescape(RegExp.$1) + ')') : [
   { cols : &quot;m_1&quot;, rows : [
    { id : &quot;m_1_1&quot;, window : 1 },
    { id : &quot;m_1_2&quot;, window : 1 },
    { id : &quot;m_1_3&quot;, window : 1 },
    { id : &quot;m_1_4&quot;, window : 1 }
   ] },
   { cols : &quot;m_2&quot;, rows : [
    { id : &quot;m_2_1&quot;, window : 1 },
    { id : &quot;m_2_2&quot;, window : 1 },
    { id : &quot;m_2_3&quot;, window : 1 },
    { id : &quot;m_2_4&quot;, window : 1 }
   ] },
   { cols : &quot;m_3&quot;, rows : [
    { id : &quot;m_3_1&quot;, window : 1 },
    { id : &quot;m_3_2&quot;, window : 1 },
    { id : &quot;m_3_3&quot;, window : 1 },
    { id : &quot;m_3_4&quot;, window : 1 }
   ] },
   { cols : &quot;m_4&quot;, rows : [
    { id : &quot;m_4_1&quot;, window : 1 },
    { id : &quot;m_4_2&quot;, window : 1 },
    { id : &quot;m_4_3&quot;, window : 1 },
    { id : &quot;m_4_4&quot;, window : 1 }
   ] }
];
wc.parse(json);
$(&quot;DEL_CDrag&quot;).onclick = (function (wc) {
   return function () {
    wc.del_cookie();
    window.location.reload();
   };
})(wc);
wc = null;
});
var database = {
json : [
   { id : &quot;m_1_1&quot;, title : &quot;第一列的第一个的说&quot;, content : &quot;第一列的第一个的说&quot; },
   { id : &quot;m_1_2&quot;, title : &quot;第一列的第二个的说&quot;, content : &quot;第一列的第二个的说&quot; },
   { id : &quot;m_1_3&quot;, title : &quot;第一列的第三个的说&quot;, content : &quot;第一列的第三个的说&quot; },
   { id : &quot;m_1_4&quot;, title : &quot;第一列的第四个的说&quot;, content : &quot;第一列的第四个的说&quot; },
   { id : &quot;m_2_1&quot;, title : &quot;第二列的第一个的说&quot;, content : &quot;第二列的第一个的说&quot; },
   { id : &quot;m_2_2&quot;, title : &quot;第二列的第二个的说&quot;, content : &quot;第二列的第二个的说&quot; },
   { id : &quot;m_2_3&quot;, title : &quot;第二列的第三个的说&quot;, content : &quot;第二列的第三个的说&quot; },
   { id : &quot;m_2_4&quot;, title : &quot;第二列的第四个的说&quot;, content : &quot;第二列的第四个的说&quot; },
   { id : &quot;m_3_1&quot;, title : &quot;第三列的第一个的说&quot;, content : &quot;第三列的第一个的说&quot; },
   { id : &quot;m_3_2&quot;, title : &quot;第三列的第二个的说&quot;, content : &quot;第三列的第二个的说&quot; },
   { id : &quot;m_3_3&quot;, title : &quot;第三列的第三个的说&quot;, content : &quot;第三列的第三个的说&quot; },
   { id : &quot;m_3_4&quot;, title : &quot;第三列的第四个的说&quot;, content : &quot;第三列的第四个的说&quot; },
   { id : &quot;m_4_1&quot;, title : &quot;第四列的第一个的说&quot;, content : &quot;第四列的第一个的说&quot; },
   { id : &quot;m_4_2&quot;, title : &quot;第四列的第二个的说&quot;, content : &quot;第四列的第二个的说&quot; },
   { id : &quot;m_4_3&quot;, title : &quot;第四列的第三个的说&quot;, content : &quot;第四列的第三个的说&quot; },
   { id : &quot;m_4_4&quot;, title : &quot;第四列的第四个的说&quot;, content : &quot;第四列的第四个的说&quot; }
],
parse : function (id) {
//昂应该用AJAX查找然后返回数据..我这里就拿..json串模拟好了嘿
   var wc = this, json = wc.json, i;
   for (i in json) {
    if (json[i].id == id)
     return { title : json[i].title, content : json[i].content };
   }
}
};
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a id=&quot;DEL_CDrag&quot; href=&quot;javascript:void(0);&quot;&gt;[清除记录]&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;move&quot; id=&quot;root_row&quot;&gt;
&lt;div class=&quot;title&quot;&gt;&lt;div class=&quot;title_a&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;title_b&quot;&gt;缩小&lt;/div&gt;&lt;div class=&quot;title_c&quot;&gt;关闭&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;content&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;root&quot;&gt;
&lt;div class=&quot;cell&quot; id=&quot;m_1&quot;&gt;
   &lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell r_nbsp&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cell&quot; id=&quot;m_2&quot;&gt;
   &lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell r_nbsp&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cell&quot; id=&quot;m_3&quot;&gt;
   &lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell r_nbsp&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cell&quot; id=&quot;m_4&quot;&gt;
   &lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</textarea></p>
<script type="text/javascript">function changeTsize(){document.getElementById("runcode_IPjzFR").style.height = document.getElementById("runcode_IPjzFR").scrollHeight + "px";}window.setTimeout(changeTsize,0);</script><p><input type="button" value="运行" class="runcode_button" onclick="runcode_open_new('runcode_IPjzFR');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_IPjzFR');"/> <input type="button" value="另存代码" class="runcode_button" onclick="saveCode('runcode_IPjzFR','runcode_IPjzFR');"/> 提示：你可以先修改部分代码再运行。</p>
</div>
<h2  class="related_post_title">随机日志推荐</h2><ul class="related_post"></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/650.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prototype实现登录验证</title>
		<link>http://www.52shidai.com/javascript/prototype/628.html</link>
		<comments>http://www.52shidai.com/javascript/prototype/628.html#comments</comments>
		<pubDate>Tue, 23 Nov 2010 02:37:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[prototype]]></category>
		<category><![CDATA[登录验证]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=628</guid>
		<description><![CDATA[1.页面 &#60;form name=”myform” action=”login.do” method=”post” onSubmit=”return check()”&#62; Name: &#60;input type=text id=”usr” name=”usr”&#62;&#60;br&#62; Password: &#60;input type=password id=”pwd” name=”pwd”&#62;&#60;br&#62; &#60;input type=submit /&#62; &#60;/form&#62; 2.JavaScript &#60;script type=”text/javascript” src=”js/prototype.js”&#62;&#60;/script&#62; &#60;scritp type=”text/javascript”&#62; function check() { //获得用户输入的用户名和密码 var params = “usr=” + document.getElementById(“usr”).value + “&#38;pwd=” + document.getElementById(“pwd”).value; new Ajax.Request( “login”,      //请求URL { method:&#8217;post&#8217;, parameters : params,  //请求参数 onComplete: function(transport) {    //设置回调函数 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Verdana;">1.页面</span></p>
<p><span style="font-family: Verdana;">&lt;form name=”myform” action=”login.do” method=”post” onSubmit=”return check()”&gt;<br />
Name: &lt;input type=text id=”usr” name=”usr”&gt;&lt;br&gt;<br />
Password: &lt;input type=password id=”pwd” name=”pwd”&gt;&lt;br&gt;</span></p>
<p>&lt;input type=submit /&gt;<br />
&lt;/form&gt;<br />
2.JavaScript</p>
<p><span style="font-family: Verdana;">&lt;script type=”text/javascript” src=”js/<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/prototype" title="查看 prototype 中的全部文章" target="_blank">prototype</a></span>.js”&gt;&lt;/script&gt;<br />
&lt;scritp type=”text/javascript”&gt;<br />
function check() {<br />
//获得用户输入的用户名和密码<br />
var params = “usr=” + document.getElementById(“usr”).value + “&amp;pwd=” + document.getElementById(“pwd”).value;</span></p>
<p>new Ajax.Request(<br />
“login”,      //请求URL<br />
{<br />
method:&#8217;post&#8217;,<br />
parameters : params,  //请求参数<br />
onComplete: function(transport) {    //设置回调函数<br />
var data = transport.responseXML;<br />
var flag = data.getElementsByTagName(“flag”)[0].firstChild.nodeValue;</p>
<p>if (flag == “false”) {<br />
alert(&#8216;用户名或密码错误！请重新输入！&#8217;);<br />
} else {<br />
window.open(“ok”, “_top”);<br />
}<br />
}<br />
});</p>
<p>return false;<br />
}<br />
怎样，和上一篇实现相同的功能，却简单了许多</p>
<p><span style="font-family: Verdana;">二、Ajax.Updater</span></p>
<p><span style="font-family: Verdana;">Ajax.Updater是用来将返回的html插入到指定的标签中。比如</span></p>
<p><span style="font-family: Verdana;">页面：</span></p>
<p><span style="font-family: Verdana;">&lt;body&gt;<br />
&lt;form name=”myform” action=”login.do” method=”post” &gt;<br />
&lt;div id=”s”&gt;&lt;/div&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
JavaScript：</span></p>
<p><span style="font-family: Verdana;">function check()  {<br />
//获得用户输入的用户名和密码<br />
var params = “usr=” + document.getElementById(“usr”).value + “&amp;pwd=” + document.getElementById(“pwd”).value;</span></p>
<p>new Ajax.Updater(<br />
&#8216;s&#8217;,    //要将html插入的标签ID<br />
&#8216;login&#8217;,   //能获得HTML的请求URL<br />
{<br />
method: “post”,<br />
parameters : params  参数<br />
});<br />
return false;<br />
}<br />
这样，从服务器返回的HTML就会被插入到指定的标签中。</p>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/prototype/597.html" title="网络收集prototype的学习资料集合">网络收集prototype的学习资料集合</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/prototype/628.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>不要滥用jQuery的$(this)</title>
		<link>http://www.52shidai.com/javascript/jquery/621.html</link>
		<comments>http://www.52shidai.com/javascript/jquery/621.html#comments</comments>
		<pubDate>Tue, 16 Nov 2010 08:39:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.52shidai.com/?p=621</guid>
		<description><![CDATA[如果不了解javasrcipt中基本的DOM属性和方法的话，很容易滥用jQuery对象。比如： $(&#8216;#someAnchor&#8217;).click(function() { alert( $(this).attr(&#8216;id&#8217;) ); }); 如果你只是通过jQ对象获取简单的dom元素的属性比如id，那么你完全可以使用js原生的方法： $(&#8216;#someAnchor&#8217;).click(function() { alert( this.id ); }); 诸如“src,” “href,” 和“style.”等一些属性在老版本的ie中使用了getAttribute方法。 您可能感兴趣的文章jQ.Mobi—针对移动设备优化的jQueryjQuery-bind不能处理绑定hover事件9个实用jQuery日历插件jQuery 操作css 设置样式JQUERY操作XML实例教程编写高性能的jQuery代码jQuery中的mouseenter和mouseleave事件流动导航菜单-Fluid Navigation 使用Jquery+CSS创建高亮显示文本中重要关键字（Jquery ）12个用jQuery插件改变Button按钮的漂亮特效]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">
<div id="_mcePaste">如果不了解javasrcipt中基本的DOM属性和方法的话，很容易滥用<span class='wp_keywordlink_affiliate'><a href="http://www.52shidai.com/tag/jquery" title="查看 jQuery 中的全部文章" target="_blank">jQuery</a></span>对象。比如：</div>
<div id="_mcePaste"></div>
<div id="_mcePaste">$(&#8216;#someAnchor&#8217;).click(function() {</div>
<div id="_mcePaste">alert( $(this).attr(&#8216;id&#8217;) );</div>
<div id="_mcePaste">});</div>
<div id="_mcePaste"></div>
<div id="_mcePaste">如果你只是通过jQ对象获取简单的dom元素的属性比如id，那么你完全可以使用js原生的方法：</div>
<div id="_mcePaste"></div>
<div id="_mcePaste">$(&#8216;#someAnchor&#8217;).click(function() {</div>
<div id="_mcePaste">alert( this.id );</div>
<div id="_mcePaste">});</div>
<div id="_mcePaste"></div>
<div id="_mcePaste">诸如“src,” “href,” 和“style.”等一些属性在老版本的ie中使用了getAttribute方法。</div>
</div>
<h2  class="related_post_title">您可能感兴趣的文章</h2><ul class="related_post"><li><a href="http://www.52shidai.com/javascript/jquery/926.html" title="jQ.Mobi—针对移动设备优化的jQuery">jQ.Mobi—针对移动设备优化的jQuery</a></li><li><a href="http://www.52shidai.com/javascript/jquery/748.html" title="jQuery-bind不能处理绑定hover事件">jQuery-bind不能处理绑定hover事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/738.html" title="9个实用jQuery日历插件">9个实用jQuery日历插件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/732.html" title="jQuery 操作css 设置样式">jQuery 操作css 设置样式</a></li><li><a href="http://www.52shidai.com/javascript/jquery/705.html" title="JQUERY操作XML实例教程">JQUERY操作XML实例教程</a></li><li><a href="http://www.52shidai.com/javascript/jquery/619.html" title="编写高性能的jQuery代码">编写高性能的jQuery代码</a></li><li><a href="http://www.52shidai.com/javascript/jquery/558.html" title="jQuery中的mouseenter和mouseleave事件">jQuery中的mouseenter和mouseleave事件</a></li><li><a href="http://www.52shidai.com/javascript/jquery/551.html" title="流动导航菜单-Fluid Navigation 使用Jquery+CSS创建">流动导航菜单-Fluid Navigation 使用Jquery+CSS创建</a></li><li><a href="http://www.52shidai.com/javascript/jquery/549.html" title="高亮显示文本中重要关键字（Jquery ）">高亮显示文本中重要关键字（Jquery ）</a></li><li><a href="http://www.52shidai.com/javascript/jquery/546.html" title="12个用jQuery插件改变Button按钮的漂亮特效">12个用jQuery插件改变Button按钮的漂亮特效</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.52shidai.com/javascript/jquery/621.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

