﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-忆风-随笔分类-JavaScript</title><link>http://www.blogjava.net/yifeng/category/34094.html</link><description>光是知道是不够的，必须要加以应用；光是希望是不够的，非去做不可。</description><language>zh-cn</language><lastBuildDate>Fri, 21 Nov 2008 09:45:46 GMT</lastBuildDate><pubDate>Fri, 21 Nov 2008 09:45:46 GMT</pubDate><ttl>60</ttl><item><title>风声JS菜单树</title><link>http://www.blogjava.net/yifeng/archive/2008/11/21/241775.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Thu, 20 Nov 2008 16:30:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/11/21/241775.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/241775.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/11/21/241775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/241775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/241775.html</trackback:ping><description><![CDATA[<img height="475" alt="" src="http://www.blogjava.net/images/blogjava_net/yifeng/other/20081111093853.gif" width="465" border="0" /><br />
<br />
<br />
<p><strong>本程序为无限级树形菜单提供一种方案。程序基于 JavaScript/XHTML/CSS 标准实现，适应广泛的服务器/浏览器环境。</strong></p>
<p><strong>本程序支持丰富的功能/表现定制：拥有表现和数据分离，单页面可以应用多个无限级菜单树，多达4种展开模式，风格样式定义结构清晰、灵活又精细等等特性，演示可以见一斑。</strong></p>
<p><strong>本程序在实现 1000 节点以上菜单树时效率下降明显，请适当应用。<br />
<br />
下载地址：<a title="MenuTree.rar" href="/Files/yifeng/Repository/MenuTree.rar">MenuTree.rar</a></strong></p>
<img src ="http://www.blogjava.net/yifeng/aggbug/241775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-11-21 00:30 <a href="http://www.blogjava.net/yifeng/archive/2008/11/21/241775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript正则表达式使用详解</title><link>http://www.blogjava.net/yifeng/archive/2008/10/06/232585.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Sun, 05 Oct 2008 17:22:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/10/06/232585.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/232585.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/10/06/232585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/232585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/232585.html</trackback:ping><description><![CDATA[<p>简介 </p>
<p>简单的说，正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下： <br />
测试字符串的某个模式。例如，可以对一个输入字符串进行测试，看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 <br />
替换文本。可以在文档中使用一个正则表达式来标识特定文字，然后可以全部将其删除，或者替换为别的文字。 <br />
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。 </p>
<p>基本语法 </p>
<p>在对正则表达式的功能和作用有了初步的了解之后，我们就来具体看一下正则表达式的语法格式。 <br />
正则表达式的形式一般如下：　　</p>
<p>/love/　　其中位于&#8220;/&#8221;定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入&#8220;/&#8221;定界符之间即可。为了能够使用户更加灵活的定制模式内容，正则表达式提供了专门的&#8220;元字符&#8221;。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符，可以用来规定其前导字符（即位于元字符前面的字符）在目标对象中的出现模式。 <br />
较为常用的元字符包括： &#8220;+&#8221;， &#8220;*&#8221;，以及 &#8220;?&#8221;。</p>
<p>&#8220;+&#8221;元字符规定其前导字符必须在目标对象中连续出现一次或多次。<br />
&#8220;*&#8221;元字符规定其前导字符必须在目标对象中出现零次或连续多次。<br />
&#8220;?&#8221;元字符规定其前导对象必须在目标对象中连续出现零次或一次。</p>
<p>下面，就让我们来看一下正则表达式元字符的具体应用。 </p>
<p>/fo+/　　因为上述正则表达式中包含&#8220;+&#8221;元字符，表示可以与目标对象中的 &#8220;fool&#8221;, &#8220;fo&#8221;, 或者 &#8220;football&#8221;等在字母f后面连续出现一个或多个字母o的字符串相匹配。 </p>
<p>/eg*/　　因为上述正则表达式中包含&#8220;*&#8221;元字符，表示可以与目标对象中的 &#8220;easy&#8221;, &#8220;ego&#8221;, 或者 &#8220;egg&#8221;等在字母e后面连续出现零个或多个字母g的字符串相匹配。 </p>
<p>/Wil?/　　因为上述正则表达式中包含&#8220;？&#8221;元字符，表示可以与目标对象中的 &#8220;Win&#8221;, 或者&#8220;Wilson&#8221;,等在字母i后面连续出现零个或一个字母l的字符串相匹配。 </p>
<p>有时候不知道要匹配多少字符。为了能适应这种不确定性，正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。</p>
<p>{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</p>
<p>{n,} n 是一个非负整数。至少匹配 n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。</p>
<p>{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</p>
<p>除了元字符之外，用户还可以精确指定模式在匹配对象中出现的频率。例如，/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次，因此，上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。 <br />
在对如何使用正则表达式有了初步了解之后，我们来看一下其它几个重要的元字符的使用方式。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>\s：用于匹配单个空格符，包括tab键和换行符；&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>\S：用于匹配除单个空格符之外的所有字符；&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>\d：用于匹配从</span><span class="number">0</span><span>到</span><span class="number">9</span><span>的数字；&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>\w：用于匹配字母，数字或下划线字符；&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>\W：用于匹配所有与\w不匹配的字符；&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>. ：用于匹配除换行符之外的所有字符。&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
（说明：我们可以把\s和\S以及\w和\W看作互为逆运算） <br />
下面，我们就通过实例看一下如何在正则表达式中使用上述元字符。 <br />
/\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 <br />
/\d000/　如果我们手中有一份复杂的财务报表，那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。 <br />
除了我们以上所介绍的元字符之外，正则表达式中还具有另外一种较为独特的专用字符，即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括： &#8220;^&#8221;, &#8220;$&#8221;, &#8220;\b&#8221; 以及 &#8220;\B&#8221;。 <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>&#8220;^&#8221;定位符规定匹配模式必须出现在目标字符串的开头&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>&#8220;$&#8221;定位符规定匹配模式必须出现在目标对象的结尾&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>&#8220;\b&#8221;定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一&nbsp;&nbsp;&nbsp;</span>
    <li><span>&#8220;\B&#8221;定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内，&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即匹配对象既不能作为目标字符串的开头，也不能作为目标字符串的结尾。&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
同样，我们也可以把&#8220;^&#8221;和&#8220;$&#8221;以及&#8220;\b&#8221;和&#8220;\B&#8221;看作是互为逆运算的两组定位符。举例来说： /^hell/　因为上述正则表达式中包含&#8220;^&#8221;定位符，所以可以与目标对象中以 &#8220;hell&#8221;, &#8220;hello&#8221;或&#8220;hellhound&#8221;开头的字符串相匹配。 /ar$/　因为上述正则表达式中包含&#8220;$&#8221;定位符，所以可以与目标对象中以 &#8220;car&#8221;, &#8220;bar&#8221;或 &#8220;ar&#8221; 结尾的字符串相匹配。 /\bbom/　因为上述正则表达式模式以&#8220;\b&#8221;定位符开头，所以可以与目标对象中以 &#8220;bomb&#8221;, 或 &#8220;bom&#8221;开头的字符串相匹配。/man\b/　因为上述正则表达式模式以&#8220;\b&#8221;定位符结尾，所以可以与目标对象中以 &#8220;human&#8221;, &#8220;woman&#8221;或 &#8220;man&#8221;结尾的字符串相匹配。 <br />
为了能够方便用户更加灵活的设定匹配模式，正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如： <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>/[A-Z]/　上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>/[a-z]/　上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>/[</span><span class="number">0</span><span>-</span><span class="number">9</span><span>]/&nbsp;&nbsp;&nbsp; 上述正则表达式将会与从</span><span class="number">0</span><span>到</span><span class="number">9</span><span>范围内任何一个数字相匹配。&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>/([a-z][A-Z][</span><span class="number">0</span><span>-</span><span class="number">9</span><span>])+/　上述正则表达式将会与任何由字母和数字组成的字符串，如 &#8220;aB0&#8221; 等相匹配。&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
这里需要提醒用户注意的一点就是可以在正则表达式中使用 &#8220;()&#8221; 把字符串组合在一起。&#8220;()&#8221;符号包含的内容必须同时出现在目标对象中。因此，上述正则表达式将无法与诸如 &#8220;abc&#8221;等的字符串匹配，因为&#8220;abc&#8221;中的最后一个字符为字母而非数字。 <br />
如果我们希望在正则表达式中实现类似编程逻辑中的&#8220;或&#8221;运算，在多个不同的模式中任选一个进行匹配的话，可以使用管道符 &#8220;|&#8221;。例如：/to|too|2/　上述正则表达式将会与目标对象中的 &#8220;to&#8221;, &#8220;too&#8221;, 或 &#8220;2&#8221; 相匹配。 <br />
正则表达式中还有一个较为常用的运算符，即否定符 &#8220;[^]&#8221;。与我们前文所介绍的定位符 &#8220;^&#8221; 不同，否定符 &#8220;[^]&#8221;规定目标对象中不能存在模式中所规定的字符串。例如：/[^A-C]/　上述字符串将会与目标对象中除A，B，和C之外的任何字符相匹配。一般来说，当&#8220;^&#8221;出现在 &#8220;[]&#8221;内时就被视做否定运算符；而当&#8220;^&#8221;位于&#8220;[]&#8221;之外，或没有&#8220;[]&#8221;时，则应当被视做定位符。 <br />
最后，当用户需要在正则表达式的模式中加入元字符，并查找其匹配对象时，可以使用转义符&#8220;\&#8221;。例如：/Th\*/ 　上述正则表达式将会与目标对象中的&#8220;Th*&#8221;而非&#8220;The&#8221;等相匹配。 <br />
在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先级顺序来求值。优先级如下： <br />
<div class="code_title">代码</div>
<div class="bar"></div>
<div>
<ol>
    <li class="alt"><span><span>\ 转义符&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>(), (?:), (?=), [] 圆括号和方括号&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>*, +, ?, {n}, {n,}, {n,m} 限定符&nbsp;&nbsp;&nbsp;</span>
    <li><span>^, $, \anymetacharacter 位置和顺序&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>|&#8220;或&#8221;操作</span> </li>
</ol>
</div>
<p class="alt"></p>
<p class="alt"><span style="font-size: 18pt">使用实例</span> <br />
在JavaScript 1.2中带有一个功能强大的RegExp()对象，可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式，并相应的返回true或false。 <br />
我们可以使用JavaScript编写以下脚本，验证用户输入的邮件地址的有效性。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　 </span><span class="tag">&lt;</span><span class="tag-name">script</span><span> </span><span class="attribute">language</span><span>=</span><span class="attribute-value">"Javascript1.2"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　 &lt;!-- start hiding&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　 function verifyAddress(obj)&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　{&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　var </span><span class="attribute">email</span><span> = </span><span class="attribute-value">obj</span><span>.email.value;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　var </span><span class="attribute">pattern</span><span> =&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　</span><span class="attribute">flag</span><span> = </span><span class="attribute-value">pattern</span><span>.test(email);&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　if(flag)&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　{&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　　alert(&#8220;Your email address is correct!&#8221;);&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　　return true;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　}&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　else&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　　{&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　　　alert(&#8220;Please try again!&#8221;);&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　　　　return false;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　　　　 }&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　　　 }&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　　 // stop hiding --</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　 </span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　</span><span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　 </span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　 </span><span class="tag">&lt;</span><span class="tag-name">form</span><span> </span><span class="attribute">onSubmit</span><span>=</span><span class="attribute-value">"return verifyAddress(this);"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　 </span><span class="tag">&lt;</span><span class="tag-name">input</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"email"</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"text"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　　 </span><span class="tag">&lt;</span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"submit"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>　　　 </span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>　　</span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">正则表达式对象</span> <br />
本对象包含正则表达式模式以及表明如何应用模式的标志。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>语法 </span><span class="number">1</span><span> re = /pattern/[flags]&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>语法 </span><span class="number">2</span><span> re = </span><span class="keyword">new</span><span> RegExp(</span><span class="string">"pattern"</span><span>,[</span><span class="string">"flags"</span><span>])&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
参数 <br />
re <br />
必选项。将要赋值为正则表达式模式的变量名。
<p>Pattern <br />
必选项。要使用的正则表达式模式。如果使用语法 1，用 "/" 字符分隔模式。如果用语法 2，用引号将模式引起来。 </p>
<p>Flags <br />
可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用，可用的有： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>g （全文查找出现的所有 pattern）&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>i （忽略大小写）&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>m （多行查找）&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p><span style="font-size: 18pt">示例</span> <br />
下面的示例创建一个包含正则表达式模式及相关标志的对象(re)，向您演示正则表达式对象的用法。在本例中，作为结果的正则表达式对象又用于 match 方法中： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function MatchDemo()&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var r, re; </span><span class="comment">// 声明变量。 </span><span>&nbsp;&nbsp;</span>
    <li><span>var s = </span><span class="string">"The rain in Spain falls mainly in the plain"</span><span>;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>re = </span><span class="keyword">new</span><span> RegExp(</span><span class="string">"ain"</span><span>,</span><span class="string">"g"</span><span>); </span><span class="comment">// 创建正则表达式对象。 </span><span>&nbsp;&nbsp;</span>
    <li><span>r = s.match(re); </span><span class="comment">// 在字符串 s 中查找匹配。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span>(r);&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; </li>
</ol>
</div>
</div>
<p>返回值： ain,ain,ain,ain\\ <br />
属性 lastIndex 属性 | source 属性\\ <br />
方法 compile 方法 | exec 方法 | test 方法\\ <br />
要求 版本 3\\ <br />
请参阅 RegExp 对象 | 正则表达式语法 | String 对象\\</p>
<p><span style="font-size: 18pt">exec 方法</span> <br />
用正则表达式模式在字符串中运行查找，并返回包含该查找结果的一个数组。 <br />
rgExp.exec(str)</p>
<p>参数</p>
<p>rgExp <br />
必选项。包含正则表达式模式和可用标志的正则表达式对象。 </p>
<p>str <br />
必选项。要在其中执行查找的 String 对象或字符串文字。 </p>
<p>说明\\ <br />
如果 exec 方法没有找到匹配，则它返回 null。如果它找到匹配，则 exec 方法返回一个数组，并且更新全局 RegExp 对象的属性，以反映匹配结果。数组的0元素包含了完整的匹配，而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。 <br />
如果为正则表达式设置了全局标志，exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志，exec 忽略 lastIndex 的值，从字符串的起始位置开始搜索。</p>
<p>exec 方法返回的数组有三个属性，分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。</p>
<p>示例\\ <br />
下面的例子举例说明了 exec 方法的用法： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function RegExpTest()&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var ver = Number(ScriptEngineMajorVersion() + </span><span class="string">"."</span><span> + ScriptEngineMinorVersion())&nbsp;&nbsp;&nbsp;</span>
    <li><span class="keyword">if</span><span> (ver &gt;= </span><span class="number">5.5</span><span>){ </span><span class="comment">// 测试 JScript 的版本。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>var src = </span><span class="string">"The rain in Spain falls mainly in the plain."</span><span>;&nbsp;&nbsp;&nbsp;</span>
    <li><span>var re = /\w+/g; </span><span class="comment">// 创建正则表达式模式。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>var arr;&nbsp;&nbsp;&nbsp;</span>
    <li><span class="keyword">while</span><span> ((arr = re.exec(src)) != </span><span class="keyword">null</span><span>)&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>document.write(arr.index + </span><span class="string">"-"</span><span> + arr.lastIndex + arr + </span><span class="string">"\t"</span><span>);&nbsp;&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">else</span><span>{&nbsp;&nbsp;&nbsp;</span>
    <li><span>alert(</span><span class="string">"请使用 JScript 的更新版本"</span><span>);&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>返回值：0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain</p>
<p>test 方法\\ <br />
返回一个 Boolean 值，它指出在被查找的字符串中是否存在模式。 <br />
rgexp.test(str) </p>
<p>参数\\ <br />
rgexp <br />
必选项。包含正则表达式模式或可用标志的正则表达式对象。 </p>
<p>str <br />
必选项。要在其上测试查找的字符串。 </p>
<p>说明 <br />
test 方法检查在字符串中是否存在一个模式，如果存在则返回 true，否则就返回 false。 <br />
全局 RegExp 对象的属性不由 test 方法来修改。</p>
<p>示例 <br />
下面的例子举例说明了 test 方法的用法： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function TestDemo(re, s)&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var s1; </span><span class="comment">// 声明变量。 </span><span>&nbsp;&nbsp;</span>
    <li><span class="comment">// 检查字符串是否存在正则表达式。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">if</span><span> (re.test(s)) </span><span class="comment">// 测试是否存在。 </span><span>&nbsp;&nbsp;</span>
    <li><span>s1 = </span><span class="string">" contains "</span><span>; </span><span class="comment">// s 包含模式。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">else</span><span>&nbsp;&nbsp;</span>
    <li><span>s1 = </span><span class="string">" does not contain "</span><span>; </span><span class="comment">// s 不包含模式。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span>(</span><span class="string">"'"</span><span> + s + </span><span class="string">"'"</span><span> + s1 + </span><span class="string">"'"</span><span>+ re.source + </span><span class="string">"'"</span><span>); </span><span class="comment">// 返回字符串。 </span><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>函数调用：document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));</p>
<p>返回值：'The rain in Spain falls mainly in the plain.' contains 'ain+'</p>
<p><span style="font-size: 18pt">match 方法</span> <br />
使用正则表达式模式对字符串执行查找，并将包含查找的结果作为数组返回。\\ <br />
stringObj.match(rgExp) </p>
<p>参数\\ <br />
stringObj <br />
必选项。对其进行查找的 String 对象或字符串文字。 </p>
<p>rgExp <br />
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。 </p>
<p>说明\\ <br />
如果 match 方法没有找到匹配，返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 <br />
match 方法返回的数组有三个属性：input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。 <br />
如果没有设置全局标志 (g)，数组的 0 元素包含整个匹配，而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志，元素 0 到 n 中包含所有匹配。</p>
<p>示例\\ <br />
下面的示例演示了match 方法的用法： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function MatchDemo()&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var r, re; </span><span class="comment">// 声明变量。 </span><span>&nbsp;&nbsp;</span>
    <li><span>var s = </span><span class="string">"The rain in Spain falls mainly in the plain"</span><span>;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>re = /ain/i; </span><span class="comment">// 创建正则表达式模式。 </span><span>&nbsp;&nbsp;</span>
    <li><span>r = s.match(re); </span><span class="comment">// 尝试匹配搜索字符串。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span>(r); </span><span class="comment">// 返回第一次出现 "ain" 的地方。 </span><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
返回值：ain&nbsp;&nbsp;
<p>本示例说明带 g 标志设置的 match 方法的用法。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function MatchDemo()&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var r, re; </span><span class="comment">// 声明变量。 </span><span>&nbsp;&nbsp;</span>
    <li><span>var s = </span><span class="string">"The rain in Spain falls mainly in the plain"</span><span>;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>re = /ain/ig; </span><span class="comment">// 创建正则表达式模式。 </span><span>&nbsp;&nbsp;</span>
    <li><span>r = s.match(re); </span><span class="comment">// 尝试去匹配搜索字符串。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span>(r); </span><span class="comment">// 返回的数组包含了所有 "ain"&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span>
    <li><span class="comment">// 出现的四个匹配。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
返回值：ain,ain,ain,ain
<p>上面几行代码演示了字符串文字的 match 方法的用法。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>var r, re = </span><span class="string">"Spain"</span><span>;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>r = </span><span class="string">"The rain in Spain"</span><span>.replace(re, </span><span class="string">"Canada"</span><span>);&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span> r;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
返回值：The rain in Canada
<p><span style="font-size: 18pt">search 方法</span> <br />
返回与正则表达式查找内容匹配的第一个子字符串的位置。</p>
<p>stringObj.search(rgExp)</p>
<p>参数\\ <br />
stringObj <br />
必选项。要在其上进行查找的 String 对象或字符串文字。 </p>
<p>rgExp <br />
必选项。包含正则表达式模式和可用标志的正则表达式对象。 </p>
<p>说明</p>
<p>search 方法指明是否存在相应的匹配。如果找到一个匹配，search 方法将返回一个整数值，指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配，则返回 -1。</p>
<p>示例\\ <br />
下面的示例演示了 search 方法的用法。 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>function SearchDemo()&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>{&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>var r, re; </span><span class="comment">// 声明变量。 </span><span>&nbsp;&nbsp;</span>
    <li><span>var s = </span><span class="string">"The rain in Spain falls mainly in the plain."</span><span>;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>re = /falls/i; </span><span class="comment">// 创建正则表达式模式。 </span><span>&nbsp;&nbsp;</span>
    <li><span>r = s.search(re); </span><span class="comment">// 查找字符串。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="keyword">return</span><span>(r); </span><span class="comment">// 返回 Boolean 结果。 </span><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
返回值：18 <br />
<br />
<br />
<p><span style="font-size: 18pt">正则表达式语法</span> <br />
一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
<p>这里有一些可能会遇到的正则表达式示例： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>JScript VBScript 匹配&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>/^\[ \t]*$/ </span><span class="string">"^\[ \t]*$"</span><span> 匹配一个空白行。&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>/\d{</span><span class="number">2</span><span>}-\d{</span><span class="number">5</span><span>}/ </span><span class="string">"\d{2}-\d{5}"</span><span> 验证一个ID 号码是否由一个</span><span class="number">2</span><span>位数字，一个连字符以及一个</span><span class="number">5</span><span>位数字组成。&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>/&lt;(.*)&gt;.*&lt;\/\</span><span class="number">1</span><span>&gt;/ </span><span class="string">"&lt;(.*)&gt;.*&lt;\/\1&gt;"</span><span> 匹配一个 HTML 标记。&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; </li>
</ol>
</div>
</div>
<p>下表是元字符及其在正则表达式上下文中的行为的一个完整列表：</p>
<p>字符 描述 <br />
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 </p>
<p>^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。 </p>
<p>$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。 </p>
<p>* 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。 </p>
<p>+ 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 </p>
<p>? 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。 </p>
<p>{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。 </p>
<p>{n,} n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 </p>
<p>{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。刘， "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 </p>
<p>? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。 </p>
<p>. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。 <br />
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0&#8230;$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。 </p>
<p>(?:pattern) 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 </p>
<p>(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如， 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。 </p>
<p>(?!pattern) 负向预查，在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始 </p>
<p>x|y 匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 </p>
<p>[xyz] 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。 </p>
<p>[^xyz] 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。 </p>
<p>[a-z] 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 </p>
<p>[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 </p>
<p>\b 匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。 </p>
<p>\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。 </p>
<p>\cx 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。 </p>
<p>\d 匹配一个数字字符。等价于 [0-9]。 </p>
<p>\D 匹配一个非数字字符。等价于 [^0-9]。 </p>
<p>\f 匹配一个换页符。等价于 \x0c 和 \cL。 </p>
<p>\n 匹配一个换行符。等价于 \x0a 和 \cJ。 </p>
<p>\r 匹配一个回车符。等价于 \x0d 和 \cM。 </p>
<p>\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 </p>
<p>\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 </p>
<p>\t 匹配一个制表符。等价于 \x09 和 \cI。 </p>
<p>\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 </p>
<p>\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 </p>
<p>\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 </p>
<p>\xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如， '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。. </p>
<p>\num 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。 </p>
<p>\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 </p>
<p>\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 </p>
<p>\nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 </p>
<p>\un 匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。 </p>
<p><span style="font-size: 18pt">优先权顺序</span> <br />
在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先权顺序来求值。 </p>
<p>下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>操作符 描述&nbsp;&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>\ 转义符&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>(), (?:), (?=), [] 圆括号和方括号&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>*, +, ?, {n}, {n,}, {n,m} 限定符&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>^, $, \anymetacharacter 位置和顺序&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li><span>| &#8220;或&#8221;操作&nbsp;&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>普通字符</p>
<p>普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。 </p>
<p>最简单的正则表达式是一个单独的普通字符，可以匹配所搜索字符串中的该字符本身。例如，单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>/a/&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>/</span><span class="number">7</span><span>/&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>/M/&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
等价的 VBScript 单字符正则表达式为： <br />
<div class="code_title">代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="string">"a"</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="string">"7"</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span class="string">"M"</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<br />
可以将多个单字符组合在一起得到一个较大的表达式。例如，下面的 JScript 正则表达式不是别的，就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。
<p>/a7M/ <br />
等价的 VBScript 表达式为：</p>
<p>"a7M" <br />
请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。</p>
<img src ="http://www.blogjava.net/yifeng/aggbug/232585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-10-06 01:22 <a href="http://www.blogjava.net/yifeng/archive/2008/10/06/232585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JavaScript刷新框架子页面的8种方法</title><link>http://www.blogjava.net/yifeng/archive/2008/10/06/232584.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Sun, 05 Oct 2008 17:15:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/10/06/232584.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/232584.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/10/06/232584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/232584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/232584.html</trackback:ping><description><![CDATA[先来看一个简单的例子：<br />
下面以三个页面分别命名为frame.html、top.html、bottom.html为例来具体说明如何做。 <br />
<br />
frame.html 由上(top.html)下(bottom.html)两个页面组成，代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> frame </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> <br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">frameset </span><span style="color: #ff0000">rows</span><span style="color: #0000ff">="50%,50%"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">frame </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=top&nbsp;&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="top.html"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">frame </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=bottom&nbsp;&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="bottom.html"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">frameset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>现在假设top.html (即上面的页面) 有七个button来实现对bottom.html (即下面的页面) 的刷新，可以用以下七种语句，哪个好用自己看着办了。</p>
<p>语句1. window.parent.frames[1].location.reload();<br />
语句2. window.parent.frames.bottom.location.reload();<br />
语句3. window.parent.frames["bottom"].location.reload();<br />
语句4. window.parent.frames.item(1).location.reload();<br />
语句5. window.parent.frames.item('bottom').location.reload();<br />
语句6. window.parent.bottom.location.reload();<br />
语句7. window.parent['bottom'].location.reload();<br />
<br />
top.html 页面的代码如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> top.html </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新1"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.frames[1].location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新2"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.frames.bottom.location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新3"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.frames['bottom'].location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新4"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.frames.item(1).location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新5"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.frames.item('bottom').location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新6"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent.bottom.location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=button </span><span style="color: #ff0000">value</span><span style="color: #0000ff">="刷新7"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="window.parent['bottom'].location.reload()"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<br />
下面是bottom.html页面源代码，为了证明下方页面的确被刷新了，在装载完页面弹出一个对话框。<br />
<br />
bottom.html 页面的代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"> bottom.html </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY </span><span style="color: #ff0000">onload</span><span style="color: #0000ff">="alert('我被加载了！')"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This is the content in bottom.html.</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
解释一下：<br />
1.window指代的是当前页面，例如对于此例它指的是top.html页面。<br />
2.parent指的是当前页面的父页面，也就是包含它的框架页面。例如对于此例它指的是framedemo.html。<br />
3.frames是window对象，是一个数组。代表着该框架内所有子页面。<br />
4.item是方法。返回数组里面的元素。<br />
5.如果子页面也是个框架页面，里面还是其它的子页面，那么上面的有些方法可能不行。<br />
<br />
<span style="color: red"><strong>附：<br />
</strong><span style="color: #000000"><strong>Javascript刷新页面的几种方法：</strong><br />
1&nbsp;&nbsp;&nbsp; history.go(0) <br />
2&nbsp;&nbsp;&nbsp; location.reload() <br />
3&nbsp;&nbsp;&nbsp; location=location <br />
4&nbsp;&nbsp;&nbsp; location.assign(location) <br />
5&nbsp;&nbsp;&nbsp; document.execCommand('Refresh') <br />
6&nbsp;&nbsp;&nbsp; window.navigate(location) <br />
7&nbsp;&nbsp;&nbsp; location.replace(location) <br />
8&nbsp;&nbsp;&nbsp; document.URL=location.href <br />
</span><br />
<p>&nbsp;</p>
<p><strong>自动刷新页面的方法:<br />
</strong>1.页面自动刷新：把如下代码加入&lt;head&gt;区域中<br />
&lt;meta http-equiv="refresh" content="20"&gt;<br />
其中20指每隔20秒刷新一次页面.</p>
<p>2.页面自动跳转：把如下代码加入&lt;head&gt;区域中<br />
&lt;meta http-equiv="refresh" content="20;url=http://www.wyxg.com"&gt;<br />
其中20指隔20秒后跳转到http://www.wyxg.com页面</p>
<p>3.页面自动刷新js版<br />
&lt;script language="JavaScript"&gt;<br />
function myrefresh()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.location.reload();<br />
}<br />
setTimeout('myrefresh()',1000); //指定1秒刷新一次<br />
&lt;/script&gt;</p>
<p><strong>ASP.NET如何输出刷新父窗口脚本语句<br />
</strong>1.&nbsp;&nbsp; this.response.write("&lt;script&gt;opener.location.reload();&lt;/script&gt;");&nbsp;&nbsp;</p>
<p><span style="color: #000000">2.&nbsp;&nbsp; this.response.write("&lt;script&gt;opener.window.location.href = opener.window.location.href;&lt;/script&gt;");&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="color: #000000">3.&nbsp;&nbsp; Response.Write("&lt;script language=javascript&gt;opener.window.navigate(''你要刷新的页.asp'');&lt;/script&gt;")</span></p>
<p><span style="color: #000000"><strong><br />
JS刷新框架的脚本语句<br />
</strong><br />
//如何刷新包含该框架的页面用&nbsp;&nbsp;&nbsp;<br />
&lt;script language=JavaScript&gt;<br />
&nbsp;&nbsp; parent.location.reload();<br />
&lt;/script&gt;&nbsp;&nbsp;&nbsp;<br />
</span></p>
<p><span style="color: #000000"><span style="color: #000000">//子窗口刷新父窗口<br />
&lt;script language=JavaScript&gt;<br />
&nbsp;&nbsp;&nbsp; self.opener.location.reload();<br />
&lt;/script&gt;</span><br />
(　或　<span>&lt;a href="javascript:opener.location.reload()"&gt;</span><span>刷新</span><font face="verdana,arial,helvetica,sans-serif"><span>&lt;/a&gt;&nbsp;&nbsp;&nbsp;</span></font>)<br />
<br />
//如何刷新另一个框架的页面用&nbsp;&nbsp;&nbsp;<br />
&lt;script language=JavaScript&gt;<br />
&nbsp;&nbsp; parent.另一FrameID.location.reload();<br />
</span><span style="color: #000000">&lt;/script&gt;</span><br />
<br />
<span><span style="color: #000000"><strong><span>如果想关闭窗口时刷新或者想开窗时刷新的话，在</span><span>&lt;body&gt;</span><span>中调用以下语句即可。</span></strong><span><br />
<br />
<font face="verdana,arial,helvetica,sans-serif">&lt;body onload="opener.location.reload()"&gt; </font></span><span><font face="verdana,arial,helvetica,sans-serif">开窗时刷新</font></span><span><br />
<font face="verdana,arial,helvetica,sans-serif">&lt;body onUnload="opener.location.reload()"&gt; </font></span><span><font face="verdana,arial,helvetica,sans-serif">关闭时刷新</font></span><span><br />
<br />
<font face="verdana,arial,helvetica,sans-serif">&lt;script language="javascript"&gt;<br />
window.opener.document.location.reload()<br />
&lt;/script&gt;<br />
<br />
<strong>在弹出窗口的BODY中加入&nbsp;&nbsp;<font color="#ff0000">onUnload="window.opener.location.reload();" </font>&nbsp;&nbsp; 关闭弹出窗口则自动刷新父窗口.</strong></font></span></span></span></p>
</span>
<img src ="http://www.blogjava.net/yifeng/aggbug/232584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-10-06 01:15 <a href="http://www.blogjava.net/yifeng/archive/2008/10/06/232584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE和Firefox的兼容问题</title><link>http://www.blogjava.net/yifeng/archive/2008/09/15/228942.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Sun, 14 Sep 2008 16:53:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2008/09/15/228942.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/228942.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2008/09/15/228942.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/228942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/228942.html</trackback:ping><description><![CDATA[<div align="center">
<div id="paperTitleArea" style="background-position: center 50%; margin-top: 50px; background-image: url(/qzone/space_item/orig/8/27928_t.gif); margin-bottom: 35px; width: 345px; background-repeat: no-repeat; height: 70px" align="center"><span id="paperTitle" style="margin-top: 25px; display: block; font-weight: bolder; word-break: break-all"><font style="color: #0000ff" face="宋体" color="#80ffff" size="4">IE和Firefox的兼容问题</font></span></div>
</div>
在E桌面<a href="http://www.epopos.com/" target="_blank">http://www.epopos.com</a><wbr>开发过程中总结了一些IE和Firefox的兼容问题。 <br />
</strong><wbr><br />
1</strong><wbr>、Event的问题</strong><wbr> <br />
在ie中我们可以直接使用event变量，但是在firefox下由于event是局部变量，firefox下我们可以事件绑定到元素上 例如 <br />
&lt;input type="button" onclick="doEvent (event)"&gt;&nbsp;&nbsp; <br />
为了同时兼容ie和firefox 通常在函数种通过以下代码获得事件。 <br />
var theEvent = window.event||e; <br />
var srcElement = theEvent.srcElement; <br />
&nbsp;&nbsp; if (!srcElement) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcElement = theEvent.target; <br />
&nbsp;&nbsp; } <br />
<br />
2</strong><wbr>、滤镜问题</strong><wbr> <br />
在IE下是用.filters.alpha.opacity <br />
在Firefox下是用.style.opacity <br />
一般是来设置元素的透明度，所以我们一般通过以下代码来解决兼容问题 <br />
var IE = navigator.userAgent.indexOf("MSIE")&gt;0? 1: 0; <br />
if(IE) <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp; obj.filters.alpha.opacity; <br />
} <br />
Else <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp; obj.style.opacity; <br />
} <br />
<br />
3</strong><wbr>、innerText</strong><wbr> <br />
IE下我们经常使用innerText，但是Firefox不支持此写法，通常我们写成textContent. 它同时兼容IE和firefox，建议大家采用textContent.对于没有html标签的我们也可以采用innerHTML替代。 <br />
<br />
4</strong><wbr>、event.srcElement</strong><wbr> <br />
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性. <br />
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;) <br />
<br />
5</strong><wbr>、 parentNode替代parentElement</strong><wbr> <br />
在IE中我可以通过obj.parentElement获得父元素，但是firex下不支持 <br />
因为firefox与IE都支持DOM，所有我们可以采用obj.parentNode来解决。 <br />
<br />
6</strong><wbr>、<strong><wbr>集合类对象问题</strong><wbr></strong><wbr> <br />
IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象. <br />
解决方法:统一使用[]获取集合类对象. <br />
<br />
<br />
<strong><wbr>7</strong><wbr>、<strong><wbr>自定义属性问题</strong><wbr></strong><wbr> <br />
说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性. <br />
解决方法:统一通过getAttribute()获取自定义属性. <br />
<br />
<strong><wbr>8</strong><wbr>、<strong><wbr>eval("idName")</strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
<br />
说明:IE下,,可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象. <br />
解决方法:统一用getElementById("idName")来取得id为idName的HTML对象. <br />
<br />
<strong><wbr>9</strong><wbr>、<strong><wbr>变量名与某HTML对象ID相同的问题</strong><wbr></strong><wbr> <br />
说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。 <br />
解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义. <br />
<br />
<strong><wbr>10</strong><wbr>、<strong><wbr>const</strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量. <br />
解决方法:统一使用var关键字来定义常量. <br />
<br />
<strong><wbr>11</strong><wbr>、<strong><wbr>input.type</strong><wbr><strong><wbr>属性问题</strong><wbr></strong><wbr> <br />
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写. <br />
<br />
<strong><wbr>12</strong><wbr>、<strong><wbr>event.x</strong><wbr><strong><wbr>与event.y问题</strong><wbr></strong><wbr> <br />
<br />
说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性. <br />
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX. <br />
<br />
<br />
<strong><wbr>13</strong><wbr>、<strong><wbr>window.location.href</strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
<br />
说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location. <br />
解决方法:使用window.location来代替window.location.href. <br />
<br />
<strong><wbr>14</strong><wbr>、<strong><wbr>模态和非模态窗口问题</strong><wbr></strong><wbr> <br />
<br />
说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能. <br />
解 决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可 以在子窗口中使用window.opener来访问父窗口. 例如：var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing"; <br />
<br />
<strong><wbr>15</strong><wbr>、<strong><wbr>frame</strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
<br />
以下面的frame为例： <br />
&lt;frame src="/xxx.html" id="frameId" name="frameName" /&gt; <br />
<br />
(1)访问frame对象: <br />
IE:使用window.frameId或者window.frameName来访问这个frame对象. <br />
Firefox:只能使用window.frameName来访问这个frame对象. <br />
另外，在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象. <br />
<br />
(2)切换frame内容: <br />
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"来切换frame的内容. <br />
<br />
如果需要将frame中的参数传回父窗口，可以在frme中使用parent来访问父窗口。例如：parent.document.form1.filename.value="Aqing"; <br />
<br />
<strong><wbr>16</strong><wbr>、<strong><wbr>body</strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
<br />
Firefox的body在body标签没有被浏览器完全读入之前就存在；而IE的body则必须在body标签被浏览器完全读入之后才存在. <br />
<br />
例如： <br />
Firefox： <br />
&lt;body&gt; <br />
&lt;script type="text/javascript"&gt; <br />
document.body.onclick = function(evt){ <br />
evt = evt || window.event; <br />
alert(evt); <br />
} <br />
&lt;/script&gt; <br />
&lt;/body&gt; <br />
IE&amp;Firefox： <br />
&lt;body&gt; <br />
&lt;/body&gt; <br />
&lt;script type="text/javascript"&gt; <br />
document.body.onclick = function(evt){ <br />
evt = evt || window.event; <br />
alert(evt); <br />
} &lt;/script&gt; <br />
<br />
<strong><wbr>17</strong><wbr>、<strong><wbr> 事件委托方法</strong><wbr></strong><wbr> <br />
IE：document.body.onload = inject; //Function inject()在这之前已被实现 <br />
Firefox：document.body.onload = inject(); <br />
document.body.onload=new Function('inject()'); <br />
<br />
<strong><wbr>18</strong><wbr>、<strong><wbr>cursor:hand </strong><wbr><strong><wbr>和 cursor:pointer</strong><wbr></strong><wbr> <br />
firefox不支持hand，但ie支持pointer <br />
解决方法: 统一使用pointer <br />
<strong><wbr>19</strong><wbr>、<strong><wbr> FireFox</strong><wbr><strong><wbr>中类似 obj.style.height = imgObj.height 的语句无效</strong><wbr></strong><wbr> <br />
<br />
解决方法： <br />
obj.style.height = imgObj.height + 'px'; <br />
<br />
<strong><wbr>20</strong><wbr>、<strong><wbr>ie,firefox</strong><wbr><strong><wbr>以及其它浏览器对于 table 标签的操作都各不相同，在ie中不允许对table和tr的innerHTML赋值，使用js增加一个tr时，使用appendChile方法也不管用。</strong><wbr></strong><wbr> <br />
<br />
解决方法： <br />
//向table追加一个空行： <br />
var row = otable.insertRow(-1); <br />
var cell = document.createElement("td"); <br />
cell.innerHTML = " "; <br />
cell.className = "XXXX"; <br />
row.appendChild(cell); <br />
<br />
<strong><wbr>21</strong><wbr>、<strong><wbr> padding </strong><wbr><strong><wbr>问题</strong><wbr></strong><wbr> <br />
<br />
padding 5px 4px 3px 1px FireFox无法解释简写,必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px; <br />
<br />
<strong><wbr>22</strong><wbr>、<strong><wbr>消除ul、ol等列表的缩进时</strong><wbr></strong><wbr> <br />
<br />
样式应写成:list-style:none;margin:0px;padding:0px; <br />
其中margin属性对IE有效，padding属性对FireFox有效 <br />
<br />
<strong><wbr>23</strong><wbr>、<strong><wbr>CSS</strong><wbr><strong><wbr>透明</strong><wbr></strong><wbr> <br />
<br />
IE：filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。 <br />
FF：opacity:0.6。 <br />
<br />
<strong><wbr>24</strong><wbr>、<strong><wbr>CSS</strong><wbr><strong><wbr>圆角</strong><wbr></strong><wbr> <br />
<br />
IE：不支持圆角。 <br />
FF： -moz-border-radius:4px，或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius- bottomright:4px;。 <br />
<br />
<strong><wbr>25</strong><wbr>、<strong><wbr>CSS</strong><wbr><strong><wbr>双线凹凸边框</strong><wbr></strong><wbr> <br />
<br />
IE：border:2px outset;。 <br />
FF： -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080; <br />
<strong><wbr>26</strong><wbr>、<strong><wbr>ie</strong><wbr><strong><wbr>支持document.all 而firefox 不支持</strong><wbr></strong><wbr> <br />
改用下面三个tag的其中一个来代替document.all <br />
getElementsByTagName("tagName") 可以得到得到所有标签元素的集合 <br />
getElementById("idName")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以按id得到某一元素 <br />
getElementsByName("Name")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以得到按name属性得到某一元素 <br />
<strong><wbr>27</strong><wbr><strong><wbr>、firefox 中使用innerHTML 的方法</strong><wbr><strong><wbr> <br />
</strong><wbr>&lt;div id="online"&gt;&lt;/div&gt; <br />
document.all.online.innerHTML; //这种方法在IE中可以使用，但不是标准方法 <br />
document.getElementById("online").innerHTML; //这样firefox就能使用innerHTML了 <br />
<strong><wbr>28</strong><wbr><strong><wbr>、eval()与window.execScript()执行脚本</strong><wbr><strong><wbr> <br />
</strong><wbr>IE、firerox均支持eval()，firefox不支持window.execScript() <br />
解决：统一使用eval() <br />
29</strong><wbr><strong><wbr>、</strong><wbr>e.button</strong><wbr>键值有别于event.button,只有3个键值而无组合键值</strong><wbr> <br />
<br />
<br />
30</strong><wbr><strong><wbr>、</strong><wbr>insertAdjacentHTML </strong><wbr>和 insertAdjacentText</strong><wbr> <br />
insertAdjacentHTML 和 insertAdjacentText 是IE下特有的JS，功能非常好用 <br />
<br />
可惜Firefox 没有这两东东，不过，加上下面的这段的，Firefox下也可以支持这 <br />
<br />
两个方法了 <br />
<br />
if(typeof HTMLElement!="undefined" &amp;&amp; !HTMLElement.prototype.insertAdjacentElement) <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp; HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (where) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'beforeBegin': <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.parentNode.insertBefore(parsedNode,this) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'afterBegin': <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.insertBefore(parsedNode,this.firstChild); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'beforeEnd': <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.appendChild(parsedNode); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'afterEnd': <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else this.parentNode.appendChild(parsedNode); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr) <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var r = this.ownerDocument.createRange(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r.setStartBefore(this); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parsedHTML = r.createContextualFragment(htmlStr); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.insertAdjacentElement(where,parsedHTML) <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; HTMLElement.prototype.insertAdjacentText = function (where,txtStr) <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parsedText = document.createTextNode(txtStr) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.insertAdjacentElement(where,parsedText) <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
} <br />
31</strong><wbr><strong><wbr>、</strong><wbr>elementFromPoint</strong><wbr> <br />
</strong><wbr><br />
Ie下有elementFromPoint方法，但是firefox没有，可以重写该方法 <br />
<br />
Document.prototype.elementFromPoint = function(x, y) <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.addEventListener("mousemove", this.elementFromPoint__handler, false); <br />
&nbsp;&nbsp;&nbsp;&nbsp; var event = this.createEvent("MouseEvents"); <br />
&nbsp;&nbsp;&nbsp;&nbsp; var box = this.getBoxObjectFor(this.documentElement); <br />
&nbsp;&nbsp;&nbsp;&nbsp; var screenDelta = { x: box.screenX, y: box.screenY }; <br />
&nbsp;&nbsp;&nbsp;&nbsp; event.initMouseEvent("mousemove", true, false, this.defaultView, 0, <br />
&nbsp;&nbsp;&nbsp;&nbsp; x + screenDelta.x, y + screenDelta.y, x, y, <br />
&nbsp;&nbsp;&nbsp;&nbsp; false, false, false, false, 0, null); <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.dispatchEvent(event); <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.removeEventListener("mousemove", this.elementFromPoint__handler, false); <br />
&nbsp;&nbsp;&nbsp;&nbsp; return this.elementFromPoint__target; <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; Document.prototype.elementFromPoint__handler = function (event) <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.elementFromPoint__target = event.explicitOriginalTarget; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (this.elementFromPoint__target.nodetype == Node.TEXT_NODE) <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.elementFromPoint__target = this.elementFromPoint__target.parentNode; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (this.elementFromPoint__target.nodeName.toUpperCase() == "HTML" &amp;&amp; this.documentElement.nodeName.toUpperCase() == "HTML") <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.elementFromPoint__target = this.getElementsByTagName("BODY").item(0); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; //****added this code to check for textboxes and textareas <br />
&nbsp;&nbsp;&nbsp;&nbsp; if ( this.elementFromPoint__target.nodeName=="#document" )//possible textbox or textarea <br />
&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp; rp = event.rangeParent; <br />
&nbsp;&nbsp;&nbsp;&nbsp; alert("event.rangeParent = " + rp); <br />
&nbsp;&nbsp;&nbsp;&nbsp; if ( event.rangeParent.nodetype == Node.TEXT_NODE )//textbox with a value <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.elementFromPoint__target = event.rangeParent.parentNode.parentNode; <br />
&nbsp;&nbsp;&nbsp;&nbsp; else if ( event.rangeParent.nodeName == 'div' )//textbox without a value <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.elementFromPoint__target = event.rangeParent.parentNode; <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; //****end. However this cause permission denied as the rangeParent object appears to be private! <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; event.preventdefault(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; event.stopPropagation(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; Document.prototype.elementFromPoint__target = null; <br />
<br />
<strong><wbr>32</strong><wbr>、mousewheel事件</strong><wbr> <br />
firefox 没有 mousewheel 事件。可以通过以下方法解决. <br />
&lt;script&gt; <br />
var n=0; <br />
function mwEvent(e) <br />
{ <br />
if (!e) e = window.event; <br />
if ( e.wheelDelta &lt;= 0 || e.detail &gt; 0) { n++; } <br />
else { n--; } <br />
window.status=n; <br />
} <br />
if(document.attachEvent){ <br />
document.attachEvent("onmousewheel",mwEvent); <br />
}else{ <br />
window.addEventListener("DOMMouseScroll", mwEvent, false); <br />
} <br />
&lt;/script&gt; <br />
<br />
<strong><wbr>33</strong><wbr>、<a href="http://www.cnblogs.com/danni5678/archive/2008/04/21/1163853.html" target="_blank">IE和FireFox的鼠标滚轮事件</a><wbr></strong><wbr> <br />
滚轮IE和Firefox的代码不一样： <br />
IE是mousewheel事件，Firefox是DOMMouseScroll事件 <br />
事件属性，IE是event.wheelDelta，Firefox是event.detail <br />
属性的方向值也不一样，IE向上滚 &gt; 0，Firefox向下滚 &gt; 0 <br />
//滚轮放大或缩小，基于Prototype 1.6 <br />
var scrollfunc = function(event) { <br />
var direct = 0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (event.wheelDelta) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;direct = event.wheelDelta &gt; 0 ? 1 : -1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if (event.detail) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;direct = event.detail &lt; 0 ? 1 : -1; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoom(direct); <br />
}; <br />
Event.observe(document, 'mousewheel', scrollfunc); <br />
Event.observe(document, 'DOMMouseScroll', scrollfunc); //firefox <br />
<strong><wbr>34</strong><wbr>、<a href="http://www.cnblogs.com/danni5678/archive/2008/04/21/1163853.html" target="_blank">attachEvent</a><wbr>方法</strong><wbr> <br />
<br />
attachEvent方法解释: <br />
attachEvent有2个参数,第一个参数是事件名,第二个参数是事件触发后所响应的方法. Firefox下解决方法是 <br />
Object.prototype.attachEvent=function(method,func) <br />
{ <br />
if(!this[method]) <br />
&nbsp;&nbsp;this[method]=func; <br />
else <br />
&nbsp;&nbsp;this[method]=this[method].attach(func); <br />
} <br />
Function.prototype.attach=function(func){ <br />
var f=this; <br />
return function(){ <br />
&nbsp;&nbsp;f(); <br />
&nbsp;&nbsp;func(); <br />
} <br />
} <br />
<strong><wbr>36 </strong><wbr>、</strong><wbr><strong><wbr>title</strong><wbr><strong><wbr>替代alt</strong><wbr> <br />
在firefox和ie尽力都用title,alt在firefox下不起作用<img id="paperPicArea1" style="display: none; position: relative" alt="" src="http://cnc.imgcache.qq.com/ac/b.gif" /> 
<img src ="http://www.blogjava.net/yifeng/aggbug/228942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2008-09-15 00:53 <a href="http://www.blogjava.net/yifeng/archive/2008/09/15/228942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>