﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-乖，别哭的薄壳-随笔分类-Javascript</title><link>http://www.blogjava.net/ilovezmh/category/19188.html</link><description>～一份耕耘，一份收获~</description><language>zh-cn</language><lastBuildDate>Fri, 18 Apr 2008 00:43:30 GMT</lastBuildDate><pubDate>Fri, 18 Apr 2008 00:43:30 GMT</pubDate><ttl>60</ttl><item><title>用ActiveXObject控件替换word书签，将内容导出到word后打印</title><link>http://www.blogjava.net/ilovezmh/archive/2008/04/16/193548.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Wed, 16 Apr 2008 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2008/04/16/193548.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/193548.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2008/04/16/193548.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/193548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/193548.html</trackback:ping><description><![CDATA[<p>最近有需求将数据导出到word里，然后编辑打印。<br />
想过几种方案：<br />
1.使用jacob。<br />
2.使用apache的poi。<br />
3.使用itext。<br />
由于时间比较紧，没多的时候去学习研究上述工具包，现在用javascript操作ActiveXObject控件，用替换word模板中的书签方式解决。<br />
<br />
前提条件：<br />
1.浏览器安全级别降低，可以使用ActiveXObject控件。</p>
2.装有office word。<br />
<br />
目前实现了替换单个书签，多行表格书签，和图片，基本上满足需求。不过还有很多操作word的使用方法不太清楚，网上大部分都使用的VB，有不清楚的地方，大家可以交流。<br />
<br />
下面说一下我的设计实现思路：<br />
<br />
首先当然是定义word模板，在需要替换的地方加上标签。 菜单－插入－书签，输入属性名，如year,date,pic1,voList等等。<br />
打印页面：<br />
需要把打印的数据从后台取出，以单个vo(一个对象)为一组，或以voList（对象的列表集合）为一组 组织好页面上 再得到这些数据后进行替换。<br />
数据组织形式如下：<br />
&lt;div id="export2word"&gt;<br />
&nbsp;&lt;form id="singleVo" name="singleVo"&gt;<br />
&nbsp;&nbsp;&lt;textarea name="jcxcrs" style="display:none"&gt;&lt;c:out value="${zywstjfxbgVO.jcxcrs }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&lt;textarea name="xcjhl" style="display:none"&gt;&lt;c:out value="${zywstjfxbgVO.xcjhl }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&lt;textarea name="tbjcxcrs" style="display:none"&gt;&lt;c:out value="${tbjcxcrs }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&lt;textarea name="tptest" style="display:none"&gt;../zwgl/zw008-ZwMkjbxxCTRL-showWxytp.png?xh=3041&lt;/textarea&gt;<br />
&nbsp;&lt;/form&gt;<br />
&nbsp;<br />
&nbsp;&lt;c:forEach var="mxvo" items="${jgList}" varStatus="s"&gt;<br />
&nbsp;&nbsp;&lt;form name="mxvoForm"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 注：这里的宽度设置为表格单元格宽度(厘米*100)--&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;textarea name="tbjcmcrs" style="width:349;display:none"&gt;&lt;c:out value="${mxvo.tbjcmcrs }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;textarea name="tbjcmcrsbl" style="width:270;display:none"&gt;&lt;c:out value="${mxvo.tbjcmcrsbl }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;textarea name="tbjcxcrs" style="width:477;display:none"&gt;&lt;c:out value="${mxvo.tbjcxcrs}"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;textarea name="tbjcxcrsbl" style="display:none"&gt;&lt;c:out value="${mxvo.tbjcxcrsbl }"/&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&lt;/form&gt;<br />
&nbsp;&lt;/c:forEach&gt;<br />
&lt;/div&gt;<br />
<br />
使用：<br />
&lt;input type="button" id="select2" name="select2" class="button" value="导出数据" onclick="print2doc();"&gt;<br />
<br />
&lt;script type="text/javascript" src="../public/scripts/export2word.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function print2doc(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//参数为模板(与页面的相对)路径<br />
&nbsp;&nbsp;&nbsp;var word = new WordApp("test.doc");<br />
&nbsp;&nbsp;&nbsp;&nbsp;//参数为form名，vo中需要添加的属性（为空时form里所有属性）<br />
&nbsp;&nbsp;&nbsp;var vo = word.getSingleVo("singleVo",["jcxcrs","xcjhl","tbjcxcrs"]);<br />
&nbsp;&nbsp;&nbsp;//var vo = word.getSingleVo("singleVo");<br />
&nbsp;&nbsp;&nbsp;&nbsp;//组织成的图片vo<br />
&nbsp;&nbsp;&nbsp;var tpvo = word.getSingleVo("singleVo",["tptest"]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//参数为 form名，需要添加的属性（顺序为生成表格列的顺序，为空时form里的所有属性和顺序）<br />
&nbsp;&nbsp;&nbsp;var voList = word.getVoList("mxvoForm",["tbjcmcrs","tbjcmcrsbl","tbjczsrs"]);<br />
&nbsp;&nbsp;&nbsp;//var voList = word.getVoList("mxvoForm");<br />
&nbsp;&nbsp;&nbsp;//替换普通书签<br />
&nbsp;&nbsp;&nbsp;word.replaceBookmarkUsevo(vo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//替换图片书签<br />
&nbsp;&nbsp;&nbsp;word.replaceBookmarkUsepicvo(tpvo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//替换书签jgList，画出表格形成多行数据。<br />
&nbsp;&nbsp;&nbsp;word.replaceBookmarkUsevolist("jgList",voList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//文档可见<br />
&nbsp;&nbsp;&nbsp;word.wordObj.visible=true;<br />
&nbsp;&nbsp;&nbsp;//word.closeApp();<br />
&nbsp;&nbsp;}<br />
&lt;/script&gt;<br />
注意：<br />
替换图片的值需要解释一下：<br />
1.可以设为相对本页面的路径如../zbgl/abc.png<br />
2.如果是输出流，则需要把请求输出流的url映射成以图片格式结尾的。如/.../abc.do?id=123换成/../abc.png?id=123<br />
可以在web.xml里配一个servlet，如以*.png的请求转成.do的。如：<br />
<p>public class PngDispatcherServlet extends HttpServlet {</p>
<p>&nbsp;private static final long serialVersionUID = 6230740581031996144L;<br />
&nbsp;<br />
&nbsp;&nbsp;public void init() throws ServletException {<br />
&nbsp;&nbsp; <br />
&nbsp;} <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void doPost(HttpServletRequest request, HttpServletResponse response) throws<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;doGet(request, response);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void doGet(HttpServletRequest request, HttpServletResponse response) throws<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//StringBuffer url = request.getRequestURL();<br />
&nbsp;&nbsp;&nbsp; &nbsp;StringBuffer url = new StringBuffer(request.getRequestURI());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(request.getQueryString() != null) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; url.append('?'); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; url.append(request.getQueryString()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String newUrl = url.toString().replaceAll(".png", ".do");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext sc = getServletContext();<br />
&nbsp;&nbsp;&nbsp; &nbsp;RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面<br />
&nbsp;&nbsp;&nbsp; &nbsp;rd.forward(request, response);&nbsp;<br />
&nbsp;&nbsp; } <br />
}<br />
<br />
export2word.js代码：</p>
<p>/** <br />
&nbsp;* &lt;p&gt; Title: 用word书签替换的方式将内容导出到word&lt;/p&gt;<br />
&nbsp;* &lt;p&gt; Description: **&lt;/p&gt;<br />
&nbsp;* &lt;p&gt; Copyright: Copyright (c) 2007-2010 &lt;/p&gt;<br />
&nbsp;* &lt;p&gt; Company:&nbsp;** &lt;/p&gt;<br />
&nbsp;* @author&nbsp;zhu<br />
&nbsp;* @version 1.0<br />
&nbsp;*/<br />
var baseVoListObj = function(){<br />
&nbsp;this.volist = new Array();<br />
&nbsp;this.cols = new Array();<br />
&nbsp;this.widths = new Array();&nbsp;<br />
}</p>
<p>var WordApp = function(wordTplPath){<br />
&nbsp;var wordObj = new ActiveXObject("Word.Application");<br />
&nbsp;if(wordObj==null){<br />
&nbsp;&nbsp;alert( "不能创建Word对象！");<br />
&nbsp;}&nbsp;&nbsp; <br />
&nbsp;wordObj.visible=false;<br />
&nbsp;this.wordObj = wordObj;<br />
&nbsp;this.docObj = this.wordObj.Documents.Open(getRootPath() + wordTplPath);<br />
}</p>
<p>WordApp.prototype.closeApp = function(){<br />
&nbsp;if (this.wordObj !=null){<br />
&nbsp;&nbsp; this.wordObj.Quit(); <br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.replaceBookmark = function(strName,content,type){<br />
&nbsp;if (this.wordObj.ActiveDocument.BookMarks.Exists(strName)) {<br />
&nbsp;&nbsp;if (type != null &amp;&amp; type == "pic") {//图片<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objDoc = this.wordObj.ActiveDocument.BookMarks(strName).Range.Select();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objSelection = this.wordObj.Selection;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objSelection.TypeParagraph();<br />
&nbsp;&nbsp;&nbsp;//alert(getRootPath()+content);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var objShape = objSelection.InlineShapes.AddPicture(getRootPath()+content);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else {<br />
&nbsp;&nbsp;&nbsp;this.wordObj.ActiveDocument.BookMarks(strName).Range.Select();<br />
&nbsp;&nbsp;&nbsp;this.wordObj.Application.selection.Text = content;<br />
&nbsp;&nbsp;}<br />
&nbsp;}else{<br />
&nbsp;&nbsp;//alert("标签不存在");<br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.replaceBookmarkUsevo = function(voObj){<br />
&nbsp;if(typeof voObj != "object"){<br />
&nbsp;&nbsp;alert("请输入正确的vo对象");<br />
&nbsp;}else{<br />
&nbsp;&nbsp;for(var i in voObj){<br />
&nbsp;&nbsp;&nbsp;this.replaceBookmark(i,voObj[i]);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.replaceBookmarkUsepicvo = function(voObj){<br />
&nbsp;if(typeof voObj !="object"){<br />
&nbsp;&nbsp;alert("请输入正确的vo对象");<br />
&nbsp;}else{<br />
&nbsp;&nbsp;for(var i in voObj){<br />
&nbsp;&nbsp;&nbsp;this.replaceBookmark(i,voObj[i],"pic");<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.replaceBookmarkUsevolist = function(strName,voListObj){<br />
&nbsp;if(typeof voListObj != "object"){<br />
&nbsp;&nbsp;alert("参数应为数组类型");<br />
&nbsp;}else{&nbsp;<br />
&nbsp;&nbsp;var row = voListObj.volist.length;<br />
&nbsp;&nbsp;var col = voListObj.cols.length;<br />
&nbsp;&nbsp;var objDoc = this.wordObj.ActiveDocument.BookMarks(strName).Range;<br />
&nbsp;&nbsp;var objTable = this.docObj.Tables.Add(objDoc,row,col) ;//插入表格<br />
&nbsp;&nbsp;for (var i = 0; i &lt; row; i++) {<br />
&nbsp;&nbsp;&nbsp;for(var j=0; j&lt;col; j++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;//todo 列表里面如果有图片类型不支持，需要判断<br />
&nbsp;&nbsp;&nbsp;&nbsp;objTable.Cell(i+1,j+1).Range.InsertAfter(voListObj.volist[i][voListObj.cols[j]]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;var width = voListObj.widths[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(width.indexOf("px")!=-1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTable.Cell(i+1,j+1).Width = (width.substr(0,width.length-2)/100) * 28.35;//1厘米=28.35磅<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//objTable.AutoFormat(16);<br />
&nbsp;&nbsp;objTable.Borders.InsideLineStyle = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objTable.Borders.OutsideLineStyle = 0;<br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.getSingleVo = function(formName,arrayObj){//第二个参数可以为空，不填时默认为表单里的所有元素<br />
&nbsp;var formObj = document.forms[formName];<br />
&nbsp;if(formObj!=null){<br />
&nbsp;&nbsp;if(arrayObj!=null){<br />
&nbsp;&nbsp;&nbsp;if(arrayObj instanceof Array){<br />
&nbsp;&nbsp;&nbsp;&nbsp;var vo = {};<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;arrayObj.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(formObj.elements[arrayObj[i]]!= undefined ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("vo." + arrayObj[i] + " = formObj.elements[arrayObj[i]].value;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;//alert(objToString(vo));<br />
&nbsp;&nbsp;&nbsp;&nbsp;return vo;<br />
&nbsp;&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert("弟二个参数应为数组类型");&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;var vo = {};<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;formObj.elements.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;eval("vo." + formObj.elements[i].name + " = formObj.elements[i].value;");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return vo;<br />
&nbsp;&nbsp;}<br />
&nbsp;}else{<br />
&nbsp;&nbsp;alert("第一个参数表示的表单不存在");<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
}</p>
<p>WordApp.prototype.getVoList = function (formName,arrayObj){//表单名，属性数组(可以为空)<br />
&nbsp;//var formArray = document.forms[formName];<br />
&nbsp;var formArray = document.getElementsByName(formName);<br />
&nbsp;if (formArray != null) {<br />
&nbsp;&nbsp;if (arrayObj instanceof Array) {<br />
&nbsp;&nbsp;&nbsp;var voListObj = new baseVoListObj();<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;formArray.length;i++){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var vo = {};<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var j=0;j&lt;arrayObj.length;j++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(formArray[i].elements[arrayObj[j]]!= undefined ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("vo."+arrayObj[j]+" = formArray[i].elements[arrayObj[j]].value;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0){//第一次的时候定义有效属性和宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;voListObj.cols.push(arrayObj[j]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;voListObj.widths.push(formArray[i].elements[arrayObj[j]].style.width);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;voListObj.volist.push(vo);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return voListObj;<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;var voListObj = new baseVoListObj();<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;formArray.length;i++){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var vo = {};<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var j=0;j&lt;formArray[i].elements.length;j++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("vo."+formArray[i].elements[j].name+" = formArray[i].elements[j].value;");&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==0){//第一次的时候定义宽度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;voListObj.cols.push(formArray[i].elements[j].name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;voListObj.widths.push(formArray[i].elements[j].style.width);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;voListObj.volist.push(vo);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return voListObj;<br />
&nbsp;&nbsp;}&nbsp;&nbsp;<br />
&nbsp;}else{<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
}</p>
<p>function objToString(obj){<br />
&nbsp;if(obj instanceof Array){<br />
&nbsp;&nbsp;var str="";<br />
&nbsp;&nbsp;for(var i=0;i&lt;obj.length;i++){<br />
&nbsp;&nbsp;&nbsp;str+="[";<br />
&nbsp;&nbsp;&nbsp;for(var j in obj[i]){<br />
&nbsp;&nbsp;&nbsp;&nbsp;str+=j+"="+obj[i][j]+" ";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;str+="]\n";&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return str;<br />
&nbsp;}else if(obj instanceof Object){<br />
&nbsp;&nbsp;var str="";<br />
&nbsp;&nbsp;for(var i in obj){<br />
&nbsp;&nbsp;&nbsp;str+=i+"="+obj[i]+" ";<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return str;&nbsp;&nbsp;<br />
&nbsp;}<br />
}</p>
<p>function getRootPath()<br />
{<br />
&nbsp;var location=document.location;&nbsp;<br />
&nbsp;if ("file:" == location.protocol)&nbsp;{<br />
&nbsp;&nbsp;var str = location.toString();<br />
&nbsp;&nbsp;return str.replace(str.split("/").reverse()[0], "");<br />
&nbsp;}<br />
&nbsp;var pathName=location.pathname.split("/");<br />
&nbsp;return location.protocol+"//"+location.host+"/"+pathName[1]+"/";<br />
}<br />
先说到这里吧，以后有更好的再更新，希望对大家有用。</p>
 <img src ="http://www.blogjava.net/ilovezmh/aggbug/193548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2008-04-16 19:49 <a href="http://www.blogjava.net/ilovezmh/archive/2008/04/16/193548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xml+xsl+javascript取值及修改数据</title><link>http://www.blogjava.net/ilovezmh/archive/2007/07/07/128720.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Fri, 06 Jul 2007 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/07/07/128720.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/128720.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/07/07/128720.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/128720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/128720.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前几天公司要用xml快速方便的存取属性N多的数据,跟sinoly合作研究了一下.做了一个小例子.1.example.xml--主要数据文件&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&lt;?xml:stylesheet&nbsp;type="text/xsl"&nbsp;href="example.xsl"?&gt;&lt;pr...&nbsp;&nbsp;<a href='http://www.blogjava.net/ilovezmh/archive/2007/07/07/128720.html'>阅读全文</a><img src ="http://www.blogjava.net/ilovezmh/aggbug/128720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-07-07 00:12 <a href="http://www.blogjava.net/ilovezmh/archive/2007/07/07/128720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(八)－－错误处理</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/25/113370.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 24 Apr 2007 16:58:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/25/113370.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/113370.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/25/113370.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/113370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/113370.html</trackback:ping><description><![CDATA[<p>1.onerror事件处理函数<br>onerror事件处理函数是第一个用来协助javascript处理错误的机制。页面上出现异常时，error事件便在window对象上触发。<br>例如：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">OnError&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;error&nbsp;occurred.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="nonExistentFunction()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
在这个例子中，尝试调用不存在的函数nonExistentFunction()时，就会引发一个异常。这时会弹出警告框显示&#8220;An error occurred.&#8221;不幸的是，浏览器的错误信息也显示出来了，要从浏览器中隐藏它，onerror事件处理函数必须返回true值：如下<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">OnError&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;error&nbsp;occurred.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="nonExistentFunction()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>2.取出错误信息<br>onerror事件处理函数提供了三种信息来确定错误确切的性质：<br>错误信息－－对于给定错误，浏览器会显示同样的信息。<br>URL－－在哪个文件中发生了错误。<br>行号－－给定的URL中发生错误的行号。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">OnError&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(sMessage,&nbsp;sUrl,&nbsp;sLine)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;error&nbsp;occurred:\n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sMessage&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\nURL:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sUrl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\nLine&nbsp;Number:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sLine);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="nonExistentFunction()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>3.图像载入错误<br>图像对象也支持onerror事件处理函数。当一个图像由于某种原因未能成功载入时（例如，文件不存在），error事件便在这个图像上触发。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Image&nbsp;Error&nbsp;Test</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">The&nbsp;image&nbsp;below&nbsp;attempts&nbsp;to&nbsp;load&nbsp;a&nbsp;file&nbsp;that&nbsp;doesn't&nbsp;exist.</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">img&nbsp;</span><span style="COLOR: #ff0000">src</span><span style="COLOR: #0000ff">="blue.gif"</span><span style="COLOR: #ff0000">&nbsp;onerror</span><span style="COLOR: #0000ff">="alert('An&nbsp;error&nbsp;occurred&nbsp;loading&nbsp;the&nbsp;image.')"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>与window对象的onerror事件处理函数不同，image的onerror事件处理函数没有任务关于额外信息的参数。<br><br>4.处理语法错误<br>onerror事件处理函数不仅可以处理异常，它还能处理语法错误，也只有它才能处理。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">OnError&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(sMessage,&nbsp;sUrl,&nbsp;sLine)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;error&nbsp;occurred:\n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sMessage&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\nURL:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sUrl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\nLine&nbsp;Number:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sLine);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Syntax&nbsp;error.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="nonExistentFunction()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">The&nbsp;syntax&nbsp;error&nbsp;on&nbsp;this&nbsp;page&nbsp;comes&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">em</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">after</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">em</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;the&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">code</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">onerror</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">code</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;handler&nbsp;is&nbsp;defined,&nbsp;so&nbsp;the&nbsp;custom&nbsp;dialog&nbsp;catches&nbsp;it.</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">strong</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Note:</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">strong</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;This&nbsp;may&nbsp;not&nbsp;work&nbsp;in&nbsp;newer&nbsp;browsers&nbsp;with&nbsp;tighter&nbsp;security&nbsp;restrictions.</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>注：使用onerror事件处理函数的主要问题是，它是BOM的一部分，所以，没有任何标准能控制它的行为。因此，不同的浏览器使用这个事件处理函数处理错误的方式有明显的不同。例如，在IE中发生error事件时，正常的代码会继续执行：所有的变量和数据都保存下来，并可能过onerror事件处理函数访问。然而在Mozilla中，正常的代码执行都会结束，同时所有错误发生之前的变量和数据都被销毁。Safari和Konqueror不支持window对象上的onerror事件处理函数，但是它们支持图像上的onerror事件处理函数。<br><br>5.try...catch语句<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Try&nbsp;Catch&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">try</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.nonExistentFunction();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Method&nbsp;completed.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">catch</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(exception)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;exception&nbsp;occurred.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">finally</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">End&nbsp;of&nbsp;try...catch&nbsp;test.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>与java不同，ECMAScript标准在try...catch语句中指定只能有一个catch子句。因为javascript是弱类型，没办法指明catch子句中的异常的特定类型。不管错误是什么类型，都由同一个catch子句处理。Mozilla对其进行了扩展，可为try...catch语句添加多个catch子句。当然只有Mozilla才能使用这个形式，所以不推荐使用。<br><br>(1)嵌套try...catch语句<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Try&nbsp;Catch&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">try</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a&nbsp;++&nbsp;b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">causes&nbsp;error</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">catch</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(oException)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;exception&nbsp;occurred.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">try</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;arrErrors&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Array(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">10000000000000000000000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">causes&nbsp;error</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrErrors.push(exception);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">catch</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(oException2)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Another&nbsp;exception&nbsp;occurred.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">finally</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">All&nbsp;done.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
(2)Error对象<br>类似于java有个用于抛出的基类Exception，javascript有个Error基类用于抛出。Error对象有以下特性：<br>name－－表示错误类型的字符串。<br>message－－实际的错误信息。<br>Error对象的名称对象对应于它的类(因为Error只是一个基类)，可以是以下值之一：<br>
<table style="WIDTH: 838px; BORDER-COLLAPSE: collapse; HEIGHT: 105px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>类</td>
            <td>发生原因</td>
        </tr>
        <tr>
            <td>EvalError</td>
            <td>错误发生在eval()函数中</td>
        </tr>
        <tr>
            <td>RangeError</td>
            <td>数字的值超出javascript可表示的范围</td>
        </tr>
        <tr>
            <td>ReferenceError</td>
            <td>使用了非法的引用</td>
        </tr>
        <tr>
            <td>SyntaxError</td>
            <td>在eval()函数调用中发生了语法错误。其他的语法错误由浏览器报告，无法通过try...catch语句处理</td>
        </tr>
        <tr>
            <td>TypeError</td>
            <td>变量的类型不是预期所需的</td>
        </tr>
        <tr>
            <td>URIError</td>
            <td>在encodeURI()或者decodeURI()函数中发生了错误</td>
        </tr>
    </tbody>
</table>
<br>Mozilla和IE都扩展了Erro对象以适应各自的需求。Mozilla提供一个fileName特性来表示错误发生在哪一个文件中，以及一个stack特性以包含到错误发生时的调用堆栈;IE提供了一个number特性来表示错误代号。<br>(3)判断错误类型<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Try&nbsp;Catch&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">try</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a&nbsp;++&nbsp;b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">causes&nbsp;SyntaxError</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">catch</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(oException)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(oException.name&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">==</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">SyntaxError</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//或者if(oException instanceof SyntaxError)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Syntax&nbsp;Error:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oException.message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">An&nbsp;unexpected&nbsp;error&nbsp;occurred:&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oException.message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>(4)抛出异常<br>ECMAScript第三版还引入了throw语句，用于有目的的抛出异常。语法如下：<br>throw error_object;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//error_object可以是字符串、数字、布尔值或者是实际的对象。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Try&nbsp;Catch&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;addTwoNumbers(a,&nbsp;b)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(arguments.length&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">2</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">throw</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Error(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Two&nbsp;numbers&nbsp;are&nbsp;required.</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;a&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">try</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;addTwoNumbers(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">90</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">catch</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(oException)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(oException.message);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">outputs&nbsp;"Two&nbsp;numbers&nbsp;are&nbsp;required."</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>另个，因为浏览器不生成Error对象（它总是生成一个较精确的Error对象，比如RangeError），所以区分浏览器抛出的错误和开发人员抛出的错误很简单，使用前面的技术就行了：<br>try{<br>&nbsp;&nbsp;&nbsp;result = addTwoNumber(90,parseInt(z));<br>}catch(oException){<br>&nbsp;&nbsp;&nbsp;if(oException instanceof SyntaxError){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Syntax Error: "+oException.message);<br>&nbsp;&nbsp;&nbsp;}else if(oException instanceof Error){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(oException.message);<br>&nbsp;&nbsp;&nbsp;}<br>}<br>注意检查instanceof　Error必须是if语句中的最后一个条件，因为所有其他的错误类都继承于它（所以在检测instanceof Error时都返回true）。<br><br>所有的浏览器都可以报告开发人员抛出的错误，但是错误消息的显示方式可能有所不同。IE6只会在抛出Error对象时，才显示错误信息;其他情况下，它就只显示Exception thrown and not caught，而没有任何详细内容。Mozilla则会报告Error:uncaught exception:然后调用所抛出的对象的toString()方法。 
<img src ="http://www.blogjava.net/ilovezmh/aggbug/113370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-25 00:58 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/25/113370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(七)－－DOM基础</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/24/113336.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 24 Apr 2007 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/24/113336.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/113336.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/24/113336.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/113336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/113336.html</trackback:ping><description><![CDATA[一、DOM基础<br>1.节点(node)层次<br>Document－－最顶层的节点，所有的其他节点都是附属于它的。<br>DocumentType－－DTD引用（使用&lt;!DOCTYPE&gt;语法）的对象表现形式，它不能包含子节点。<br>DocumentFragment－－可以像Document一样来保存其他节点。<br>Element－－表示起始标签和结束标签之间的内容，例如&lt;tag&gt;&lt;/tab&gt;或者&lt;tag/&gt;。这是唯一可以同时包含特性和子节点的节点类型。<br>Attr－－代表一对特性名和特性值。这个节点类型不能包含子节点。<br>Text－－代表XML文档中的在起始标签和结束标签之间，或者CDataSection内包含的普通文本。这个节点类型不能包含子节点。<br>CDataSection－－&lt;![CDATA[]]&gt;的对象表现形式。这个节点类型仅能包含文本节点Text作为子节点。<br>Entity－－表示在DTD中的一个实体定义，例如&lt;!ENTITY foo"foo"&gt;。这个节点类型不能包含子节点。<br>EntityReference－－代表一个实体引用，例如&amp;quot;。这个节点类型不能包含子节点。<br>ProcessingInstruction－－代表一个PI。这个节点类型不能包含子节点。<br>Comment－－代表XML注释。这个节点不能包含子节点。<br>Notation－－代表在DTD中定义的记号。这个很少用到。<br><br>Node接口定义了所有节点类型都包含的特性和方法。<br>
<table style="WIDTH: 862px; BORDER-COLLAPSE: collapse; HEIGHT: 417px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>特性/方法</td>
            <td>类型/返回类型</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>nodeName</td>
            <td>String</td>
            <td>节点的名字;根据节点的类型而定义</td>
        </tr>
        <tr>
            <td>nodeValue</td>
            <td>String</td>
            <td>节点的值;根据节点的类型而定义</td>
        </tr>
        <tr>
            <td>nodeType</td>
            <td>Number</td>
            <td>节点的类型常量值之一</td>
        </tr>
        <tr>
            <td>ownerDocument</td>
            <td>Document</td>
            <td>指向这个节点所属的文档</td>
        </tr>
        <tr>
            <td>firstChild</td>
            <td>Node</td>
            <td>指向在childNodes列表中的第一个节点</td>
        </tr>
        <tr>
            <td>lastChild</td>
            <td>Node</td>
            <td>指向在childNodes列表中的最后一个节点</td>
        </tr>
        <tr>
            <td>childNodes</td>
            <td>NodeList</td>
            <td>所有子节点的列表</td>
        </tr>
        <tr>
            <td>previousSibling</td>
            <td>Node</td>
            <td>指向前一个兄弟节点;如果这个节点就是第一个兄弟节点，那么该值为null</td>
        </tr>
        <tr>
            <td>nextSibling</td>
            <td>Node</td>
            <td>指向后一个兄弟节点;如果这个节点就是最后一个兄弟节点，那么该值为null</td>
        </tr>
        <tr>
            <td>hasChildNodes()</td>
            <td>Boolean</td>
            <td>当childNodes包含一个或多个节点时,返回真</td>
        </tr>
        <tr>
            <td>attributes</td>
            <td>NamedNodeMap</td>
            <td>包含了代表一个元素的特性的Attr对象;仅用于Element节点</td>
        </tr>
        <tr>
            <td>appendChild(node)</td>
            <td>Node</td>
            <td>将node添加到childNodes的末尾</td>
        </tr>
        <tr>
            <td>removeChild(node)</td>
            <td>Node</td>
            <td>从childNodes中删除node</td>
        </tr>
        <tr>
            <td>replaceChild(newnode,oldnode)</td>
            <td>Node</td>
            <td>将childNodes中的oldnode替换成newnode</td>
        </tr>
        <tr>
            <td>insertBefore(newnode,refnode)</td>
            <td>Node</td>
            <td>在childNodes中的refnode之前插入newnodd</td>
        </tr>
    </tbody>
</table>
<br>除节点外，DOM还定义了一些助手对象，它们可以和节点一起使用，但不是DOM文档必有的部分。<br>NodeList－－节点数组，按照数值进行索引;用来表示和一个元素的子节点。<br>NamedNodeMap－－同时使用数值和名字进行索引的节点表;用于表示元素特性。<br><br>2.访问相关的节点<br>下面的几节中考虑下面的HTML页面<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">DOM&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Isn't&nbsp;this&nbsp;exciting?</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">You're&nbsp;learning&nbsp;to&nbsp;use&nbsp;the&nbsp;DOM!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
要访问&lt;html/&gt;元素（你应该明白这是该文件的document元素），你可以使用document的documentElement特性：<br>var oHtml = document.documentElement;<br>现在变量oHtml包含一个表示&lt;html/&gt;的HTMLElement对象。如果你想取得&lt;head/&gt;和&lt;body/&gt;元素，下面的可以实现：<br>var oHead = oHtml.firstChild;<br>var oBody = oHtml.lastChild;<br>也可以使用childNodes特性来完成同样的工作。只需把它当成普通的javascript array，使用方括号标记：<br>var oHead = oHtml.childNodes[0];<br>var oBody = oHtml.childNodes[1];<br>注意方括号标记其实是NodeList在javascript中的简便实现。实际上正式的从childNodes列表中获取子节点的方法是使用item()方法：<br>var oHead = oHtml.childNodes.item(0);<br>var oBody = oHtml.childNodes.item(1);<br>HTML DOM页定义了document.body作为指向&lt;body/&gt;元素的指针。<br>var oBody = ducument.body;<br>有了oHtml,oHead和oBody这三个变量，就可以尝试确定它们之间的关系：<br>alert(oHead.parentNode==oHtml);<br>alert(oBody.parentNode==oHtml);<br>alert(oBody.previousSibling==oHead);<br>alert(bHead.nextSibling==oBody);<br>alert(oHead.ownerDocument==document);<br>以上均outputs "true"。<br><br>3.处理特性<br>正如前面所提到的，即便Node接口已具有attributes方法，且已被所有类型的节点继承，然而，只有<br>Element节点才能有特性。Element节点的attributes属性其实是NameNodeMap,它提供一些用于访问和处理其内容的方法：<br>getNamedItem(name)－－返回nodename属性值等于name的节点;<br>removeNamedItem(name)－－删除nodename属性值等于name的节点;<br>setNamedItem(node)－－将node添加到列表中，按其nodeName属性进行索引;<br>item(pos)－－像NodeList一样，返回在位置pos的节点;<br>注：请记住这些方法都是返回一个Attr节点，而非特性值。<br><br>NamedNodeMap对象也有一个length属性来指示它所包含的节点的数量。<br>当NamedNodeMap用于表示特性时，其中每个节点都是Attr节点，这的nodeName属性被设置为特性名称，而nodeValue属性被设置为特性的值。例如，假设有这样一个元素：<br>&lt;p style="color:red" id="p1"&gt;Hello world!&lt;/p&gt;<br>同时，假设变量oP包含指向这个元素的一个引用。于是可以这样访问id特性的值:<br>var sId = oP.attributes.getNamedItem("id").nodeValue;<br>当然，还可以用数值方式访问id特性，但这样稍微有些不直观：<br>var sId = oP.attributes.item(1).nodeValue;<br>还可以通过给nodeValue属性赋新值来改变id特性：<br>oP.attributes.getNamedItem("id").nodeValue="newId";<br>Attr节点也有一个完全等同于(同时也完全同步于)nodeValue属性的value属性，并且有name属性和nodeName属性保持同步。我们可以随意使用这些属性来修改或变更特性。<br>因为这个方法有些累赘，DOM又定义了三个元素方法来帮助访问特性：<br>getAttribute(name)－－等于attributes.getNamedItem(name).value;<br>setAttribute(name,newvalue)－－等于attribute.getNamedItem(name).value=newvalue;<br>removeAttribute(name)－－等于attribute.removeNamedItem(name)。<br><br>4.访问指定节点<br>(1)<strong>getElementsByTagName()<br></strong>核心(XML) DOM定义了getElementsByTagName()方法，用来返回一个包含所有的tagName(标签名)特性等于某个指定值的元素的NodeList。在Element对象中，tagName特性总是等于小于号之后紧跟随的名称－－例如，&lt;img /&gt;的tagName是"img"。下一行代码返回文档中所有&lt;img /&gt;元素的列表：<br>var oImgs = document.getElementsByTagName("img");<br>把所有图形都存于oImgs后，只需使用方括号或者Item()方法（getElementsByTagName()返回一个和childNodes一样的NodeList），就可以像访问子节点那样逐个访问这些节点了：<br>alert(oImgs[0].tagName);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "IMG"<br>假如只想获取在某个页面第一个段落的所有图像，可以通过对第一个段落元素调用getElementsByTagName()来完成，像这样：<br>var oPs = document.getElementByTagName("p");<br>var oImgsInp = oPs[0].getElementByTagName("img");<br>可以使用一个星号的方法来获取document中的所有元素：<br>var oAllElements = document.getElementsByTagName("*");<br>当参数是一个星号的时候，IE6.0并不返回所有的元素。必须使用document.all来替代它。<br>(2)<strong>getElementsByName()<br></strong>HTML DOM 定义了getElementsByName()，这用来获取所有name特性等于指定值的元素的。<br>(3)<strong>getElementById()<br></strong>这是HTML DOM定义的第二种方法，它将返回id特性等于指定值的元素。在HTML中，id特性是唯一的－－这意味着没有两个元素可以共享同一个id。毫无疑问这是从文档树中获取单个指定元素最快的方法。<br>注：如果给定的ID匹配某个元素的name特性，IE6.0还会返回这个元素。这是一个bug，也是必须非常小心的一个问题。<br><br>5.创建新节点<br>最常用到的几个方法是<br>createDocumentFragment()－－创建文档碎片节点<br>createElement(tagname)－－创建标签名为tagname的元素<br>createTextNode(text)－－创建包含文本text的文本节点<br><br><strong>createElement()、createTextNode()、appendChild()</strong><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">createElement()&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;createMessage()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createTextNode(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Hello&nbsp;World!</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oP.appendChild(oText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(oP);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="createMessage()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br><strong>removeChild()、replaceChild()、insertBefore()<br></strong>删除节点<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">removeChild()&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;removeMessage()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.body.getElementsByTagName(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oP.parentNode.removeChild(oP);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="removeMessage()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
替换<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">replaceChild()&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;replaceMessage()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oNewP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createTextNode(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Hello&nbsp;Universe!</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oNewP.appendChild(oText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oOldP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.body.getElementsByTagName(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOldP.parentNode.replaceChild(oNewP,&nbsp;oOldP);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="replaceMessage()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
新消息添加到旧消息之前<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">insertBefore()&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;insertMessage()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oNewP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createTextNode(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Hello&nbsp;Universe!</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oNewP.appendChild(oText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oOldP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.getElementsByTagName(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.insertBefore(oNewP,&nbsp;oOldP);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="insertMessage()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">p</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br><strong>createDocumentFragment()<br></strong>一旦把节点添加到document.body（或者它的后代节点）中，页面就会更新并反映出这个变化。对于少量的更新，这是很好的，然而，当要向document添加大量数据时，如果逐个添加这些变动，这个过程有可能会十分缓慢。为解决这个问题，可以创建一个文档碎片，把所有的新节点附加其上，然后把文档碎片的内容一次性添加到document中，假如想创建十个新段落。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">insertBefore()&nbsp;Example</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;addMessages()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;arrText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">first</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">second</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">third</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">fourth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">fifth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">sixth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">seventh</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">eighth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">ninth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">tenth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oFragment&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createDocumentFragment();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;i&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;arrText.length;&nbsp;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oP&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">p</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;oText&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.createTextNode(arrText[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oP.appendChild(oText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFragment.appendChild(oP);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(oFragment);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="addMessages()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>6.让特性像属性一样<br>大部分情况下，HTML DOM元素中包含的所有特性都是可作为属性。<br>假设有如下图像元素：<br>&lt;img src = "mypicture.jpg" border=0 /&gt;<br>如果要使用核心的DOM来获取和设置src和border特性，那么要用getAttribute()和setAttribute()方法：<br>alert(oImg.getAttribute("src"));<br>alert(oImg.getAttribute("border"));<br>oImg.setAttribute("src","mypicture2.jpg");<br>oImg.setAttribute("border",1);<br>然而，使用HTML DOM，可以使用同样名称的属性来获取和设置这些值：<br>alert(oImg.src);<br>alert(oImg.border);<br>oImg.src="mypicture2.jpg";<br>oImg.border ="1";<br>唯一的特性名和属性名不一样的特例是class属性，它是用来指定应用于某个元素的一个CSS类，因为class在ECMAScript中是一个保留字，在javascript中，它不能被作为变量名、属性名或都函数名。于是，相应的属性名就变成了className;<br>注：IE在setAttribute()上有很大的问题，最好尽可能使用属性。<br><br>7.table方法<br>为了协助建立表格，HTML DOM给&lt;table/&gt;,&lt;tbody/&gt;和&lt;tr/&gt;等元素添加了一些特性和方法。<br>给&lt;table/&gt;元素添加了以下内容：<br>
<table style="WIDTH: 861px; BORDER-COLLAPSE: collapse; HEIGHT: 365px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>特性/方法</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>caption</td>
            <td>指向&lt;caption/&gt;元素并将其放入表格</td>
        </tr>
        <tr>
            <td>tBodies</td>
            <td>&lt;tbody/&gt;元素的集合</td>
        </tr>
        <tr>
            <td>tFoot</td>
            <td>指向&lt;tfoot/&gt;元素（如果存在）</td>
        </tr>
        <tr>
            <td>tHead</td>
            <td>指向&lt;thead/&gt;元素（如果存在）</td>
        </tr>
        <tr>
            <td>rows</td>
            <td>表格中所有行的集合</td>
        </tr>
        <tr>
            <td>createTHead()</td>
            <td>创建&lt;thead/&gt;元素并将其放入表格</td>
        </tr>
        <tr>
            <td>createTFood()</td>
            <td>创建&lt;tfoot/&gt;元素并将其放入表格</td>
        </tr>
        <tr>
            <td>createCpation()</td>
            <td>创建&lt;caption/&gt;元素并将其放入表格</td>
        </tr>
        <tr>
            <td>deleteTHead()</td>
            <td>删除&lt;thead/&gt;元素</td>
        </tr>
        <tr>
            <td>deleteTFood()</td>
            <td>删除&lt;tfoot/&gt;元素</td>
        </tr>
        <tr>
            <td>deleteCaption()</td>
            <td>删除&lt;caption/&gt;元素</td>
        </tr>
        <tr>
            <td>deleteRow(position)</td>
            <td>删除指定位置上的行</td>
        </tr>
        <tr>
            <td>insertRow(position)</td>
            <td>在rows集合中的指定位置上插入一个新行</td>
        </tr>
    </tbody>
</table>
<br>&lt;tbody/&gt;元素添加了以下内容<br>
<table style="WIDTH: 862px; BORDER-COLLAPSE: collapse; HEIGHT: 105px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>特性/方法</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>rows</td>
            <td>&lt;tbody/&gt;中所有行的集合</td>
        </tr>
        <tr>
            <td>deleteRow(position)</td>
            <td>删除指定位置上的行</td>
        </tr>
        <tr>
            <td>insertRow(position)</td>
            <td>在rows集合中的指定位置上插入一个新行</td>
        </tr>
    </tbody>
</table>
<br>&lt;tr/&gt;元素添加了以下内容<br>
<table style="WIDTH: 860px; BORDER-COLLAPSE: collapse; HEIGHT: 105px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>特性/方法</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>cells</td>
            <td>&lt;tr/&gt;元素中所有的单元格的集合</td>
        </tr>
        <tr>
            <td>deleteCell(postion)</td>
            <td>删除给定位置上的单元格</td>
        </tr>
        <tr>
            <td>insertCell(postion)</td>
            <td>在cells集合的给点位置上插入一个新的单元格</td>
        </tr>
    </tbody>
</table>
<br>8.遍历DOM<br><strong>NodeIterator，TreeWalker</strong><br>DOM Level2的功能，这些功能只有在Mozilla和Konqueror/Safari中才有，这里就不介绍了。<br>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/113336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-24 22:06 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/24/113336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习实践－－新手上路－－验证表单</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111783.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Wed, 18 Apr 2007 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111783.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111783.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111783.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111783.html</trackback:ping><description><![CDATA[<p>这几天学习javascript，就只在看书，都没怎么实践，<br>今天工作的时候要检验表单数据，属性Ｎ多，以前做的时候是对每个属性都写四五句话来判断，类似<br>function checkData(){<br>&nbsp;&nbsp;&nbsp;if(document.forms[0].username==""){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("请输入用户名");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.forms[0].username.focus();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;return true;<br>}<br>关于这种验证的实用性暂且不谈，现在一般的验证早已不用这个了。<br>只是为了在工作中偷偷懒，写了个方便点的CheckUtil，如下<br></p>
<script type="text/javascript">
function runCode(obj) {
      var winname = window.open('', "_blank", 'width=400,height=300,left=250,top=200');
      var obj1=document.getElementById(obj)
      winname.document.open('text/html', 'replace');
      winname.opener = null // 防止恶意修改
      winname.document.writeln(obj1.value);
      winname.document.close();
}
</script><textarea id=code rows=15 cols=80>&lt;!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;title&gt;验证&lt;/title&gt;
<script type="text/javascript">
var CheckUtil = new Object();
var checkutil = CheckUtil;
CheckUtil.status = true;//状态，用来标志是否有不合格验证
CheckUtil.checks = new Array();//用来存储需要验证的对象参数
CheckUtil.definedchecks = new Array();//用来存储自定义验证
CheckUtil.errors = new Array();//用来存储输出错误信息
CheckUtil.firstErrObj = null;//用来存储第一个出错对象，设置焦点
//////////////////////各种验证类型/////////////////////////////
CheckUtil.REQUIRED = /\S/;        //非空
CheckUtil.INT = /^-?\d+$/;        //整数
CheckUtil.FLOAT = /^(-?\d+)(\.\d+)?$/;        //浮点数
CheckUtil.USERNAME = /^[a-zA-Z]{1}(\w){4,19}$/;        //用户名
CheckUtil.EMAIL = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;    //电子邮箱
CheckUtil.TEL = /^((\(\d{3}\))(\d{3}\-))?(\(0\d{2,3}\)0\d{2,3}-)?[1-9]\d{6,7}$/;    //电话号码
CheckUtil.MOBILEPHONE = /^((\(\d{3}\))(\d{3}\-))?13\d{9}$/;        //手机
CheckUtil.NUM = /^\d+$/;    //数字
CheckUtil.CARDID = /^\d{15}(\d{2}[A-Za-z0-9])?$/;        //身份证号
CheckUtil.POSTCODE = /^[1-9]\d{5}$/;        //邮编
CheckUtil.DATE1 = /^(?:19\d{2}|20\d{2})-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$/        //日期，形如yyyy-mm-dd
///////////////////////////////////////////////////////////////////////
/**
*初始化
*/
CheckUtil.init = function(){
    CheckUtil.status = true;
    CheckUtil.checks = new Array();
    CheckUtil.definedchecks = new Array();
    CheckUtil.errors = new Array();
    CheckUtil.firstErrObj = null;
}
/**
*添加验证对象及参数
*@param obj 需验证表单对象
*@param checktype 需验证类型
*@param errmessage 验证失败时提示信息
*/
CheckUtil.addCheck = function(obj,checktype,errmessage){
    var check_obj = new checkObj(obj,checktype,errmessage);
    CheckUtil.checks.push(check_obj);
}
/**
*添加自定义验证
*@param expression 需验证表达式，为真时返回错误信息
*@param errmessage 验证失败时提示信息
*/
CheckUtil.addDefinedCheck = function(expression,errmessage){
    var check_obj = new definedcheckObj(expression,errmessage);
    CheckUtil.definedchecks.push(check_obj);
}
/**
*验证对象
*/
function checkObj(obj,checktype,errmessage){
    this.obj = obj;
    this.value = obj.value;
    this.checktype = checktype;
    this.errmessage = errmessage;
}
/**
*自定义验证对象
*/
function definedcheckObj(expression,errmessage){
    this.expression = expression;
    this.errmessage = errmessage;
}
/**
*执行验证并提示信息，并返回验证状态
*/
CheckUtil.execute = function(){    
    checkChecks();
    checkDefinedChecks();
    showError();
    return CheckUtil.status;
}
/**
*检验对象
*/
function checkChecks(){
     for(var i=0;i<checkutil.checks.length;i++){
          var check_obj = CheckUtil.checks[i];
          if(check_obj.checktype==CheckUtil.REQUIRED){//判断是否是必填
                 if(!check_obj.checktype.test(check_obj.value)){
                     CheckUtil.status = false;
                     if(!CheckUtil.firstErrObj){
                         CheckUtil.firstErrObj = check_obj.obj;
                     }
                     CheckUtil.errors.push(check_obj.errmessage);
                 }
          }else{//不是必填的话，看有没有填入值，填了就检查，没填也是可行的
               if(CheckUtil.REQUIRED.test(check_obj.value)){
                    if(!check_obj.checktype.test(check_obj.value)){
                          CheckUtil.status = false;
                          if(!CheckUtil.firstErrObj){
                              CheckUtil.firstErrObj = check_obj.obj;
                          }
                          CheckUtil.errors.push(check_obj.errmessage);
                    }
               }
         }
    }
}
/**
*检验自定义验证
*/
function checkDefinedChecks(){
    for(var i=0;i<checkutil.definedchecks.length;i++){
          var check_obj = CheckUtil.definedchecks[i];
          if(check_obj.expression){
                  CheckUtil.errors.push(check_obj.errmessage);
          }
    }
}
/**
*显示错误信息
*/
function showError(){
    if(!CheckUtil.status){
        var show = "";
        for(var i=0;i<checkutil.errors.length;i++){
            show +=(i+1)+". "+CheckUtil.errors[i]+"\n";
        }
        alert(show);    
        CheckUtil.firstErrObj.focus();
        CheckUtil.firstErrObj.select();
    }
}
function checkData(){
    CheckUtil.init();
    CheckUtil.addCheck(document.forms[0].username,CheckUtil.REQUIRED,"请输入用户名");
    CheckUtil.addCheck(document.forms[0].username,CheckUtil.USERNAME,"用户名须由字母开头,及4-19位单词字符组成");
    CheckUtil.addCheck(document.forms[0].password,CheckUtil.REQUIRED,"请输入密码");
    CheckUtil.addCheck(document.forms[0].checkcode,CheckUtil.NUM,"验证码须为数字");
    CheckUtil.addCheck(document.forms[0].logindate,CheckUtil.DATE1,"请输入正确的日期格式，形如yyyy-mm-dd");
    CheckUtil.addDefinedCheck(document.forms[0].password!=document.forms[0].password2,"两次输入的密码不相同");
    return CheckUtil.execute();
}
</script>
&lt;/head&gt;
&lt;body&gt;
&lt;form name="form1" action="www.blogjava.net/ilovezmh" method="post" onsubmit="return checkData();"&gt;
&lt;label&gt;用户名&lt;/label&gt;
&lt;input name="username" type="text" size="20" /&gt;&lt;br/&gt;
&lt;label&gt;密　码&lt;/label&gt;
&lt;input name="password" type="password" size="20" /&gt;&lt;br/&gt;
&lt;label&gt;确　认&lt;/label&gt;
&lt;input name="password2" type="password" size="20" /&gt;&lt;br/&gt;
&lt;label&gt;验证码&lt;/label&gt;
&lt;input name="checkcode" type="text" size="20" /&gt;&lt;br/&gt;
&lt;label&gt;日　期&lt;/label&gt;
&lt;input name="logindate" type="text" size="20" /&gt;&lt;br/&gt;
&lt;button name="sub" type="submit"&gt; 提　交　&lt;/button&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</textarea><br><button onclick="runCode('code');">运行代码</button> <br>其实也可以方便的根据需要更改提示的方式。 <img src ="http://www.blogjava.net/ilovezmh/aggbug/111783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-18 23:36 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/18/111783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(六)－－资料</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111435.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 17 Apr 2007 16:50:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111435.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111435.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111435.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111435.html</trackback:ping><description><![CDATA[唉，前面写了几篇，感觉像在抄书，累。<br>把整个文档放在这里算了，到时候需要再找。<br>重要的地方再记录下了。<br>注：本资料为《javascript高级程序设计》一书配套源代码。学习笔记也从本书摘录。<br><br><a title=源代码下载 href="http://www.blogjava.net/Files/ilovezmh/Examples.rar">源代码下载</a>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-18 00:50 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/18/111435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(五)－－事件</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111430.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 17 Apr 2007 16:18:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111430.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111430.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111430.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111430.html</trackback:ping><description><![CDATA[<p>var EventUtil = new Object;<br>EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) {<br>&nbsp;&nbsp;&nbsp; if (oTarget.addEventListener) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget.addEventListener(sEventType, fnHandler, false);<br>&nbsp;&nbsp;&nbsp; } else if (oTarget.attachEvent) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget.attachEvent("on" + sEventType, fnHandler);<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget["on" + sEventType] = fnHandler;<br>&nbsp;&nbsp;&nbsp; }<br>};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) {<br>&nbsp;&nbsp;&nbsp; if (oTarget.removeEventListener) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget.removeEventListener(sEventType, fnHandler, false);<br>&nbsp;&nbsp;&nbsp; } else if (oTarget.detachEvent) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget.detachEvent("on" + sEventType, fnHandler);<br>&nbsp;&nbsp;&nbsp; } else { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oTarget["on" + sEventType] = null;<br>&nbsp;&nbsp;&nbsp; }<br>};</p>
<p>EventUtil.formatEvent = function (oEvent) {<br>&nbsp;&nbsp;&nbsp; if (isIE &amp;&amp; isWin) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.eventPhase = 2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.isChar = (oEvent.charCode &gt; 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.pageX = oEvent.clientX + document.body.scrollLeft;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.pageY = oEvent.clientY + document.body.scrollTop;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.preventDefault = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.returnValue = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (oEvent.type == "mouseout") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.relatedTarget = oEvent.toElement;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (oEvent.type == "mouseover") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.relatedTarget = oEvent.fromElement;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.stopPropagation = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.cancelBubble = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.target = oEvent.srcElement;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oEvent.time = (new Date).getTime();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return oEvent;<br>};</p>
<p>EventUtil.getEvent = function() {<br>&nbsp;&nbsp;&nbsp; if (window.event) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.formatEvent(window.event);<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EventUtil.getEvent.caller.arguments[0];<br>&nbsp;&nbsp;&nbsp; }<br>};<br></p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-18 00:18 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/18/111430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(四)－－检测浏览器和操作系统</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111429.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 17 Apr 2007 16:13:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111429.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111429.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/18/111429.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111429.html</trackback:ping><description><![CDATA[<p>var sUserAgent = navigator.userAgent;<br>var fAppVersion = parseFloat(navigator.appVersion);</p>
<p>function compareVersions(sVersion1, sVersion2) {</p>
<p>&nbsp;&nbsp;&nbsp; var aVersion1 = sVersion1.split(".");<br>&nbsp;&nbsp;&nbsp; var aVersion2 = sVersion2.split(".");<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (aVersion1.length &gt; aVersion2.length) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i=0; i &lt; aVersion1.length - aVersion2.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aVersion2.push("0");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; } else if (aVersion1.length &lt; aVersion2.length) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (var i=0; i &lt; aVersion2.length - aVersion1.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aVersion1.push("0");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; for (var i=0; i &lt; aVersion1.length; i++) {<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (aVersion1[i] &lt; aVersion2[i]) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (aVersion1[i] &gt; aVersion2[i]) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return 0;</p>
<p>}</p>
<p>var isOpera = sUserAgent.indexOf("Opera") &gt; -1;<br>var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;</p>
<p>if (isOpera) {<br>&nbsp;&nbsp;&nbsp; var fOperaVersion;<br>&nbsp;&nbsp;&nbsp; if(navigator.appName == "Opera") {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fOperaVersion = fAppVersion;<br>&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reOperaVersion.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fOperaVersion = parseFloat(RegExp["$1"]);<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; isMinOpera4 = fOperaVersion &gt;= 4;<br>&nbsp;&nbsp;&nbsp; isMinOpera5 = fOperaVersion &gt;= 5;<br>&nbsp;&nbsp;&nbsp; isMinOpera6 = fOperaVersion &gt;= 6;<br>&nbsp;&nbsp;&nbsp; isMinOpera7 = fOperaVersion &gt;= 7;<br>&nbsp;&nbsp;&nbsp; isMinOpera7_5 = fOperaVersion &gt;= 7.5;<br>}</p>
<p>var isKHTML = sUserAgent.indexOf("KHTML") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Konqueror") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("AppleWebKit") &gt; -1; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>var isMinSafari1 = isMinSafari1_2 = false;<br>var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;</p>
<p>if (isKHTML) {<br>&nbsp;&nbsp;&nbsp; isSafari = sUserAgent.indexOf("AppleWebKit") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isKonq = sUserAgent.indexOf("Konqueror") &gt; -1;</p>
<p>&nbsp;&nbsp;&nbsp; if (isSafari) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reAppleWebKit.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var fAppleWebKitVersion = parseFloat(RegExp["$1"]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinSafari1 = fAppleWebKitVersion &gt;= 85;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinSafari1_2 = fAppleWebKitVersion &gt;= 124;<br>&nbsp;&nbsp;&nbsp; } else if (isKonq) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reKonq = new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reKonq.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") &gt;= 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinKonq3 = compareVersions(RegExp["$1"], "3.0") &gt;= 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") &gt;= 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") &gt;= 0;<br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; <br>}</p>
<p>var isIE = sUserAgent.indexOf("compatible") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; sUserAgent.indexOf("MSIE") &gt; -1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; !isOpera;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;</p>
<p>if (isIE) {<br>&nbsp;&nbsp;&nbsp; var reIE = new RegExp("MSIE (\\d+\\.\\d+);");<br>&nbsp;&nbsp;&nbsp; reIE.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp; var fIEVersion = parseFloat(RegExp["$1"]);</p>
<p>&nbsp;&nbsp;&nbsp; isMinIE4 = fIEVersion &gt;= 4;<br>&nbsp;&nbsp;&nbsp; isMinIE5 = fIEVersion &gt;= 5;<br>&nbsp;&nbsp;&nbsp; isMinIE5_5 = fIEVersion &gt;= 5.5;<br>&nbsp;&nbsp;&nbsp; isMinIE6 = fIEVersion &gt;= 6.0;<br>}</p>
<p>var isMoz = sUserAgent.indexOf("Gecko") &gt; -1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; !isKHTML;</p>
<p>var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;</p>
<p>if (isMoz) {<br>&nbsp;&nbsp;&nbsp; var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");<br>&nbsp;&nbsp;&nbsp; reMoz.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp; isMinMoz1 = compareVersions(RegExp["$1"], "1.0") &gt;= 0;<br>&nbsp;&nbsp;&nbsp; isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") &gt;= 0;<br>&nbsp;&nbsp;&nbsp; isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") &gt;= 0;<br>}</p>
<p>var isNS4 = !isIE &amp;&amp; !isOpera &amp;&amp; !isMoz &amp;&amp; !isKHTML <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (sUserAgent.indexOf("Mozilla") == 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (navigator.appName == "Netscape") <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (fAppVersion &gt;= 4.0 &amp;&amp; fAppVersion &lt; 5.0);</p>
<p>var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;</p>
<p>if (isNS4) {<br>&nbsp;&nbsp;&nbsp; isMinNS4 = true;<br>&nbsp;&nbsp;&nbsp; isMinNS4_5 = fAppVersion &gt;= 4.5;<br>&nbsp;&nbsp;&nbsp; isMinNS4_7 = fAppVersion &gt;= 4.7;<br>&nbsp;&nbsp;&nbsp; isMinNS4_8 = fAppVersion &gt;= 4.8;<br>}</p>
<p>var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");<br>var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || (navigator.platform == "Macintosh");</p>
<p>var isUnix = (navigator.platform == "X11") &amp;&amp; !isWin &amp;&amp; !isMac;</p>
<p>var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;<br>var isMac68K = isMacPPC = false;<br>var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;</p>
<p>if (isWin) {<br>&nbsp;&nbsp;&nbsp; isWin95 = sUserAgent.indexOf("Win95") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows 95") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isWin98 = sUserAgent.indexOf("Win98") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows 98") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isWinME = sUserAgent.indexOf("Win 9x 4.90") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows ME") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isWin2K = sUserAgent.indexOf("Windows NT 5.0") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows 2000") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isWinXP = sUserAgent.indexOf("Windows NT 5.1") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows XP") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isWinNT4 = sUserAgent.indexOf("WinNT") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows NT") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("WinNT4.0") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("Windows NT 4.0") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (!isWinME &amp;&amp; !isWin2K &amp;&amp; !isWinXP);<br>} </p>
<p>if (isMac) {<br>&nbsp;&nbsp;&nbsp; isMac68K = sUserAgent.indexOf("Mac_68000") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("68K") &gt; -1;<br>&nbsp;&nbsp;&nbsp; isMacPPC = sUserAgent.indexOf("Mac_PowerPC") &gt; -1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || sUserAgent.indexOf("PPC") &gt; -1;&nbsp; <br>}</p>
<p>if (isUnix) {<br>&nbsp;&nbsp;&nbsp; isSunOS = sUserAgent.indexOf("SunOS") &gt; -1;</p>
<p>&nbsp;&nbsp;&nbsp; if (isSunOS) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reSunOS.test(sUserAgent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinSunOS4 = compareVersions(RegExp["$1"], "4.0") &gt;= 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinSunOS5 = compareVersions(RegExp["$1"], "5.0") &gt;= 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isMinSunOS5_5 = compareVersions(RegExp["$1"], "5.5") &gt;= 0;<br>&nbsp;&nbsp;&nbsp; }<br>}<br></p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-18 00:13 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/18/111429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(三)－－正则表达式 </title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/17/111120.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Mon, 16 Apr 2007 16:45:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/17/111120.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111120.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/17/111120.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111120.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111120.html</trackback:ping><description><![CDATA[一、简单模式<br>1.元字符<br>这里是正则表达式用到的所有元字符<br>(&nbsp; [&nbsp; {&nbsp; \&nbsp; ^&nbsp; $&nbsp; |&nbsp; )&nbsp; ?&nbsp; *&nbsp; +&nbsp; .<br>任何时候要在正则表达式中使用这些元字符，都必须对它们进行转义。因此要匹配一个问号，正则表达式就该这样表示：<br>var veQMark =/\?/;<br>或者这样表示：<br>var veQMark=new RegExp("\\?");<br>注意当正则表达式以第二种形式表示时，所有的反斜杠都必须用两个反斜杠来替换，因为javascript字符串解析器会按照\n的方式尝试翻译\?。为了保证不会出现这个问题，在元字符的前面加上两个反斜杠（双重转义）。这个小小的gotcha就是多数开发者更偏好使用字面量语法的原因。<br><br>2.使用特殊字符<br>要使用ASCII来表示一个字符，则必须指定一个两位的十六进制代码，并有前面加上\x。例如字符b的ASCII码为98，等于十六进制的62，因此，表示字符b可以使用\x62<br>另外也可以使用八进制代替十六进制来指定字符代码，直接在反斜杠之后跟上八进制数值，例如，b等于八进制的142，所以下面就该这样<br>/\142/<br>如果要使用Unicode来表示字符，必须指定字符串的四位十六进制表示形式，因此b应该是\u0062<br>另外还有其他一些预定义的特殊字符，如下表所列<br>
<table style="WIDTH: 686px; BORDER-COLLAPSE: collapse; HEIGHT: 286px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>字符</td>
            <td>描述</td>
        </tr>
        <tr>
            <td>\t</td>
            <td>制表符</td>
        </tr>
        <tr>
            <td>\n</td>
            <td>换行符</td>
        </tr>
        <tr>
            <td>\r</td>
            <td>回车符</td>
        </tr>
        <tr>
            <td>\f</td>
            <td>换页符</td>
        </tr>
        <tr>
            <td>\a</td>
            <td>alert字符</td>
        </tr>
        <tr>
            <td>\e</td>
            <td>escape字符</td>
        </tr>
        <tr>
            <td>\cx</td>
            <td>与X相对应的控制字符</td>
        </tr>
        <tr>
            <td>\b</td>
            <td>回退字符</td>
        </tr>
        <tr>
            <td>\v</td>
            <td>垂直制表符</td>
        </tr>
        <tr>
            <td>\0</td>
            <td style="WIDTH: 529px; HEIGHT: 26px">空字符</td>
        </tr>
    </tbody>
</table>
<br>3.字符类<br>3.1简单类<br>假设相匹配"bat","cat","fat"。使用简单类可以很方便的解决这个问题<br>/[bcf]at/gi<br>后面的g表示全匹配，i表示不区分大小写。<br>3.2负向类<br>要匹配除了a和b的所有字符，那么这个字符就是[^ab]<br>3.3范围类<br>[a-z]<br>[A-Z]<br>[0-9]<br>[^1-4]<br>3.4组合类<br>匹配所有从a~m的字母以及从1~4的数字，以及一个换行符<br>[a-m1-4\n]<br>3.5预定义类<br>
<table style="WIDTH: 688px; BORDER-COLLAPSE: collapse; HEIGHT: 237px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>代码</td>
            <td>等同于</td>
            <td>匹配</td>
        </tr>
        <tr>
            <td>.</td>
            <td>[^\n\r]</td>
            <td>除了换行和回车之外的任意字符</td>
        </tr>
        <tr>
            <td>\d</td>
            <td>[0-9]</td>
            <td>数字</td>
        </tr>
        <tr>
            <td>\D</td>
            <td>[^0-9]</td>
            <td>非数字字符</td>
        </tr>
        <tr>
            <td style="WIDTH: 70px; HEIGHT: 26px">\s</td>
            <td>[\t\n\x0B\f\r]</td>
            <td>空白字符</td>
        </tr>
        <tr>
            <td>\S</td>
            <td>[^\t\n\x0B\f\r]</td>
            <td>非空白字符</td>
        </tr>
        <tr>
            <td>\w</td>
            <td>[a-zA-Z_0-9]</td>
            <td>单词字符（所有字母，所有的数字和下划线）</td>
        </tr>
        <tr>
            <td>\W</td>
            <td>[^a-zA-Z_0-9]</td>
            <td style="WIDTH: 484px; HEIGHT: 36px">非单词字符</td>
        </tr>
    </tbody>
</table>
<br>4.量词<br>4.1简单量词<br>
<table style="WIDTH: 689px; BORDER-COLLAPSE: collapse; HEIGHT: 104px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td style="HEIGHT: 24px">代码</td>
            <td>描述</td>
        </tr>
        <tr>
            <td style="HEIGHT: 26px">?</td>
            <td>出现零次或一次</td>
        </tr>
        <tr>
            <td>*</td>
            <td>出现零次或多次</td>
        </tr>
        <tr>
            <td style="WIDTH: 116px; HEIGHT: 26px">+</td>
            <td style="WIDTH: 253px">出现一次或多次（至少出现一次）</td>
        </tr>
        <tr>
            <td>{n}</td>
            <td style="WIDTH: 253px; HEIGHT: 26px">一定出现n次</td>
        </tr>
        <tr>
            <td>{n,m}</td>
            <td style="WIDTH: 253px; HEIGHT: 26px">至少出现n次但不超过m次</td>
        </tr>
        <tr>
            <td>{n,}</td>
            <td style="WIDTH: 253px; HEIGHT: 26px">至少出现n次</td>
        </tr>
    </tbody>
</table>
4.2贪婪的、惰性的和支配性的量词<br>贪婪量词：先看整个的字符串是不是一个匹配，如果没有发现匹配，它去掉字符串中的最后一个字符，并再次尝试。直到发现一个匹配字符或者字符串不剩任何字符。<br>惰性量词：先看字符串中的第一个字线是不是一个匹配。如果单独这个字符还不够，就读入下一个字符，组成两个字符的字符串，如果还是没有发现匹配，继续添加字会直到发现一个或者整个字符都检查过也没有匹配。其工作方式恰好与贪婪相反。<br>支配量词：只尝试匹配整个字符串。如果整个字符串不能产生匹配，不做进一步尝试。<br>表示方法如下表<br>
<table style="WIDTH: 683px; BORDER-COLLAPSE: collapse; HEIGHT: 183px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>贪婪</td>
            <td>惰性</td>
            <td>支配</td>
            <td>描述</td>
        </tr>
        <tr>
            <td style="WIDTH: 71px">?&nbsp;&nbsp;</td>
            <td style="WIDTH: 98px">??</td>
            <td style="WIDTH: 118px; HEIGHT: 36px">?+</td>
            <td>零次或一次出现</td>
        </tr>
        <tr>
            <td>*</td>
            <td>*?</td>
            <td>*+</td>
            <td>零次或多次出现</td>
        </tr>
        <tr>
            <td>+</td>
            <td>+?</td>
            <td>++</td>
            <td>一次或多次出现</td>
        </tr>
        <tr>
            <td>{n}</td>
            <td>{n}?</td>
            <td>{n}+</td>
            <td>恰好n次出现</td>
        </tr>
        <tr>
            <td>{n,m}</td>
            <td>{n,m}?</td>
            <td>{n,m}+</td>
            <td style="WIDTH: 88px; HEIGHT: 26px">至少n次至多m次出现</td>
        </tr>
        <tr>
            <td>{n,}</td>
            <td>{n,}?</td>
            <td>{n,}+</td>
            <td>至少n次出现</td>
        </tr>
    </tbody>
</table>
<p><br>浏览器对支配量词的支持还很不完善。IE和Opera不支持，Mozilla将支配量词看作是贪婪的。<br><br>二、复杂模式<br>1.分组<br>分组是通过一系列括号包围一系列字符、字符类以及量词来使用的。<br>/dogdog/可使用分组来重写成/(dog){2}/<br>/([bd]ad?)*/匹配零个和多个"ba","da","bad"或"dad"<br>/(mom( and dad)?)/匹配"mom" 或　"mom and dad"</p>
<p>2.反向引用<br>在表达式计算完成后还可以怎样利用分组？每个分组都被存放在一个特殊的地方以备将来使用。这些存储在分组中的特殊值，我们称之为反向引用。<br>反向引用是按照从左到右遇到的左括号字符的顺序进行创建和编号的。例如表达式(A?(B?(C?)))将产生编号从1-3的三个反向引用<br>(1).(A?(B?(C?)))<br>(2).(B?(C?))<br>(3).(C?)<br>反向引用可以有几种不同的使用方法。<br>首先，使用正则表达式对象的test(),match()或search()方法后，反向引用的值可以从RegExp构造函数中获得。例<br>var sToMatch = "#123456789";<br>var reNumbers = /#(\d+)/;<br>reNumbers.test(sToMatch);<br>alert(RegExp.$1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "123456789"<br>然后，还可以直接在定义分组的表达式中包含反向引用，这可以通过使用特殊转义序列如\1,\2等等实现<br>例如<br>var sToMatch = "dogdog";<br>var reDogDog = /(dog)\1/;<br>alert(reDogDog.test(sToMatch));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>正则表达式reDogDog首先创建单词dog的组，然后又被特殊转义序列\1引用，使得这个正则表达式等同于/dogdog/<br>第三，反向引用可以用在String对象的replace()方法中，这通过使用特殊字符序列$1,$2等等来实现。例如<br>var sToChange = "1234 5678";<br>var reMatch = /(\d{4}) (\d{4})/<br>var sNew&nbsp; = sToChange.replace(reMatch,"$2 $1");<br>alert(sNew);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "5678 1234"<br><br>3.候选<br>有时候要构建一个能够正确匹配想得到所有可能性的模式是十分困难的。如果要对同一个表达式同时匹配"red"和"break"时要怎么做呢？这些单词完全没有相同的字符，这样就要写两个不同的正则表达式，并分别对两个字符串进行匹配，像这样：<br>var sToMatch1 = "red";<br>var sToMatch2 = "black";<br>var reRed = /red/;<br>var reBlack = /black/;<br>alert(reRed.test(sToMatch1)||reBlack.test(sToMatch1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>alert(reRed.test(sToMatch2)||reBlack.test(sToMatch2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>这完成了任务，但是十分冗长。还有另一种方式就是使用正则表达式的候选操作符。例：<br>var sToMatch1 = "red";<br>var sToMatch2 = "black";<br>var reRedOrBlack = /(red|black)/;<br>alert(reRedOrBlack.test(sToMatch1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>alert(reRedOrBlack.test(sToMatch2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br><br>4.非捕获性分组<br>创建反向引用的分组，我们称之为捕获性分组。同时还有一种非捕获性分组，它不会创建反向引用。在较长的正则表达式中，存储反向引用会降低匹配速度。<br>如果要创建一个非捕获性分组，只要在左括号的后面加上一个问号和一个紧跟的冒号：<br>var sToMatch = "#123456789";<br>var reNumbers = /#(?:\d+)/;<br>reNumbers.test(sToMatch);<br>alert(RegExp.$1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs ""<br><br>5.前瞻<br>有时候，可能希望，当某个特定的字符分组出现在另一个字符串之前时，才去捕获它。如果使用&#8220;前瞻&#8221;就可以让这个过程变得十分简单。<br>前瞻，告诉正则表达式运算器向前看一些字符而不移动其位置。同样存在正向前瞻和负向前瞻。正向前瞻检查的是接下来出现的是不是某个特定字符集。而负向前瞻则是检查接下来的不应该出现的特定字符集。<br>创建正向前瞻要将模式放在(?=和)之间。注意这不是分组，虽然它也用到括号。<br>var sToMatch1 = "bedroom";<br>var sToMatch2 = "bedding";<br>var reBed = /(bed(?=room)/;<br>alert(reBed.test(sToMatch1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>alert(RegExp.$1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "bed"<br>alert(reBed.test(sToMatch2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "false"<br>负向前瞻，则要将模式放在(?!和)之间。<br>var sToMatch1 = "bedroom";<br>var sToMatch2 = "bedding";<br>var reBed = /(bed(?!room)/;<br>alert(reBed.test(sToMatch1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "false"<br>alert(reBed.test(sToMatch2));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "true"<br>alert(RegExp.$1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "bed"<br><br>6.边界<br>边界　用于正则表达式中表示模式的位置。下表列出了几种可能的边界<br>
<table style="WIDTH: 683px; BORDER-COLLAPSE: collapse; HEIGHT: 131px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td style="WIDTH: 75px; HEIGHT: 25px">边界</td>
            <td>描述</td>
        </tr>
        <tr>
            <td>^</td>
            <td>行开头</td>
        </tr>
        <tr>
            <td>$</td>
            <td>行结尾</td>
        </tr>
        <tr>
            <td>\b</td>
            <td>单词的边界</td>
        </tr>
        <tr>
            <td>\B</td>
            <td style="WIDTH: 178px; HEIGHT: 26px">非单词的边界</td>
        </tr>
    </tbody>
</table>
<br>假设想查找一个单词，但要它只出现在行尾，则可以使用美元符号$来表示它：<br>var sToMatch = "Important word is the last one.";<br>var reLastWord = /(\w+).$/;<br>reLastWord.test(sToMatch);<br>alert(RegExp.$1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "one"<br><br>7.多行模式<br>要指定多行模式，只要在正则表达式后面添加一个m选项。这会让$边界匹配换行符(\n)以及字符串真正的结尾。<br>var sToMatch = "First second\nthird fourth\nfifth sixth";<br>var reLastWordOnLine = /(\w+)$/gm;<br>var arrWords = sToMatch.match(reLastWordOnLine);<br>表达式返回"second","fourth"和"sixth"。若不指定多行模式，表达式将只返回"sixth"。<br><br>二、RegExp对象<br>javascript中的每个正则表达式都是一个对象，同其他的对象一样。<br>1.实例属性<br>global－－Boolean值，表示g(全局选项)是否已设置。<br>ignoreCase－－Boolean值，表示i(忽略大小写选项)是否已设置。<br>lastIndex－－整数，代表下次匹配将会从哪个字符位置开始(只有当使用exec()或test()函数才会填入，否则为0)。<br>multiline－－Boolean值，表示m(多行模式选项)是否已设置。<br>source－－正则表达式的源字符串形式。例如表达式/[ba]*/的source将返回"[ba]*"。<br><br>2.静态属性<br>静态的RegExp属性对所有的正则表达式都有效。<br>
<table style="WIDTH: 686px; BORDER-COLLAPSE: collapse; HEIGHT: 105px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>长名</td>
            <td>短名</td>
            <td>描述</td>
        </tr>
        <tr>
            <td>input</td>
            <td>$_</td>
            <td>最后用于匹配的字符串(传递给exec()或test()的字符串)</td>
        </tr>
        <tr>
            <td>lastMatch</td>
            <td>$&amp;</td>
            <td>最后匹配的字符</td>
        </tr>
        <tr>
            <td>lastParen</td>
            <td>$+</td>
            <td>最后匹配的分组</td>
        </tr>
        <tr>
            <td>leftContext</td>
            <td>$`</td>
            <td>在上次匹配的前面的子串</td>
        </tr>
        <tr>
            <td>multiline</td>
            <td>$*</td>
            <td>用于指定是否所有的表达式都使用多行模式的布尔值</td>
        </tr>
        <tr>
            <td>rightContext</td>
            <td>$'</td>
            <td>在上次匹配之后的子串</td>
        </tr>
    </tbody>
</table>
<br>IE和Opera并不支持RegExp.multiline，所以最好单独的对每个表达式设置m选项而不要直接设置这个标记。</p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-17 00:45 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/17/111120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(二)－－继承</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111106.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Mon, 16 Apr 2007 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111106.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111106.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111106.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111106.html</trackback:ping><description><![CDATA[<p>一、继承的方式<br>1.对象冒充<br>function ClassA(sColor) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.sayColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color);<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>function ClassB(sColor, sName) {<br>&nbsp;&nbsp;&nbsp; this.newMethod = ClassA;<br>&nbsp;&nbsp;&nbsp; this.newMethod(sColor);<br>&nbsp;&nbsp;&nbsp; delete this.newMethod;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; this.name = sName;<br>&nbsp;&nbsp;&nbsp; this.sayName = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.name);<br>&nbsp;&nbsp;&nbsp; };&nbsp;&nbsp;&nbsp; <br>}</p>
<p>var objA = new ClassA("red");<br>var objB = new ClassB("blue", "Nicholas");<br>objA.sayColor();<br>objB.sayColor();<br>objB.sayName();<br>所有新的属性和新的方法都必须在删除了新方法的代码行后定义。否则，可能会覆盖超类的相关属性和方法。<br>对象冒充可以支持多继承。<br>function ClassZ(){<br>&nbsp;&nbsp;&nbsp;this.newMethod = ClassX;<br>&nbsp;&nbsp;&nbsp;this.newMethod(sColor);<br>&nbsp;&nbsp;&nbsp;delete this.newMethod;<br><br>&nbsp;&nbsp;&nbsp;this.newMethod = ClassY;<br>&nbsp;&nbsp;&nbsp;this.newMethod(sColor);<br>&nbsp;&nbsp;&nbsp;delete this.newMethod;<br>}<br>这里存在一个弊端，如果ClassX和ClassY具有相同的属性或方法，ClassY具有高优先级，因为继承的是最后的类。<br><br>2.call()方法<br>call()方法是与经典的对象冒充方法最相似的方法，它的第一个参数用作this的对象，其他参数都直接传递函数自身。<br>function ClassA(sColor) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.sayColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color);<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>function ClassB(sColor, sName) {<br>&nbsp;&nbsp;&nbsp; //this.newMethod = ClassA;<br>&nbsp;&nbsp;&nbsp; //this.newMethod(color);<br>&nbsp;&nbsp;&nbsp; //delete this.newMethod;<br>&nbsp;&nbsp;&nbsp; ClassA.call(this, sColor);</p>
<p>&nbsp;&nbsp;&nbsp; this.name = sName;<br>&nbsp;&nbsp;&nbsp; this.sayName = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.name);<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>var objA = new ClassA("red");<br>var objB = new ClassB("blue", "Nicholas");<br>objA.sayColor();<br>objB.sayColor();<br>objB.sayName();<br><br>3.apply()方法<br>apply()方法有两个参数，用作this的对象和要传递参数的数组。例如：<br>function ClassA(sColor) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.sayColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color);<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>function ClassB(sColor, sName) {<br>&nbsp;&nbsp;&nbsp; //this.newMethod = ClassA;<br>&nbsp;&nbsp;&nbsp; //this.newMethod(color);<br>&nbsp;&nbsp;&nbsp; //delete this.newMethod;<br>&nbsp;&nbsp;&nbsp; ClassA.apply(this, arguments);</p>
<p>&nbsp;&nbsp;&nbsp; this.name = sName;<br>&nbsp;&nbsp;&nbsp; this.sayName = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.name);<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>var objA = new ClassA("red");<br>var objB = new ClassB("blue", "Nicholas");<br>objA.sayColor();<br>objB.sayColor();<br>objB.sayName();</p>
<p>当然，只有超类中的参数顺序与子类中的参数顺序完全一致时才可以传递参数对象。如果不是，就必须创建一个单独的数组，按照正确的顺序放置参数。此外，还可以使用call()方法。<br><br>4.原型链<br>function ClassA() {<br>}</p>
<p>ClassA.prototype.color = "red";<br>ClassA.prototype.sayColor = function () {<br>&nbsp;&nbsp;&nbsp; alert(this.color);<br>};</p>
<p>function ClassB() {<br>}</p>
<p>ClassB.prototype = new ClassA();</p>
<p>ClassB.prototype.name = "";<br>ClassB.prototype.sayName = function () {<br>&nbsp;&nbsp;&nbsp; alert(this.name);<br>};</p>
<p>var objA = new ClassA();<br>var objB = new ClassB();<br>objA.color = "red";<br>objB.color = "blue";<br>objB.name = "Nicholas";<br>objA.sayColor();<br>objB.sayColor();<br>objB.sayName();<br>注意，调用ClassA的构造函数时，没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。<br>原型链的弊端是不支持多重继承。<br><br>5.混合方式<br>与创建对象最好方式相似，用对象冒充继承构造函数的属性，用原型链继承prototype对象的方法。<br>function ClassA(sColor) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>}</p>
<p>ClassA.prototype.sayColor = function () {<br>&nbsp;&nbsp;&nbsp; alert(this.color);<br>};</p>
<p>function ClassB(sColor, sName) {<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #808080">ClassA.call(this, sColor);</span><br>&nbsp;&nbsp;&nbsp; this.name = sName;<br>}</p>
<p><span style="COLOR: #808080">ClassB.prototype = new ClassA();</span></p>
<p>ClassB.prototype.sayName = function () {<br>&nbsp;&nbsp;&nbsp; alert(this.name);<br>};</p>
<p><br>var objA = new ClassA("red");<br>var objB = new ClassB("blue", "Nicholas");<br>objA.sayColor();<br>objB.sayColor();<br>objB.sayName();</p>
<br>二、其他继承方式<br>1.zlnherit库<br>可以从<a href="http://www.nczonline.net/downloads">http://www.nczonline.net/downloads</a>处下载<br>zInherit库给Object类添加了两个方法，inheritFrom()和instanceOf()<br>ClassB.prototype.inheritFrom(ClassA);<br>CalssB.instanceOf(ClassA);<br><br>2.xbObjects库<br>可以从<a href="http://archive.bclary.com/xbprojectsdocs/xbobject/">http://archive.bclary.com/xbprojectsdocs/xbobject/</a>处下载<br>第一步，必须注册类。<br>_classes.registerClass("Subclass_Name","Superclass_Name");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里，子类和超类名都以字符串形式传进来，而不是指向它们的构造函数的指针。这个调用必须放在指定子类的构造构函数前。<br>第二步，在构造函数内调用defineClass()方法，传给它类名及被Clary称为原型函数的指针，该函数用于初始化对象的所有属性和方法。<br>如<br><span style="COLOR: #808080">_classes.registerClass("ClassA");</span><br>function ClassA(color){<br><span style="COLOR: #808080">&nbsp;&nbsp;&nbsp;_classes.defineClass("ClassA",prototypeFunction);</span><br><br>&nbsp;&nbsp;&nbsp;function prototypeFunction(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//...<br>&nbsp;&nbsp;&nbsp;}<br>}<br>第三步，为该类创建init()方法。该方法负责设置该类的所有属性，它必须接受与构造函数相同的参数。作为一种规约，init()方法总是在defineClass()方法后调用。<br>_classes.registerClass("ClassA");<br>function ClassA(color){<br>&nbsp;&nbsp;&nbsp;_classes.defineClass("ClassA",prototypeFunction);<br><span style="COLOR: #808080">&nbsp;&nbsp;&nbsp;this.init(sColor);<br></span>&nbsp;&nbsp;&nbsp;function prototypeFunction(){<br><span style="COLOR: #808080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassA.prototype.init = function(sColor){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.parentMethod("init");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.color = sColor;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span>&nbsp;&nbsp;&nbsp;}<br>}<br>第四步，在原型函数内添加其他类的方法。<br>_classes.registerClass("ClassA");<br>function ClassA(color){<br>&nbsp;&nbsp;&nbsp;_classes.defineClass("ClassA",prototypeFunction);<br><span style="COLOR: #808080">&nbsp;&nbsp;&nbsp;<span style="COLOR: #000000">this.init(sColor);</span><br></span>&nbsp;&nbsp;&nbsp;function prototypeFunction(){<br><span style="COLOR: #808080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #000000">ClassA.prototype.init = function(sColor){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.parentMethod("init");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.color = sColor;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassA.prototype.sayColor =&nbsp;function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(this.color);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span>&nbsp;&nbsp;&nbsp;}<br>}<br>然后，即可以以常规方式创建ClassA的实例<br>var objA = new ClassA("red");<br>objA.sayColor();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "res"
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-16 23:24 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/16/111106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript学习笔记(一)－－对象</title><link>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111098.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Mon, 16 Apr 2007 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111098.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/111098.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/04/16/111098.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/111098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/111098.html</trackback:ping><description><![CDATA[<p>一、定义类或对象<br>1.工厂方式<br>创建对象car <br>var oCar = new Object;<br>oCar.color = "red";<br>oCar.doors = 4;<br>oCar.mpg = 23;<br>oCar.showColor = function(){<br>&nbsp;&nbsp;&nbsp;alert(this.corlor);<br>};<br><br>创建多个car<br>function createCar(color, doors, mpg) {<br>&nbsp;&nbsp;&nbsp; var tempcar = new Object;<br>&nbsp;&nbsp;&nbsp; tempcar.color = color;<br>&nbsp;&nbsp;&nbsp; tempcar.doors = doors;<br>&nbsp;&nbsp;&nbsp; tempcar.mpg = mpg;<br>&nbsp;&nbsp;&nbsp; tempcar.showColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color)<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;return tempcar;<br>}</p>
<p>var car1 = createCar("red", 4, 23);<br>var car2 = createCar("blue", 3, 25);<br>car1.showColor();&nbsp;&nbsp;&nbsp; //outputs "red"<br>car2.showColor();&nbsp;&nbsp;&nbsp; //outputs "blue"<br>这个例子中，每次调用函数createCar()，都要创建新函数showColor()，意味着每个对象都有自己的showColor()版本，事实上，每个对象都共享了同一个函数。<br>有些开发者在工厂函数外定义对象的方法，然后通过属性指向该方法，从而避开这个问题。<br>function showColor(){<br>&nbsp;&nbsp;&nbsp;alert(this.color);<br>}<br>function createCar(color, doors, mpg) {<br>&nbsp;&nbsp;&nbsp; var tempcar = new Object;<br>&nbsp;&nbsp;&nbsp; tempcar.color = color;<br>&nbsp;&nbsp;&nbsp; tempcar.doors = doors;<br>&nbsp;&nbsp;&nbsp; tempcar.mpg = mpg;<br>&nbsp;&nbsp;&nbsp; tempcar.showColor =&nbsp;showColor;<br>&nbsp;&nbsp;&nbsp;&nbsp;return tempcar;<br>}</p>
<p>var car1 = createCar("red", 4, 23);<br>var car2 = createCar("blue", 3, 25);<br>car1.showColor();&nbsp;&nbsp;&nbsp; //outputs "red"<br>car2.showColor();&nbsp;&nbsp;&nbsp; //outputs "blue"<br>从功能上讲，这样解决了重复创建函数对象的问题，但该函数看起来不像对象的方法。所有这些问题引发了开发者定义的构造函数的出现。<br><br>2.构造函数方法<br>function Car(sColor, iDoors, iMpg) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.doors = iDoors;<br>&nbsp;&nbsp;&nbsp; this.mpg = iMpg;<br>&nbsp;&nbsp;&nbsp; this.showColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color)<br>&nbsp;&nbsp;&nbsp; };<br>}</p>
<p>var oCar1 = new Car("red", 4, 23);<br>var oCar2 = new Car("blue", 3, 25);<br>oCar1.showColor();&nbsp;&nbsp;&nbsp; //outputs "red"<br>oCar2.showColor();&nbsp;&nbsp;&nbsp; //outputs "blue"<br>就像工厂函数，构造函数会重复生成函数，为每个对象都创建独立的函数版本。不过，也可以用外部函数重写构造函数，同样，这么做语义上无任何意义。<br><br>3.原型方式<br>function Car(){<br>}<br>Car.prototype.color = "red";<br>Car.prototype.doors= 4;<br>Car.prototype.mpg= 23;<br>Car.prototype.showColor = function(){<br>&nbsp;&nbsp;&nbsp;alert(this.color);<br>}<br><br>var oCar1 = new Car();<br>var oCar2 = new Car();<br>它解决了前面两种方式存在的两个问题。但并不尽人意。首先，这个构造函数没有参数。使用原型方式时，不能通过构造函数传递参数初始化属性的值，这点很令人计厌，但还没完，真正的问题出现在属性指向的是对象，而不是函数时。考虑下面的例子：<br>function Car(){<br>}<br>Car.prototype.color = "red";<br>Car.prototype.doors= 4;<br>Car.prototype.mpg= 23;<br>Car.prototype.drivers = new Array("Mike","Sue");<br>Car.prototype.showColor = function(){<br>&nbsp;&nbsp;&nbsp;alert(this.color);<br>}<br><br>var oCar1 = new Car();<br>var oCar2 = new Car();<br>oCar1.drivers.push("Matt");<br>alert(oCar1.drivers);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "Mike,Sue,Matt"<br>alert(oCar2.drivers);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "Mike,Sue,Matt"<br><br>4.混合的构造函数/原型方式<br>function Car(sColor, iDoors, iMpg) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.doors = iDoors;<br>&nbsp;&nbsp;&nbsp; this.mpg = iMpg;<br>&nbsp;&nbsp;&nbsp; this.drivers = new Array("Mike", "Sue");<br>}</p>
<p>Car.prototype.showColor = function () {<br>&nbsp;&nbsp;&nbsp; alert(this.color);<br>};</p>
<p>var oCar1 = new Car("red", 4, 23);<br>var oCar2 = new Car("blue", 3, 25);</p>
<p>oCar1.drivers.push("Matt");</p>
<p>alert(oCar1.drivers);&nbsp;&nbsp;&nbsp; //outputs "Mike,Sue,Matt"<br>alert(oCar2.drivers);&nbsp;&nbsp;&nbsp; //outputs "Mike,Sue"<br>现在就更像创建一般对象了。所有的非函数属性都有构造函数中创建，意味着又可用构造函数的参数赋予属性默认值了。因为只创建showColor()函数的一个实例，所以没有内存浪费。<br><br>5.动态原型方法<br>function Car(sColor, iDoors, iMpg) {<br>&nbsp;&nbsp;&nbsp; this.color = sColor;<br>&nbsp;&nbsp;&nbsp; this.doors = iDoors;<br>&nbsp;&nbsp;&nbsp; this.mpg = iMpg;<br>&nbsp;&nbsp;&nbsp; this.drivers = new Array("Mike", "Sue");</p>
<p>&nbsp;&nbsp;&nbsp; if (typeof Car._initialized == "undefined") {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Car.prototype.showColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Car._initialized = true;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><br>var oCar1 = new Car("red", 4, 23);<br>var oCar2 = new Car("blue", 3, 25);</p>
<p>oCar1.drivers.push("Matt");</p>
<p>alert(oCar1.drivers);&nbsp;&nbsp;&nbsp; //outputs "Mike,Sue,Matt"<br>alert(oCar2.drivers);&nbsp;&nbsp;&nbsp; //outputs "Mike,Sue"<br>动态原型方法的基本想法与混合的构造函数/原型方式相同，即在构造函数内定义非函数属性，而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。</p>
<p>6.混合工厂方式<br>这种方式通常是在不能应用前一种方式时的变通方法。它的目的是创建假构造函数，只返回另一种对象的新实例。<br>function Car() {<br>&nbsp;&nbsp;&nbsp; var tempcar = new Object;<br>&nbsp;&nbsp;&nbsp; tempcar.color = "red";<br>&nbsp;&nbsp;&nbsp; tempcar.doors = 4;<br>&nbsp;&nbsp;&nbsp; tempcar.mpg = 23;<br>&nbsp;&nbsp;&nbsp; tempcar.showColor = function () {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.color)<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;return tempcar;<br>}<br>与经典方式不同，这种方式使用new运算符，使它看起来像真正的构造函数。<br><br>7.采用哪种方式<br>&nbsp;&nbsp;&nbsp;如前所述，目前使用最广泛的是混合的构造函数/原型方式。些外，动态原型方法也很流行，在功能上与前者等价，可以采用这两种方式中的任何一种。<br><br>二、修改对象<br>1.创建新方法<br>可以用prototype属性为任何已有的类定义新方法，就像处理自己的类一样。<br>例：<br>Array.prototype.indexOf = function(vItem){<br>&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;this.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(vItem == this[i]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;retunr -1;<br>}<br>最后，如果想给ECMAScript中的每个本地对象添加新方法，必须在Object对象的prototype属性上定义它。<br><br>2.重定义已有方法<br>就像能给自己的类定义新方法一样，也可重定义已有的方法。函数名只是指向函数的指针，因此可以轻易地使它指向其他函数。<br>如<br>Function.prototype.toString = function(){<br>&nbsp;&nbsp;&nbsp;return "Function code hidden";<br>}<br>function sayHi(){<br>&nbsp;&nbsp;&nbsp;alert("hi");<br>}<br>alert(sayHi.toString());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//outputs "Function code hidden"</p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/111098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ilovezmh/" target="_blank">小祝</a> 2007-04-16 22:20 <a href="http://www.blogjava.net/ilovezmh/archive/2007/04/16/111098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>