﻿<?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-乖，别哭的薄壳</title><link>http://www.blogjava.net/ilovezmh/</link><description>～一份耕耘，一份收获~</description><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 10:27:33 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 10:27:33 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>6</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>7</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>关于复选框的验证与jsp取值</title><link>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121004.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Wed, 30 May 2007 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121004.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/121004.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121004.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/121004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/121004.html</trackback:ping><description><![CDATA[今天做一个类似邮件的多选操作时用到了复选框，有关验证与取值以前也做过，记的不是很清楚了，今天弄清白了，记录一下。<br><br><strong>表单如下：<br></strong>&lt;form name="form1" action="test.jsp" method="post" onsubmit="return checkData();"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="checkall1" type="checkbox" value="0" onClick="checkAllBox(this);"/&gt;全选&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="a"/&gt;A&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="b"/&gt;B&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="c"/&gt;C&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="d"/&gt;D&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="e"/&gt;E&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&lt;input name="answer" type="checkbox" value="f"/&gt;F&lt;br&gt;<br>&lt;/form&gt;<br><br><strong>全选及验证javascript如下：</strong><br>&lt;script type="text/javascript"&gt;<br>function checkAllBox(obj){<br>&nbsp;var answer= document.getElementsByName("answer");<br>&nbsp;if(obj.checked==true){<br>&nbsp;&nbsp;for(var i=0;i&lt;answer.length;i++){<br>&nbsp;&nbsp;&nbsp;answer[i].checked = true;<br>&nbsp;&nbsp;}<br>&nbsp;}else{<br>&nbsp;&nbsp;for(var i=0;i&lt;answer.length;i++){<br>&nbsp;&nbsp;&nbsp;answer[i].checked = false;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>function checkData(){&nbsp;<br>&nbsp;var answer= document.getElementsByName("answer");<br>&nbsp;var flag = false;<br>&nbsp;for(var i=0;i&lt;income.length;i++){<br>&nbsp;&nbsp;if(income[i].checked == true){<br>&nbsp;&nbsp;&nbsp;flag = true;<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;if(!flag){<br>&nbsp;&nbsp;alert("请至少选择一项");<br>&nbsp;}<br>&nbsp;return flag;<br>}<br>&lt;/script&gt;<br><br><strong>test.jsp中取值如下：</strong><br>String[] answer= request.getParameterValues("answer");//这里只取得了选中的项，如果没有选中任何一项，则为null<br>if(answer!=null){<br>&nbsp;&nbsp;&nbsp;for(String i:answer){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i);<br>&nbsp;&nbsp;&nbsp;}<br>}<br>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/121004.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-05-30 22:04 <a href="http://www.blogjava.net/ilovezmh/archive/2007/05/30/121004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp去缓存</title><link>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121000.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Wed, 30 May 2007 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121000.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/121000.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/05/30/121000.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/121000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/121000.html</trackback:ping><description><![CDATA[写了这么久了jsp，最常用的jsp头和去缓存代码要手写还一时还写不出来。。。留个记念了<br>&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%&gt;<br>&lt;%@ page&nbsp;import="java.util.*"%&gt;<br>&lt;%<br>&nbsp;//remove cache<br>&nbsp;response.setHeader("Pragma","No-cache");<br>&nbsp;response.setHeader("Cache-Control","no-cache");<br>&nbsp;response.setDateHeader("Expires", 0);<br>%&gt;
<img src ="http://www.blogjava.net/ilovezmh/aggbug/121000.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-05-30 21:48 <a href="http://www.blogjava.net/ilovezmh/archive/2007/05/30/121000.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>4</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>3</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><item><title>webwork学习笔记</title><link>http://www.blogjava.net/ilovezmh/archive/2007/03/24/106037.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Sat, 24 Mar 2007 04:18:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/03/24/106037.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/106037.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/03/24/106037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/106037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/106037.html</trackback:ping><description><![CDATA[我学习一样东西，总是喜欢把一些类似的东西放在一起，方便查询，类似于字典的形式。<br /><br />最近学习webwork，主要是《webwork in action》一书，以及一些其它的文档。书是看完了，webwork大致有所了解，还没有机会和时间去实<br /><br />践。记下了一些配置型的东西，方便以后查阅。还有很多东西没记录下来，以后实践的话，再逐步完善。<br /><br />文档还有点长，就用文件的形式了。<br /><br /><font style="BACKGROUND-COLOR: #ffffff"><a href="/Files/ilovezmh/webwork学习笔记.rar">下载地址</a></font><img src ="http://www.blogjava.net/ilovezmh/aggbug/106037.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-03-24 12:18 <a href="http://www.blogjava.net/ilovezmh/archive/2007/03/24/106037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>添加Eclipse插件的简单方法</title><link>http://www.blogjava.net/ilovezmh/archive/2007/03/12/103408.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Mon, 12 Mar 2007 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/03/12/103408.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/103408.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/03/12/103408.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/103408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/103408.html</trackback:ping><description><![CDATA[这几天下了很多Eclipse的插件，参考Myeclipse插件，发现了一个很方便简单的方法，方便安装和删除。<br /><br />Eclipse插件都会带有features和plugins这两个文件夹，一般的想法都会是直接把这两个文件添加到Eclipse中去。且不谈这样会不会成功，当你要删除它的时候，要找到它的文件都会很麻烦。<br /><br />下面介绍下我使用的方法，以jigloo_395（SWT/Swing的图形工具）为例。<br /><br />首先当然是下载jigloo_395.zip，解压后放到你想放置的位置，不用一定放在eclipse中，比如“D:\eclipse-plugs\jigloo_395”。<br /><br />然后在它下面新建一个文件夹命名为eclipse，再将features和plugins这两个文件夹拖进去。<br /><br />最后打开你安装的eclipse路径，比如“D:\eclipse”，打开links文件夹，新建文本文件，在里面输入“path=D:\\eclipse-plugs\\jigloo_395”，最后将文件重命名为“jigloo_395.link”。OK了。。。<br /><br />重新打开Eclipse,你会在窗口-&gt;首选项中看到这个插件了。具体用法请参考jigloo_395的使用文档。<br /><br /><img src ="http://www.blogjava.net/ilovezmh/aggbug/103408.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-03-12 22:48 <a href="http://www.blogjava.net/ilovezmh/archive/2007/03/12/103408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理：数据库设计中的14个技巧</title><link>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98396.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 06 Feb 2007 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98396.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/98396.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/98396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/98396.html</trackback:ping><description><![CDATA[
		<p>数据库设计中的14个技巧<br />                                       <br />数据库的设计有很多技巧，以下就介绍其中的几种，是许多人在大量的数据库分析与设计实践中，逐步总结出来的。对于这些经验的运用，读者不能生帮硬套，死记硬背，而要消化理解，实事求是，灵活掌握。<br />并逐步做到：在应用中发展，在发展中应用。<br /><font size="4"><strong> <br />1. 原始单据与实体之间的关系</strong></font><br /><br />可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单据对应多个实体，或多张原始单据对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后，对我们设计录入界面大有好处。 <br /><br />〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表：员工基本情况表、社会关系表、工作简历表。这就是“一张原始单据对应多个实体”的典型例子。 <br /><br /><font size="4"><strong>2. 主键与外键</strong></font><br /><br />一般而言，一个实体不能既无主键又无外键。在E－R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 <br />主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美国数据库设计专家说：“键，到处都是键，除了键之外，什么也没有”，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。 <br /><br /><font size="4"><strong>3. 基本表的性质</strong></font><br /><br />基本表与中间表、临时表不同，因为它具有如下四个特性： <br />(1) 原子性。基本表中的字段是不可再分解的。 <br />(2) 原始性。基本表中的记录是原始数据（基础数据）的记录。 <br />(3) 演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。 <br />(4) 稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。 <br />理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临时表区分开来。 <br /><br /><font size="4"><strong>4. 范式标准</strong></font><br /><br />基本表及其字段之间的关系, 应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间换时间的目的。 <br />〖例2〗：有一张存放商品的基本表，如表1所示。“金额”这个字段的存在，表明该表的设计不满足第三范式，因为“金额”可以由“单价”乘以“数量”得到，说明“金额”是冗余字段。但是，增加“金额”这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作法。 在Rose 2002中，规定列有两种类型：数据列和计算列。“金额”这样的列被称为“计算列”，而“单价”和“数量”这样的列被称为“数据列”。 <br />表1 商品表的表结构 <br />商品名称 商品型号 单价 数量 金额 <br />电视机 29吋 2,500 40 100,000 <br /><br /><font size="4"><strong>5. 通俗地理解三个范式</strong></font><br /><br />通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)： <br />第一范式：1NF是对属性的原子性约束，要求属性具有原子性，不可再分解； <br />第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一性； <br />第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。 <br />没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是：在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。 <br /><br /><font size="4"><strong>6. 要善于识别与正确处理多对多的关系</strong></font><br /><br />若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。<br /> <br />〖例3〗：在“图书馆信息系统”中，“图书”是一个实体，“读者”也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为“借还书”，它的属性为：借还时间、借还标志(0表示借书，1表示还书)，另外，它还应该有两个外键(“图书”的主键，“读者”的主键)，使它能与“图书”和“读者”连接。 <br /><br /><font size="4"><strong>7. 主键PK的取值方法</strong></font><br /><br />PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时，建议字段的个数不要太多，多了不但索引占用空间大，而且速度也慢。 <br /><br /><font size="4"><strong>8. 正确认识数据冗余</strong></font><br /><br />主键与外键在多表中的重复出现, 不属于数据冗余，这个概念必须清楚，事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余！而且是一种低级冗余，即重复性的冗余。高级冗余不是字段的重复出现，而是字段的派生出现。 <br />〖例4〗：商品中的“单价、数量、金额”三个字段，“金额”就是由“单价”乘以“数量”派生出来的，它就是冗余，而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性，因为同一数据，可能从不同时间、地点、角色上多次录入。因此，我们提倡高级冗余(派生性冗余)，反对低级冗余(重复性冗余)。 <br /><br /><font size="4"><strong>9. E－R图没有标准答案</strong></font><br /><br />信息系统的E－R图没有标准答案，因为它的设计与画法不是惟一的，只要它覆盖了系统需求的业务范围和功能内容，就是可行的。反之要修改E－R图。尽管它没有惟一的标准答案，并不意味着可以随意设计。好的E－图的标准是：结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。 <br /><br /><font size="4"><strong>10. 视图技术在数据库设计中很有用</strong></font><br /><br />与基本表、代码表、中间表不同，视图是一种虚表，它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口，是基表数据综合的一种形式, 是数据处理的一种方法，是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 <br />对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统，视图的作用更加重要。这些系统的基本表完成物理设计之后，立即在基本表上建立第一层视图，这层视图的个数和结构，与基本表的个数和结构是完全相同。并且规定，所有的程序员，一律只准在视图上操作。只有数据库管理员，带着多个人员共同掌握的“安全钥匙”，才能直接在基本表上操作。 <br /><br /><font size="4"><strong>11. 中间表、报表和临时表</strong></font><br /><br />中间表是存放统计数据的表，它是为数据仓库、输出报表或查询结果而设计的，有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的，存放临时记录，为个人所用。基表和中间表由DBA维护，临时表由程序员自己用程序自动维护。<br /> <br /><font size="4"><strong>12. 完整性约束表现在三个方面</strong></font> <br /><br />域的完整性：用Check来实现约束，在数据库设计工具中，对字段的取值范围进行定义时，有一个Check按钮，通过它定义字段的值城。 <br />参照完整性：用PK、FK、表级触发器来实现。 <br />用户定义完整性：它是一些业务规则，用存储过程和触发器来实现。 <br /><br /><font size="4"><strong>13. 防止数据库设计打补丁的方法是“三少原则” </strong></font><br /><br />(1) 一个数据库中表的个数越少越好。只有表的个数少了，才能说明系统的E－R图少而精，去掉了重复的多余的实体，形成了对客观世界的高度抽象，进行了系统的数据集成，防止了打补丁式的设计； <br />(2) 一个表中组合主键的字段个数越少越好。因为主键的作用，一是建主键索引，二是做为子表的外键，所以组合主键的字段个数少了，不仅节省了运行时间，而且节省了索引存储空间； <br />(3) 一个表中的字段个数越少越好。只有字段的个数少了，才能说明在系统中不存在数据重复，且很少有数据冗余，更重要的是督促读者学会“列变行”，这样就防止了将子表中的字段拉入到主表中去，在主表中留下许多空余的字段。所谓“列变行”，就是将主表中的一部分内容拉出去，另外单独建一个子表。这个方法很简单，有的人就是不习惯、不采纳、不执行。 <br /><br />数据库设计的实用原则是：在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念，综合观点，不能孤立某一个原则。该原则是相对的，不是绝对的。“三多”原则肯定是错误的。试想：若覆盖系统同样的功能，一百个实体(共一千个属性) 的E－R图，肯定比二百个实体(共二千个属性)的E－R图，要好得多。 <br /><br />提倡“三少”原则，是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成为应用数据库，将应用数据库集成为主题数据库，将主题数据库集成为全局综合数据库。集成的程度越高，数据共享性就越强，信息孤岛现象就越少，整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。 <br /><br />提倡“三少”原则的目的，是防止读者利用打补丁技术，不断地对数据库进行增删改，使企业数据库变成了随意设计数据库表的“垃圾堆”，或数据库表的“大杂院”，最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章，不计其数，导致企事业单位的信息系统无法维护而瘫痪。 <br /><br />“三多”原则任何人都可以做到，该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的原则，它要求有较高的数据库设计技巧与艺术，不是任何人都能做到的，因为该原则是杜绝用“打补丁方法”设计数据库的理论依据。 <br /><br /><font size="4"><strong>14. 提高数据库运行效率的办法</strong></font><br /><br />在给定的系统硬件和系统软件条件下，提高数据库系统的运行效率的办法是： <br />(1) 在数据库物理设计时，降低范式，增加冗余, 少用触发器, 多用存储过程。 <br />(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条)，复杂计算要先在数据库外面，以文件系统方式用C++语言计算处理完成之后，最后才入库追加到表中去。这是电信计费系统设计的经验。 <br />(3) 发现某个表的记录太多，例如超过一千万条，则要对该表进行水平分割。水平分割的做法是，以该表主键PK的某个值为界线，将该表的记录水平分割为两个表。若发现某个表的字段太多，例如超过八十个，则垂直分割该表，将原来的一个表分解为两个表。 <br />(4) 对数据库管理系统DBMS进行系统优化，即优化各种系统参数，如缓冲区个数。 <br />(5) 在使用面向数据的SQL语言进行程序设计时，尽量采取优化算法。 <br /><br />总之，要提高数据库的运行效率，必须从数据库系统级优化、数据库设计级优化、程序实现级优化，这三个层次上同时下功夫。 <br />关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF（第一范式），2NF（第二范式），3NF（第三范式）和BCNF，另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时，若能符合这几个范式，你就是数据库设计的高手。<br /> <br />第一范式（1NF）：在关系模式R中的每一个具体关系r中，如果每个属性值 都是不可再分的最小数据单位，则称R是第一范式的关系。例：如职工号，姓名，电话号码组成一个表（一个人可能有一个办公室电话 和一个家里电话号码） 规范成为1NF有三种方法： 一是重复存储职工号和姓名。这样，关键字只能是电话号码。 二是职工号为关键字，电话号码分为单位电话和住宅电话两个属性 三是职工号为关键字，但强制每条记录只能有一个电话号码。 以上三个方法，第一种方法最不可取，按实际情况选取后两种情况。 <br /><br />第二范式 （2NF）：如果关系模式R（U，F）中的所有非主属性都完全依赖于任意一个候选关键字，则称关系R 是属于第二范式的。 例：选课关系 SCI（SNO，CNO，GRADE，CREDIT）其中SNO为学号， CNO为课程号，GRADEGE 为成绩，CREDIT 为学分。 由以上条件，关键字为组合关键字（SNO，CNO） 在应用中使用以上关系模式有以下问题： <br />a.数据冗余，假设同一门课由40个学生选修，学分就 重复40次。 <br />b.更新异常，若调整了某课程的学分，相应的元组CREDIT值都要更新，有可能会出现同一门课学分不同。 <br />c.插入异常，如计划开新课，由于没人选修，没有学号关键字，只能等有人选修才能把课程和学分存入。 <br />d.删除异常，若学生已经结业，从当前数据库删除选修记录。某些门课程新生尚未选修，则此门课程及学分记录无法保存。 原因：非关键字属性CREDIT仅函数依赖于CNO，也就是CREDIT部分依赖组合关键字（SNO，CNO）而不是完全依赖。 解决方法：分成两个关系模式 SC1（SNO，CNO，GRADE），C2（CNO，CREDIT）。新关系包括两个关系模式，它们之间通过SC1中的外关键字CNO相联系，需要时再 进行自然联接，恢复了原来的关系 </p>
		<p>第三范式（3NF）：如果关系模式R（U，F）中的所有非主属性对任何候选关键字都不存在传递信赖， 则称关系R是属于第三范式的。 例：如S1（SNO，SNAME，DNO，DNAME，LOCATION） 各属性分别代表学号，姓名，所在系，系名称，系地址。 关键字SNO决定各个属性。由于是单个关键字，没有部分依赖的问题，肯定是2NF。但这关系肯定有大量的冗余，有关学生所在的几个属性DNO， DNAME，LOCATION将重复存储，插入，删除和修改时也将产生类似以上例的情况。 原因：关系中存在传递依赖造成的。即SNO -&gt; DNO。而DNO -&gt; SNO却不存在，DNO -&gt; LOCATION,因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -&gt; LOCATION实现的。也就是说，SNO不直接决定非主属性LOCATION。 解决目地：每个关系模式中不能留有传递依赖。 解决方法：分为两个关系 S（SNO，SNAME，DNO），D（DNO，DNAME，LOCATION） 注意：关系S中不能没有外关键字DNO。否则两个关系之间失去联系。</p>
		<p>BCNF： 如果关系模式R（U，F）的所有属性（包括主属性和非主属性）都不传递依赖于R的任何候选关键字，那么称关系R是属于BCNF的。或是关系模式R，如果每 个决定因素都包含关键字（而不是被关键字所包含），则RCNF的关系模式。 例：配件管理关系模式 WPE（WNO，PNO，ENO，QNT）分别表仓库号，配件号，职工号，数量。有以下条件 a.一个仓库有多个职工。 b.一个职工仅在一个仓库工作。 c.每个仓库里一种型号的配件由专人负责，但一个人可以管理几种配件。 d.同一种型号的配件可以分放在几个仓库中。 分析：由以上得 PNO 不能确定QNT，由组合属性（WNO，PNO）来决定，存在函数依赖（WNO，PNO）-&gt;ENO。由于每个仓库里的一种配件由专人负责，而一个人可以管理几种配件，所以有组合属性（WNO，PNO）才能确定负责人，有（WNO， PNO）-&gt; ENO。因为 一个职工仅在一个仓库工作，有ENO -&gt;WNO。由于每个仓库里的一种配件由专人负责，而一个职工仅在一个仓库工作，有 （ENO，PNO）-&gt; QNT。 找一下候选关键字，因为（WNO，PNO） -&gt; QNT，（WNO，PNO）-&gt; ENO ，因此（WNO，PNO）可以决定整个元组，是一个候选关键字。根据ENO-&gt;WNO，（ENO，PNO）-&gt;QNT，故（ENO，PNO） 也能决定整个元组，为另一个候选关键字。属性ENO，WNO，PNO均为主属性，只有一个非主属性QNT。它对任何一个候选关键字都是完全函数依赖的，并 且是直接依赖，所以该关系模式是3NF。 分析一下主属性。因为ENO-&gt;WNO，主属性ENO是WNO的决定因素，但是它本身不是关键字，只是组合关键字的一部分。这就造成主属性WNO对 另外一个候选关键字（ENO，PNO）的部 分依赖，因为（ENO，PNO）-&gt;ENO但反过来不成立，而P-&gt;WNO，故（ENO，PNO）-&gt; WNO 也是传递依赖。 虽然没有非主属性对候选关键辽的传递依赖，但存在主属性对候选关键字的传递依赖，同样也会带来麻烦。如一个新职工分配到仓库工作，但暂时处于实习阶段，没有独立负责对某些配件的管理任务。由于缺少关键字的一部分PNO而无法插入到该关系中去。又如某个人改成不管配件了去负责安全，则在删除配件的同时该职工 也会被删除。 解决办法：分成管理EP（ENO，PNO，QNT），关键字是（ENO，PNO）工作EW（ENO，WNO）其关键字是ENO 缺点：分解后函数依赖的保持性较差。如此例中，由于分解,函数依赖（WNO，PNO）-&gt; ENO 丢失了,因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现一部件由两个人或两个以上的人来同时管理。因此，分解之后的关系模式降低了部分完整性约束。 </p>
		<p>一个关系分解成多个关系，要使得分解有意义，起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据 本身，而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度，但是分解的同时必须考虑两个问题：无损联接性和保持函 数依赖。有时往往不可能做到既有无损联接性，又完全保持函数依赖。需要根据需要进行权衡。 </p>
		<p>1NF直到BCNF的四种范式之间有如下关系： BCNF包含了3NF包含2NF包含1NF </p>
		<p>小结：目地：规范化目的是使结构更合理，消除存储异常，使数据冗余尽量小，便于插入、删除和更新原则：遵从概念单一化 "一事一地"原则，即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。 方法：将关系模式投影分解成两个或两个以上的关系模式。 要求：分解后的关系模式集合应当与原关系模式"等价"，即经过自然联接可以恢复原关系而不丢失信息，并保持属性间合理的联系。 </p>
		<p>注意： 一个关系模式结这分解可以得到不同关系模式集合，也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实 现。其根本目标是节省存储空间，避免数据不一致性，提高对关系的操作效率，同时满足应用需求。实际上，并不一定要求全部模式都达到BCNF不可。有时故意 保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高，查询频度极高的数据库系统更是如此。 </p>
		<p>在关系数据库中，除了函数依赖之外还有多值依赖，联接依赖的问题，从而提出了第四范式，第五范式等更高一级的规范化要求。</p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/98396.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-02-06 17:44 <a href="http://www.blogjava.net/ilovezmh/archive/2007/02/06/98396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用sql实现递归</title><link>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98391.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 06 Feb 2007 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98391.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/98391.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98391.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/98391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/98391.html</trackback:ping><description><![CDATA[
		<p>
				<strong>MS SQL Server中</strong>
				<br />
				<br />tb_city表结构如下<br />id      name      parentid<br />1      湖北      0<br />2      湖南      0<br />3      武汉      1<br />4      仙桃      1<br />5      长沙      2<br />6      蔡甸      3<br /><br />定义函数<br />create function c_tree(@initid int)/*定义函数c_tree，输入参数为初始节点id*/<br />returns @t table(id int,name varchar(100),parentid int,lev int)/*定义表t用来存放取出的数据*/<br />begin <br />  declare @i int/*标志递归级别*/<br />  set @i=1<br />  insert @t select id,name,parentid,@i from tb_city where id=@initid<br />  while @@rowcount&lt;&gt;0<br />  begin<br />  set @i=@i+1<br />  insert @t select a.id,a.name,a.parentid,@i from tb_city as a,@t as b<br /> where b.id=a.parentid and b.lev=@i-1<br />  end<br />return<br />end<br /><br />执行<br />使用函数<br />select * from c_tree(1) /*取湖北下面的子节点*/<br /><br /><strong>Oracle中的实现</strong><br /><br />select *  from TB_CITY<br />/*此处可写WHERE语句限制*/ <br />start with ID=1<br />connect by prior ID=PARENTID<br /></p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/98391.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-02-06 17:24 <a href="http://www.blogjava.net/ilovezmh/archive/2007/02/06/98391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用jexcel读写excel的.xls文件的例子</title><link>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98270.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Tue, 06 Feb 2007 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98270.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/98270.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/02/06/98270.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/98270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/98270.html</trackback:ping><description><![CDATA[
		<p>有时候我们会需要做excel的报表,下面这个例子详细的给出了读写及定义样式的方法。<br />(<a href="/Files/ilovezmh/jexcelapi.rar" target="_blank">jexcel下载</a>)<br />package com.test;</p>
		<p>import java.io.File;<br />import java.io.IOException;</p>
		<p>import jxl.Cell;<br />import jxl.Sheet;<br />import jxl.Workbook;<br />import jxl.format.Border;<br />import jxl.format.BorderLineStyle;<br />import jxl.format.Colour;<br />import jxl.read.biff.BiffException;<br />import jxl.write.Label;<br />import jxl.write.WritableCellFormat;<br />import jxl.write.WritableFont;<br />import jxl.write.WritableSheet;<br />import jxl.write.WritableWorkbook;<br />import jxl.write.WriteException;<br />import jxl.write.biff.RowsExceededException;</p>
		<p>/**<br /> * <br /> * CopyRight (C) <a href="/ilovezmh">www.blogjava.net/ilovezmh</a>  All rights reserved.&lt;p&gt;<br /> * <br /> * WuHan Inpoint Information Technology Development,Inc.&lt;p&gt;<br /> * <br /> * Author zhu&lt;p&gt;<br /> *<br /> * @version 1.0    2007-2-6<br /> *<br /> * &lt;p&gt;Base on : JDK1.5&lt;p&gt;<br /> *<br /> */</p>
		<p>public class JexcelSample {<br /> <br /> /**<br />  * 写excel文件<br />  *<br />  */<br /> public void writeExc(File filename){<br />  WritableWorkbook wwb = null;<br />  try <br />  { <br />   wwb = Workbook.createWorkbook(filename);   <br />  }<br />  catch (Exception e){ <br />   e.printStackTrace(); <br />  } <br />  <br />  //创建Excel工作表 <br />  WritableSheet ws = wwb.createSheet("通讯录", 0);//创建sheet<br />  try {<br />   ws.mergeCells(0, 0, 2, 1);//合并单元格(左列，左行，右列，右行)从第1行第1列到第2行第3列<br />   Label header = new Label(0, 0, "通讯录(191026班)", getHeader()); <br />   ws.addCell(header);//写入头<br />   Label l = new Label(0, 2, "姓名", getTitle());//第3行<br />   ws.addCell(l);<br />   l = new Label(1, 2, "电话", getTitle());<br />   ws.addCell(l);<br />   l = new Label(2, 2, "地址", getTitle());<br />   ws.addCell(l);<br />   l = new Label(0, 3, "小祝", getNormolCell());//第4行<br />   ws.addCell(l);<br />   l = new Label(1, 3, "1314***0974", getNormolCell());<br />   ws.addCell(l);<br />   l = new Label(2, 3, "武汉武昌", getNormolCell());<br />   ws.addCell(l);<br />   l = new Label(0, 4, "小施", getNormolCell());//第5行<br />   ws.addCell(l);<br />   l = new Label(1, 4, "1347***5057", getNormolCell());<br />   ws.addCell(l);<br />   l = new Label(2, 4, "武汉武昌", getNormolCell());<br />   ws.addCell(l);<br />   ws.setColumnView(0,20);//设置列宽<br />   ws.setColumnView(1,20);<br />   ws.setColumnView(2,40);<br />   ws.setRowView(0,400);//设置行高<br />   ws.setRowView(1,400);<br />   ws.setRowView(2,500);<br />   ws.setRowView(3,500);<br />   ws.setRowView(4,500);<br />  } catch (RowsExceededException e1) {<br />   e1.printStackTrace();<br />  } catch (WriteException e1) {<br />   e1.printStackTrace();<br />  }<br />  <br />  //输出流<br />  try {<br />   wwb.write();<br />  } catch (IOException ex) {<br />   // TODO 自动生成 catch 块<br />   ex.printStackTrace();<br />  }<br />  //关闭流<br />  try {<br />   wwb.close();<br />  } catch (WriteException ex) {<br />   // TODO 自动生成 catch 块<br />   ex.printStackTrace();<br />  } catch (IOException ex) {<br />   // TODO 自动生成 catch 块<br />   ex.printStackTrace();<br />  }<br />  //outStream.close();<br />  System.out.println("写入成功！\n");<br /> }<br /> <br /> public void readExc(File filename) throws BiffException, IOException{</p>
		<p>    Workbook wb = Workbook.getWorkbook(filename);<br />    Sheet s = wb.getSheet(0);//第1个sheet<br />    Cell c = null;<br />    int row = s.getRows();//总行数<br />    int col = s.getColumns();//总列数<br />    for(int i=0;i&lt;row;i++){<br />     for(int j=0;j&lt;col;j++){<br />      c = s.getCell(j,i);<br />      System.out.print(c.getContents()+"  ");<br />     }<br />     System.out.println();<br />    }   <br /> }<br /> <br /> /**<br />  * 设置头的样式<br />  * @return <br />  */<br /> public static WritableCellFormat getHeader(){<br />  WritableFont font = new  WritableFont(WritableFont.TIMES, 24 ,WritableFont.BOLD);//定义字体<br />  try {<br />   font.setColour(Colour.BLUE);//蓝色字体<br />  } catch (WriteException e1) {<br />   // TODO 自动生成 catch 块<br />   e1.printStackTrace();<br />  }<br />  WritableCellFormat format = new  WritableCellFormat(font);<br />  try {<br />   format.setAlignment(jxl.format.Alignment.CENTRE);//左右居中<br />   format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//上下居中<br />   format.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK);//黑色边框<br />   format.setBackground(Colour.YELLOW);//黄色背景<br />  } catch (WriteException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  return format;<br /> }<br /> <br /> /**<br />  * 设置标题样式<br />  * @return<br />  */<br /> public static WritableCellFormat getTitle(){<br />  WritableFont font = new  WritableFont(WritableFont.TIMES, 14);<br />  try {<br />   font.setColour(Colour.BLUE);//蓝色字体<br />  } catch (WriteException e1) {<br />   // TODO 自动生成 catch 块<br />   e1.printStackTrace();<br />  }<br />  WritableCellFormat format = new  WritableCellFormat(font);<br />  <br />  try {<br />   format.setAlignment(jxl.format.Alignment.CENTRE);<br />   format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);<br />   format.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK);<br />  } catch (WriteException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  return format;<br /> }<br /> <br /> /**<br />  * 设置其他单元格样式<br />  * @return<br />  */<br /> public static WritableCellFormat getNormolCell(){//12号字体,上下左右居中,带黑色边框<br />  WritableFont font = new  WritableFont(WritableFont.TIMES, 12);<br />  WritableCellFormat format = new  WritableCellFormat(font);<br />  try {<br />   format.setAlignment(jxl.format.Alignment.CENTRE);<br />   format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);<br />   format.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.BLACK);<br />  } catch (WriteException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  return format;<br /> }<br /> <br /> public static void main(String[] args) throws IOException, BiffException{<br />  JexcelSample js = new JexcelSample();<br />  File f = new File("D:\\address.xls");<br />  f.createNewFile();<br />  js.writeExc(f);<br />  js.readExc(f);<br /> }</p>
		<p>}<br /><br />生成的excel表格如下：<br /><img src="http://www.blogjava.net/images/blogjava_net/ilovezmh/19805/r_address.jpg" /></p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/98270.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-02-06 13:21 <a href="http://www.blogjava.net/ilovezmh/archive/2007/02/06/98270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java读配置文件(xml、property)的简单例子</title><link>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97326.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Thu, 01 Feb 2007 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97326.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/97326.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97326.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/97326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/97326.html</trackback:ping><description><![CDATA[<p><font size="4"><strong>读property文件的例子：<br />
</strong></font><br />
package com.test;</p>
<p>import java.io.InputStream;<br />
import java.util.Properties;</p>
<p>/**<br />
&nbsp;* <br />
&nbsp;* CopyRight (C) <a href="http://www.blogjava.net/ilovezmh">www.blogjava.net/ilovezmh</a>&nbsp; All rights reserved.&lt;p&gt;<br />
&nbsp;* <br />
&nbsp;* WuHan Inpoint Information Technology Development,Inc.&lt;p&gt;<br />
&nbsp;* <br />
&nbsp;* Author zhu&lt;p&gt;<br />
&nbsp;*<br />
&nbsp;* @version 1.0&nbsp;&nbsp;&nbsp; 2007-2-2<br />
&nbsp;*<br />
&nbsp;* &lt;p&gt;Base on : JDK1.5&lt;p&gt;<br />
&nbsp;*<br />
&nbsp;*/</p>
<p>public class ReadPro {<br />
&nbsp;<br />
&nbsp;public String getPara(String fileName) {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;Properties prop= new Properties();<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;//ClassLoader cl = this.getClass().getClassLoader();&nbsp;<br />
&nbsp;&nbsp;&nbsp;//InputStream is = cl.getResourceAsStream(fileName);<br />
&nbsp;&nbsp;&nbsp;InputStream is = this.getClass().getResourceAsStream(fileName);<br />
&nbsp;&nbsp;&nbsp;prop.load(is);<br />
&nbsp;&nbsp;&nbsp;if(is!=null) is.close();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;catch(Exception e) {<br />
&nbsp;&nbsp;&nbsp;System.out.println(e+"file "+fileName+" not found");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return prop.getProperty("ip");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;ReadPro pro = new ReadPro();<br />
&nbsp;&nbsp;System.out.println(pro.getPara("ip.property"));<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;//-----------------------------------<br />
&nbsp;//ip.property内容如下：<br />
&nbsp;//ip:192.168.0.1<br />
&nbsp;<br />
}</p>
<p><br />
注意：上面使用Class和ClassLoader都是可以的，只是使用的时候路径需要注意下</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Class是把class文件所在的目录做为根目录，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;ClassLoader是把加载所有classpath的目录为根目录，也就是&#8220;..../classes&#8221;。</p>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;如：</span></p>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;使用ClassLoader：this.getClass().getClassLoader().getResourceAsStream("com/test/ip.property");</span></p>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;使用Class：this.getClass().getResourceAsStream("/com/test/ip.property");</span></p>
<p><span style="color: #000000">&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></p>
<p><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.getClass().getResourceAsStream("ip.property");</span></p>
<p><br />
<font size="4"><strong>用jdom读xml文件的例子：<br />
</strong></font>(<a href="http://www.blogjava.net/Files/ilovezmh/jdom-1.0.rar" target="_blank">jdom下载</a>)<br />
<br />
package com.test;<br />
import java.io.*;<br />
import java.util.*;</p>
<p>import org.jdom.*;<br />
import org.jdom.input.*;<br />
import org.jdom.output.XMLOutputter;<br />
import org.jdom.output.Format;<br />
<br />
/**<br />
&nbsp;* <br />
&nbsp;* CopyRight (C)&nbsp;<a href="http://www.blogjava.net/ilovezmh">www.blogjava.net/ilovezmh</a> All rights reserved.&lt;p&gt;<br />
&nbsp;* <br />
&nbsp;* WuHan Inpoint Information Technology Development,Inc.&lt;p&gt;<br />
&nbsp;* <br />
&nbsp;* Author zhu&lt;p&gt;<br />
&nbsp;*<br />
&nbsp;* @version 1.0&nbsp;&nbsp;&nbsp; 2007-2-1<br />
&nbsp;*<br />
&nbsp;* &lt;p&gt;Base on : JDK1.5&lt;p&gt;<br />
&nbsp;*<br />
&nbsp;*/<br />
&nbsp;public class XMLReader {<br />
&nbsp; <br />
&nbsp; public void createXML(){<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Element root=new Element("books");<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Document doc=new Document(root);<br />
&nbsp;&nbsp; Element book1 = new Element("book");<br />
&nbsp;&nbsp; //Element name1=new Element("name");<br />
&nbsp;&nbsp; //name1.setAttribute(new Attribute("hot","true"));<br />
&nbsp;&nbsp; //name1.addContent("程序员");<br />
&nbsp;&nbsp; //Element price1=new Element("price");<br />
&nbsp;&nbsp; //price1.addContent("10.00");<br />
&nbsp;&nbsp; //book1.addContent(name1);<br />
&nbsp;&nbsp; //book1.addContent(price1);&nbsp;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Element book2 = new Element("book");<br />
&nbsp;&nbsp; //Element name2=new Element("name");<br />
&nbsp;&nbsp; //name2.setAttribute(new Attribute("hot","false"));<br />
&nbsp;&nbsp; //name2.addContent("读者");<br />
&nbsp;&nbsp; //Element price2=new Element("price");<br />
&nbsp;&nbsp; //price2.addContent("3.00");<br />
&nbsp;&nbsp; //book2.addContent(name2);<br />
&nbsp;&nbsp; //book2.addContent(price2);<br />
&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp; book1.addContent(new Element("name").addContent("程序员").setAttribute("hot","true"));<br />
&nbsp;&nbsp; book1.addContent(new Element("price").addContent("10.00"));<br />
&nbsp;&nbsp; book2.addContent(new Element("name").addContent("青年文摘").setAttribute("hot","false"));<br />
&nbsp;&nbsp; book2.addContent(new Element("price").addContent("3.00"));<br />
&nbsp;&nbsp; root.addContent(book1);<br />
&nbsp;&nbsp; root.addContent(book2);<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; try<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; XMLOutputter outer=new XMLOutputter(Format.getPrettyFormat().setEncoding("gb2312"));<br />
&nbsp;&nbsp;&nbsp; outer.output(doc,new FileOutputStream("book.xml"));<br />
&nbsp;&nbsp; }catch(IOException e){<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; public void readXML() throws FileNotFoundException, IOException{<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Document myDoc=null;<br />
&nbsp;&nbsp; try<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; SAXBuilder sb=new SAXBuilder();<br />
&nbsp;&nbsp;&nbsp; myDoc=sb.build(new FileInputStream("book.xml"));<br />
&nbsp;&nbsp; }catch(JDOMException e){<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }catch(NullPointerException e){<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Element root=myDoc.getRootElement(); //先得到根元素<br />
&nbsp;&nbsp; List books=root.getChildren();//root.getChildren("book");&nbsp;<br />
&nbsp;&nbsp; for (Iterator iter1 = books.iterator();iter1.hasNext(); ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element book = (Element) iter1.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("bookname:"+book.getChild("name").getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("hot:"+book.getChild("name").getAttributeValue("hot"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("price:"+book.getChild("price").getText());<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp; public static void main(String args[]) throws FileNotFoundException, IOException {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; XMLReader x=new XMLReader();<br />
&nbsp;&nbsp; x.createXML();<br />
&nbsp;&nbsp; x.readXML();</p>
<p>&nbsp;}</p>
<p>}<br />
<br />
生成的book.xml文件如下:<br />
&lt;?xml version="1.0" encoding="gb2312"?&gt;<br />
&lt;books&gt;<br />
&nbsp; &lt;book&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name hot="true"&gt;程序员&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;price&gt;10.00&lt;/price&gt;<br />
&nbsp; &lt;/book&gt;<br />
&nbsp; &lt;book&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name hot="false"&gt;青年文摘&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;price&gt;3.00&lt;/price&gt;<br />
&nbsp; &lt;/book&gt;<br />
&lt;/books&gt;<br />
</p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/97326.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-02-01 17:17 <a href="http://www.blogjava.net/ilovezmh/archive/2007/02/01/97326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用jdbc操作数据库的简单例子</title><link>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97247.html</link><dc:creator>小祝</dc:creator><author>小祝</author><pubDate>Thu, 01 Feb 2007 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97247.html</guid><wfw:comment>http://www.blogjava.net/ilovezmh/comments/97247.html</wfw:comment><comments>http://www.blogjava.net/ilovezmh/archive/2007/02/01/97247.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/ilovezmh/comments/commentRss/97247.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ilovezmh/services/trackbacks/97247.html</trackback:ping><description><![CDATA[
		<p>一个简单的用jdbc操作数据库的例子,有时候我们处理一些小问题的时候会发现很有用.<br /><br />这是用来从一个Access的数据库文件area.mdb(一个全国省份城市的数据库)中提取出我需要的信息到MS SQLServer 2000数据库里的例子.<br /><br />package com.test;</p>
		<p>import java.io.IOException;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Statement;</p>
		<p>/**<br /> * <br /> * CopyRight (C) <a href="/ilovezmh">http://www.blogjava.net/ilovezmh</a>  All rights reserved.&lt;p&gt;<br /> * <br /> * WuHan Inpoint Information Technology Development,Inc.&lt;p&gt;<br /> * <br /> * Author zhu&lt;p&gt;<br /> *<br /> * @version 1.0    2007-1-17<br /> *<br /> * &lt;p&gt;Base on : JDK1.5&lt;p&gt;<br /> *<br /> */</p>
		<p>public class City {<br /> <br /> static String driver1="sun.jdbc.odbc.JdbcOdbcDriver";<br /> static String driver2="net.sourceforge.jtds.jdbc.Driver";<br /> static String url1="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\TDdownload\\area\\area.mdb";<br /> static String url2="jdbc:jtds:sqlserver://localhost:1433/test;SelectMethod=cursor;characterEncoding=GBK";<br /> <br /> public static void main(String arg[]) throws IOException,SQLException{<br />  <br />  <br />  Connection conn1=null;<br />  Connection conn2=null;<br />  Statement ps1=null;<br />  //Statement ps2=null;<br />  ResultSet rs1=null;<br />  //ResultSet rs2=null;<br />  String sql1=null;<br />  String sql2=null;<br />  PreparedStatement pstmt =null;<br />  <br />  try{<br />   Class.forName(driver1);<br />   Class.forName(driver2);<br />   conn1 = DriverManager.getConnection(url1,"","");<br />   conn2= DriverManager.getConnection(url2,"sa","sa");<br />   ps1 = conn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);<br />   //ps2 = conn2.createStatement();<br />  }<br />  catch(ClassNotFoundException e){<br />   System.out.print(e);<br />  } <br />  catch (SQLException e) {<br />   // TODO 自动生成 catch 块<br />   e.printStackTrace();<br />  }<br />  <br />  try{   <br />   sql1="select * from area";<br />   rs1 = ps1.executeQuery(sql1);<br />   sql2 = "insert into tbcity(code,name,parentid,type) values (?,?,?,?)";<br />   pstmt=conn2.prepareStatement(sql2);<br />   <br />   int code=0;<br />   int parentid=0;<br />   String name=new String();<br />   while(rs1.next()){    <br />    code=rs1.getInt(2);<br />    name=rs1.getString(3);<br />    parentid=rs1.getInt(4);<br />    //sql2="insert into TBCITY(code,name,parentid,type) values ("+code+",'"+name+"',"+parentid+",3)";<br />    //ps2.executeUpdate(sql2);<br />    pstmt.setInt(1,code); <br />    pstmt.setString(2, name);<br />    pstmt.setInt(3,parentid);<br />    pstmt.setInt(4, 3);<br />    pstmt.addBatch();<br />   }    <br />   pstmt.executeBatch();    <br />     <br />   System.out.println("转换完成!谢谢使用");<br />   ps1.close();<br />   //ps2.close();<br />   pstmt.close();<br />   conn1.close();<br />   conn2.close();<br />  }<br />  catch(Exception e){<br />   System.out.print(e);<br />  }<br />  <br /> }<br /> <br />}<br /></p>
<img src ="http://www.blogjava.net/ilovezmh/aggbug/97247.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-02-01 14:09 <a href="http://www.blogjava.net/ilovezmh/archive/2007/02/01/97247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>