﻿<?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/kiant/</link><description>有才而性缓定属大才，有智而气和斯为大智。人偏狭我受之以宽容，人险仄我持之以坦荡。缓事宜急干，敏则有功；急事宜缓办，忙则多措。
--李叔同</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:01:48 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:01:48 GMT</pubDate><ttl>60</ttl><item><title>搬家，新地址 http://www.cnblogs.com/kiant71/</title><link>http://www.blogjava.net/kiant/articles/324626.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sun, 27 Jun 2010 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/324626.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/324626.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/324626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/324626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/324626.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/kiant/aggbug/324626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-06-27 22:40 <a href="http://www.blogjava.net/kiant/articles/324626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(六) DOM、Ajax及其数据</title><link>http://www.blogjava.net/kiant/articles/322267.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sun, 30 May 2010 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/322267.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/322267.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/322267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/322267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/322267.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、DOM<br />
</a><a href="#2">2、节点属性和方法</a><br />
<a href="#3">3、Ajax安全和工作区</a><br />
<a href="#4">4、Ajax数据：XML或 JSON（JavaScript对象符号）</a><br />
<br />
<br />
<br />
<br />
<a id="1" name="1"></a><br />
<strong>1、DOM</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 W3C关于 DOM的规范中，将 document元素描述为一个节点(node)集合，他们之间是以有层次的树形结构连接的。你不仅可以从树上读取节点，还可以删除或创建新的节点。<br />
<br />
#document<br />
html<br />
&nbsp; head<br />
&nbsp;&nbsp;&nbsp; title<br />
&nbsp; body<br />
&nbsp;&nbsp;&nbsp; h1<br />
&nbsp;&nbsp;&nbsp; div<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #text<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #text
<hr color="#3366ff" size="1" />
<br />
<a id="2" name="2"></a><br />
<strong>2、节点属性和方法</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于文档树上的每个节点都拥有 DOM(Core)的 Node对象中定义的基本属性和基本方法集。Node对象的属性主要包括：<br />
<br />
nodeName，对象名称，如 head元素的名称就是 HEAD；<br />
nodeValue，如果不是一个元素，则返回对象值；<br />
nodeType，用数字表示的节点类型；<br />
parentNode，当前节点的父节点；<br />
childNodes，由其子节点组成的 NodeList，前提是存在子节点；<br />
firstChild，由子节点组成的 NodeList中的第一个节点；<br />
lastChild，由子节点组成的 NodeList中的最后一个节点；<br />
previousSibling，如果当前节点是位于 NodeList中的子节点，那么它表示的就是该列表中的前一个节点；<br />
nextSibling，如果当前节点是位于 NodeList中的子节点，那么它表示的就是该列表的下一个节点；<br />
attributes，一个 NamedNodeMap，它是以键/值对形式表示的，是该元素的属性列表；<br />
ownerDocument，拥有的 document对象，当你拥有多个 document对象时它比较有用；<br />
namespaceURI，命名空间的 URI，如果有的话，他是针对节点的；<br />
Prefix，命名空间的前缀，如果有的话，它是针对节点的；<br />
localName，如果指定了 namespaceURI的话，它表示的是节点的本地名。
<hr color="#3366ff" size="1" />
<br />
<a id="3" name="3"></a><br />
<strong>3、Ajax安全和工作区</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 Ajax遵循 JavaScript中相同源、相同域的规则：在 Web页面中只能调用相同服务器（相同域）的 Web服务；也就是说：服务器端页面与服务器发送请求的页面处于相同的服务器、相同的域中。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 但是对于 Ajax程序而言，向本地服务器端请求一个 Web服务，然后接收本地服务器的返回信息即可。它并不关心本地 Web服务实际上是否通过访问远程 Web服务实现的。
<hr color="#3366ff" size="1" />
<br />
<a id="4" name="4"></a><br />
<strong>4、Ajax数据：XML或 JSON（JavaScript对象符号）</strong><br />
<br />
<br />
<strong>XML格式的 Ajax应答</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 好处是比简单的字符串或 HTML片段更多元。另外，你还可以向对待 Web页面元素那样，直接通过 DOM方法来操作 Ajax调用返回的 XML格式应答。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 确保在服务器端应用程序在返回数据时设置了正确的数据 MINE类型 text/xml，然后通过 XMLHttpRequest对象的 responseXML容器来获取应答信息。<br />
<br />
<br />
<strong>JSON</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; JSON是一种&#8220;轻量级的数据交换格式&#8221;。和一组由逗号分开的字符串，以及处理复杂（成本高昂）的 XML相比，JSON是一种很容易将服务器端数据结构转成 JavaScript对象的数据格式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; JSON实际上就是使用 JavaScript语法定义的对象，一个对象的语法包括一对大括号以及其中的成员：<br />
&nbsp;&nbsp;&nbsp;&nbsp; object{ } or object { string : value ...}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于数组而言，他是由一组元素加上一对方括号组成的：<br />
&nbsp;&nbsp;&nbsp;&nbsp; array[] or array[ value, value, value, ..., value ]<br />
<br />
注：在 JavaScript可以用单引号或双引号来引用字符串，而 JSON只支持双引号。<br />
<br />
示例，在 PHP脚本中使用简单的 JSON<br />
$result = '[ { "value" : "stlou", "title" : "St. Louis" }, ' .<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp; { "value" : "kc" , "title" : "Kansas City" } ]';<br />
<br />
<br />
<strong>JSON对象</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 http://www.json.org/js.html上可以找到一个 JSON JavaScript程序库，它提供了一些基于该程序库的 JSON对象。包含了直接访问 JSON对象的静态方法：<br />
JSON.parse，基于指定的 JSON格式字符串创建一个 JavaScript对象；<br />
JSON.stringify，将一个 JavaScript对象序列化成一个 JSON格式的字符串。<br />
<br />
<br />
JSON 示例1：<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: #008000">//</span><span style="color: #008000">对&nbsp;JSON字符串进行&#8220;计算&#8221;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;JSON.parse(xmlHttpObj.responseText);<br />
<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;citySelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">citySelection</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">处理从&nbsp;JSON对象返回的数据</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">response.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;response[i].title;<br />
&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;response[i].value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;citySelection.options[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(name,&nbsp;value);<br />
}</span></div>
<br />
<br />
JSON示例2：
<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: #008000">//</span><span style="color: #008000">从服务器获得的&nbsp;JSON对象实例：</span><span style="color: #008000"><br />
</span><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">title</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Appletini</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ingredients</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;[&nbsp;{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ingredient</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1&nbsp;ounce&nbsp;vodka</span><span style="color: #000000">"</span><span style="color: #000000">},<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: #000000">"</span><span style="color: #000000">ingredient</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1/2&nbsp;ounce&nbsp;Sour&nbsp;Apple&nbsp;Pucker&nbsp;or&nbsp;apple&nbsp;schnapps&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">}&nbsp;],<br />
&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">instruction</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Mix&nbsp;vodka&nbsp;and&nbsp;schnapps&nbsp;in&nbsp;a&nbsp;glass&nbsp;filled&nbsp;with&nbsp;ice.</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}<br />
<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">============================================================</span><span style="color: #008000"><br />
//</span><span style="color: #008000">处理&nbsp;JSON数据</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #008000">//</span><span style="color: #008000">创建对象</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;recipeObj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;JSON.parse(xmlhttp.responseText);<br />
<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;recipe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('div');<br />
recipe.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'recipe';<br />
recipe.className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'recipe';<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">添加标题</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;title&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;recipeObj['title'];<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;titleNode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.creteElement('h3');<br />
titleNode.appendChild(document.createTextNode(title));<br />
recipe.appendChild(titleNode);<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">添加配方成分</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;ingredients&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;recipeObj.ingredients;<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">ingredients.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;item&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ingredients[i].ingredient;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
}<br />
<br />
<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
body[</span><span style="color: #000000">0</span><span style="color: #000000">].appendChild(recipe);</span></div>
 <img src ="http://www.blogjava.net/kiant/aggbug/322267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-30 11:17 <a href="http://www.blogjava.net/kiant/articles/322267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(五) 浏览器对象、cookie</title><link>http://www.blogjava.net/kiant/articles/322244.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sat, 29 May 2010 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/322244.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/322244.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/322244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/322244.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/322244.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、window对象</a><br />
<a href="#2">2、同源安全策略</a><br />
<a href="#3">3、cookie</a><br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器对象模型（BOM）是一组从浏览器上下文继承而来的对象，这也是绝大多数 JavaScript应用程序中函数运行的上下文。有时它也被称之为 DOM Level 0，或者就叫 DOM。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOM是一组有限的公共 Web对象，也是一个层次化的对象集，每个层次上的对象都可以通过它们的父对象来访问，比如 window[navigator, location, frames, screen, history, document[forms, cookie, link/anchors, images, embeds/plug-ins, all]]。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;访问对象时，你可以：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var theImage = document.form[0].elements["someelement"].value;<br />
<br />
<a id="1" name="1"></a><br />
<strong>1、window对象<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器的 window对象封装了整个浏览器环境，包括 window的"chrome"（组成浏览器窗体的通用组件）、实际的 Web页面，以及页面中的事件。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过 window可以手动设置浏览器状态条上的状态，执行打开一个新窗口、重新调整已显示窗口的大小、关闭窗口等操作。不过随着动态 Web效果和 Ajax的流行，这种弹出式窗口越来不被喜欢。<br />
<br />
window对象的方法和属性可以分成4类：<br />
<br />
<strong>a. 创建新窗口，维护现有窗口行为</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;弹出式对话框：alert、confirm和 prompt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建自定义窗口：window.open()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;维护窗口：通过窗口的引用能够完成该窗口的维护，要维护父窗口则使用关键字 opener，要维护包含当前运行脚本的窗口，则应该使用关键字 self。<br />
<br />
<br />
<strong>b. 在窗口中创建带分区的文档（帧和iframes）<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame对象定义了以下元素：parent、length和 name。对于跨帧通信而言，name和 parent属性特别重要。其父元素 frameset（帧集，包括帧的窗口）可以通过每个帧的名字访问所有子帧（也可以通过帧数组，以对象数量作为索引值）；每个帧都可以通过通用的关键字 parent来访问该帧集。兄弟帧元素之间可以通过 parent和对方的 name属性来访问。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和标准的帧不一样，iframe是内嵌在页面中的。你可以为其指定高度和宽度，如果将它们都设置为0，那么它就将被隐藏起来。iframe会把它嵌入到的页面视为自己的父元素，这也是它和更高层页面进行通信的方法。通常，你可以使用 document的 getElementById方法来访问它，也可以使用 target属性载入其内容。<br />
<br />
<br />
<strong>c. 定时器的创建和控制<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有两类定时器：一类是一次性的，另一类是周期性使用的。两种定时器都能取消，一次性定时器方法只会被调用一次。<br />
<br />
要想创建一个不重复触发的定时器，可以使用 setTimeout方法：<br />
var tmOut = setTimeout("func", 5000, "param1", param2,,,,, paramn);<br />
<br />
如果想清除这个定时器，可以使用 clearTimeout方法：<br />
clearTimeout(tmOut);<br />
<br />
如果你想周期性地使用这个定时器，那么应调用 setInterval方法：<br />
var tmOut = setInterval("functionName", 5000);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同样，如果想暂停或取消这个周期性定时器，可以使用 clearInterval方法。如果你想实现一个周期性定时器，但又想在参数中指定一个函数文字量，那么你可以在每次定时器过期时再用 setTimeout函数重新设置这个定时器。<br />
<br />
注：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在 IE浏览器中，setInterval和 setTimeout方法是不支持在最后添加函数调用所需参数的。<br />
<br />
<br />
<strong>d. 用来控制浏览器其他元素</strong><br />
<br />
history对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;history对象负责维护浏览器中页面载入操作的历史记录。同样，其方法和属性能够完成通过浏览器的后退和前进按钮所能实现的导航操作。<br />
<br />
screen对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screen对象所包含的信息是屏幕显示有相关的，包括其宽度、高度，以及颜色或像素浓淡。虽然他们不是很常用，但他们对于那些需要修改浏览器窗口大小、创建需要特定调色板的带色彩对象等功能而言是不错的选择。<br />
<br />
navigator对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;navigator对象中提供的是和浏览器或其他访问该页面的用户代理相关的信息。通过它可以检查操作系统、浏览器或浏览器族、安全策略、语言以及 cookie是否启用。<br />
<br />
document对象<br />
1.链接和锚<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document对象的 links集合是由页面中所有超链接组成的，它的访问方法和数组一样。 <br />
<br />
2.图像<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和链接一样，图像也有其对应的对象，也可以直接设置他们的属性，如表示图像 URL的 src属性。<br />
<br />
3.innerHTML<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用 innerHTML属性可以修改页面中任何一个 HTML元素，它之所以仍然流行，是因为通过它修改页面元素时无需构建整个页面的内容，你只需创建一个 HTML格式的字符串，然后通过 innerHTML就可以添加到 Web页面中。不过，使用 innerHTML意味着无论向 Web页面添加了什么，他们都无法融合到页面的 document树上，因此如果你混合使用 innerHTML和新的 DOM方法将会带来很大的破坏。
<hr color="#3366ff" size="1" />
<br />
<a id="2" name="2"></a><br />
<strong>2、同源安全策略</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同源安全策略确保了不同域名、协议或端口的页面之间不能够通过脚本进行通信。同源安全策略将应用于不同页面之间的通信，包括父窗口中的表单和内嵌窗口之间的通信，如帧及 iframe。
<hr color="#3366ff" size="1" />
<br />
<a id="3" name="3"></a><br />
<strong>3、cookie</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookie的意义就是一个带有过期时间、域名、路径的小型的键/值对，之所以需要提供这些消息，是为了确保正确的服务器能够读取到正确的 cookie。这些信息将作为 Web请求的一部分发送，因此在服务器端和浏览器都能访问这些数据。<br />
<br />
<strong>设置、读取、删除 cookie</strong>
<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: #008000">//</span><span style="color: #008000">&nbsp;if&nbsp;cookie&nbsp;enabled</span><span style="color: #008000"><br />
</span><span style="color: #000000">window.onload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(navigator.cookieEnabled)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;readCookie(</span><span style="color: #000000">"</span><span style="color: #000000">sum</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(sum)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iSum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;parseInt(sum)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">cookie&nbsp;count&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;iSum);<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;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(iSum&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eraseCookie(</span><span style="color: #000000">"</span><span style="color: #000000">sum</span><span style="color: #000000">"</span><span style="color: #000000">);&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;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setCookie(</span><span style="color: #000000">"</span><span style="color: #000000">sum</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;iSum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">no&nbsp;cookie,&nbsp;setting&nbsp;now</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setCookie(</span><span style="color: #000000">"</span><span style="color: #000000">sum</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;将&nbsp;cookie有效期设置为&nbsp;2016年</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;setCookie(key,&nbsp;value)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;cookieDate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date(</span><span style="color: #000000">2016</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">11</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">19</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.cookie&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;key&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;encodeURI(value)&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;expires=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cookieDate.toGMTString()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;path=/</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;在每个&nbsp;cookie之前用分号隔开</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;readCookie(key)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;cookie&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.cookie;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cookie.indexOf(key&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;存在&nbsp;cookie</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(first&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cookie.substring(first,&nbsp;cookie.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;last&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.indexOf(</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;如果是最后一个&nbsp;cookie</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(last&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;last&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获取&nbsp;cookie的值</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;last).split(</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;decodeURI(str[</span><span style="color: #000000">1</span><span style="color: #000000">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;将&nbsp;cookie的有效期设置成过去，以达到删除&nbsp;cookie的目的</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;eraseCookie&nbsp;(key)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;cookieDate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date(</span><span style="color: #000000">2000</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">11</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">19</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.cookie&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;key&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=&nbsp;;&nbsp;expirse=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;cookieDate.toGMTString()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;path/</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
}</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/322244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-29 21:46 <a href="http://www.blogjava.net/kiant/articles/322244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(四) 表单、表单事件及校验</title><link>http://www.blogjava.net/kiant/articles/322211.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sat, 29 May 2010 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/322211.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/322211.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/322211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/322211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/322211.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、跨浏览器兼容的事件处理<br />
</a><a href="#2">2、选择列表框<br />
</a><a href="#3">3、单选按钮和复选框<br />
</a><a href="#4">4、测验</a><br />
<br />
<br />
<br />
<a id="1" name="1"></a><br />
<strong>1、跨浏览器兼容的事件处理</strong><br />
<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: #008000">//</span><span style="color: #008000">可复用的事件处理函数</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;catchEvent(eventObj,&nbsp;event,&nbsp;eventHandler)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(eventObj.addEventListener)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;eventObj.addEventListener(event,&nbsp;eventHandler,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(eventObj.attachEvent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">on</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;event;<br />
&nbsp;&nbsp;&nbsp;&nbsp;eventObj.attachEvent(event,&nbsp;eventHandler);<br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">可复用的事件取消函数</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;cancelEvent(event)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(event.preventDefault)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;event.preventDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;event.stopPropagation();<br />
&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;event.retrunValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;event.cancelBubble&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="2" name="2"></a><br />
<strong>2、选择列表框</strong><br />
<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">var</span><span style="color: #000000">&nbsp;opts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">someForm</span><span style="color: #000000">"</span><span style="color: #000000">).selectOpts.options;<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">opts.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(opts[i].selected)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(opts[i].text&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;opts[i].value);<br />
&nbsp;&nbsp;}<br />
}</span></div>
<br />
a.动态添加一个新的选项：由于数组的索引值是从 0开始编号的，因此只要以数组的 length属性作为索引值，就可以在数组的最后面添加一个新的数组元素。<br />
opts[opts.length] = new Option["Option Four", "Opt4"];<br />
<br />
b.删除一个选项，只需将数组中该选项设置为 null，这样操作将会重新安排数组，而不会导致编号不连续的现象。<br />
opts[2] = null;<br />
<br />
如果想删除所有选项，那么只需将数组的 length设置为 0。<br />
opts.length = 0;<br />
<br />
<br />
<strong>自动选择</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: #008000">//</span><span style="color: #008000">catchEvent(document.getElementById("selectOpts"),&nbsp;"change",&nbsp;checkSelect);</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;theEvent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;evnt&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;evnt&nbsp;:&nbsp;window.event;<br />
<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;opts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">someForm</span><span style="color: #000000">"</span><span style="color: #000000">).selectOpts.options;<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">opts.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(opts[i].selected)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">&nbsp;(opts[i].value)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Opt1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;opts[i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">].selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Opt3</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;opts[i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">].selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Opt5</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;opts[i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">].selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="3" name="3"></a><br />
<strong>3、单选按钮和复选框</strong><br />
<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: #008000">//</span><span style="color: #008000">单选按钮访问：</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;buttons&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">radioGroup</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">buttons.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(buttons[i].checked)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(buttons[i].value);<br />
&nbsp;&nbsp;}<br />
}</span></div>
<br />
<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: #008000">//</span><span style="color: #008000">复选框选择：</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;colorOpts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">someForm</span><span style="color: #000000">"</span><span style="color: #000000">).getElementByTagName(</span><span style="color: #000000">"</span><span style="color: #000000">input</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">遍历复选框中的每个&nbsp;checkbox，检查是否被选中</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;isChecked&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">colorOpts.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((colorOpts[i].type&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">checkbox</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;(colorOpts[i].checked))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;ifChecked&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">没有一个&nbsp;checkbox被选中</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">isChecked)&nbsp;{<br />
&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">no&nbsp;choose!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
}</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="4" name="4"></a><br />
<strong>4、测验</strong><br />
<br />
Q：如果表单数据不完整或无效，如何停止表单提交操作？<br />
A：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果你使用 DOM Level 0的事件，那么只要在事件句柄中返回 false值，并且在事件句柄脚本中取消表单提交操作即可。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果你使用 DOM Level 2模型，那么就将 event对象的 cancelBubble属性设置为 true（针对 IE），并调用其 preventDefault方法（针对其他浏览器）。<br />
 <img src ="http://www.blogjava.net/kiant/aggbug/322211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-29 15:50 <a href="http://www.blogjava.net/kiant/articles/322211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(三) 排错、调试、事件捕获</title><link>http://www.blogjava.net/kiant/articles/322189.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sat, 29 May 2010 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/322189.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/322189.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/322189.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/322189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/322189.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、排错、调试</a><br />
<a href="#2">2、事件</a><br />
<a href="#3">3、Event对象</a><br />
<a href="#4">4、事件冒泡</a><br />
<a href="#5">5、事件句柄和 this</a><br />
<a href="#6">6、DOM Level 2事件模型</a><br />
<a href="#7">7、测验</a><br />
<br />
<br />
<br />
<br />
<a id="1" name="1"></a><strong><br />
1、排错、调试</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; Firebug是最常用的 Firefox开发工具，同时常用的 Web工具还有 Web Developer toolkit，该工具功能包括页面 HTML和 CSS代码的校验、可访问性检查、查看 CSS和 cookies、检查图像、查看 JavaScript修改后的页面源代码（包括动态源代码）。
<hr color="#3366ff" size="1" />
<br />
<a id="2" name="2"></a><strong><br />
2、事件<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 事件包括：用户界面事件（鼠标、键盘触发的）、逻辑事件（一个处理的结果）、和变化事件（修改文档的操作）。<br />
<br />
<h2>事件句柄　(Event Handlers)</h2>
<p>HTML 4.0 的新特性之一是能够使 HTML 事件触发浏览器中的行为，比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表，可将之插入 HTML 标签以定义事件的行为。</p>
<table class="dataintable">
    <tbody>
        <tr>
            <th style="width: 20%">属性</th>
            <th>此事件发生在何时...</th>
            <th style="width: 7%">IE</th>
            <th style="width: 7%">F</th>
            <th style="width: 7%">O</th>
            <th style="width: 7%">W3C</th>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onabort.asp" target="_top">onabort</a></td>
            <td>图像的加载被中断。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onblur.asp" target="_top">onblur</a></td>
            <td>元素失去焦点。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onchange.asp" target="_top">onchange</a></td>
            <td>域的内容被改变。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onclick.asp" target="_top">onclick</a></td>
            <td>当用户点击某个对象时调用的事件句柄。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_ondblclick.asp" target="_top">ondblclick</a></td>
            <td>当用户双击某个对象时调用的事件句柄。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onerror.asp" target="_top">onerror</a></td>
            <td>在加载文档或图像时发生错误。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onfocus.asp" target="_top">onfocus</a></td>
            <td>元素获得焦点。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onkeydown.asp" target="_top">onkeydown</a></td>
            <td>某个键盘按键被按下。</td>
            <td>3</td>
            <td>1</td>
            <td>No</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onkeypress.asp" target="_top">onkeypress</a></td>
            <td>某个键盘按键被按下并松开。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onkeyup.asp" target="_top">onkeyup</a></td>
            <td>某个键盘按键被松开。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onload.asp" target="_top">onload</a></td>
            <td>一张页面或一幅图像完成加载。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onmousedown.asp" target="_top">onmousedown</a></td>
            <td>鼠标按钮被按下。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onmousemove.asp">onmousemove</a></td>
            <td>鼠标被移动。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onmouseout.asp" target="_top">onmouseout</a></td>
            <td>鼠标从某元素移开。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onmouseover.asp" target="_top">onmouseover</a></td>
            <td>鼠标移到某元素之上。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onmouseup.asp" target="_top">onmouseup</a></td>
            <td>鼠标按键被松开。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onreset.asp" target="_top">onreset</a></td>
            <td>重置按钮被点击。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onresize.asp" target="_top">onresize</a></td>
            <td>窗口或框架被重新调整大小。</td>
            <td>4</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onselect.asp" target="_top">onselect</a></td>
            <td>文本被选中。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onsubmit.asp" target="_top">onsubmit</a></td>
            <td>确认按钮被点击。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_onunload.asp" target="_top">onunload</a></td>
            <td>用户退出页面。</td>
            <td>3</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
    </tbody>
</table>
<em style="font-size: 8pt">注：HTML DOM Event 对象 http://www.w3school.com.cn/htmldom/dom_obj_event.asp</em><br />
<br />
<br />
<strong>内联模式/内联注册模式</strong>：<br />
以属性的形式为 HTML元素添加属性的方法。<br />
&lt;body onload="var 1=23; i*=3; alert(i);"&gt;<br />
&lt;body onload="calcNumber();"&gt;<br />
<br />
<strong>传统模式/传统注册模式</strong>：<br />
通过对象属性将一个函数指派为事件句柄。如果想禁用事件处理，那么可以将事件句柄的值赋为 null。<br />
window.onload = calcNumber;<br />
<br />
<br />
注：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 DOM Level 0事件模型中，任何对象只允许指定一个事件句柄。如果你想针对某一特定对象的某个事件指定多个函数，则需要在事件句柄代码中列出他们：<br />
<br />
内嵌模式：<br />
&lt;body onload="helloMsg(); helloTwice();"&gt;<br />
<br />
传统模式：<br />
function helloMsg() {<br />
&nbsp;&nbsp;&nbsp; var helloString = "hello there";<br />
&nbsp;&nbsp;&nbsp; alert(helloString);<br />
&nbsp;&nbsp;&nbsp; helloTwice();<br />
}<br />
<br />
当要求浏览器停止执行事件行为，可以从事件句柄函数中返回 false值。
<hr color="#3366ff" size="1" />
<br />
<a id="3" name="3"></a><strong><br />
3、Event对象<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; Event对象是和所有事件相关的。它有一些用来提供事件相关信息的属性，如 Web页面中鼠标点击的位置。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; IE将 Event视为 window对象的属性。当处理事件时，将通过程序访问 window对象，其所包含的数据也会相应的进行填充。
<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">function</span><span style="color: #000000">&nbsp;mouseDown()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;locString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">X&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;window.event.screenX&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Y&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;window.event.screenY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(locString);<br />
}<br />
<br />
document.onmousedown = mouseDown;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在基于 Netscape的浏览器（如 Firefox、Mozilla、Opera和 Safari）中，获取 Event对象的方法是不同的：他将作为函数的一部分传入。
<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">function</span><span style="color: #000000">&nbsp;mouseDown(theEvent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;locString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">X&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;theEvent.screenX&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Y&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;theEvent.screenY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(locString);<br />
}<br />
<br />
document.onmousedown&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mouseDown;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 处理这些浏览器差异的方法之一是检查传入函数的 Event对象是否已经实例化。如果是，那么将这个 Event对象赋给一个局部变量；否则，将假定 window.event为该事件，并将其赋给这个局部变量。
<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">function</span><span style="color: #000000">&nbsp;mouseDown(nsEvent)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;theEvent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nsEvent&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;nsEvent&nbsp;:&nbsp;window.event;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">判断&nbsp;nsEvent对象是否已定义。定义则赋值，否则选择&nbsp;window.event属性</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;locString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">X&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;theEvent.screenX&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Y&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;theEvent.screenY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(locString);<br />
}<br />
<br />
document.onmousedown&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mouseDown;</span></div>
<br />
<br />
<h2>鼠标 / 键盘属性</h2>
<table class="dataintable">
    <tbody>
        <tr>
            <th style="width: 20%">属性</th>
            <th>描述</th>
            <th style="width: 7%">IE</th>
            <th style="width: 7%">F</th>
            <th style="width: 7%">O</th>
            <th style="width: 7%">W3C</th>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_altkey.asp">altKey</a></td>
            <td>返回当事件被触发时，"ALT" 是否被按下。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_button.asp">button</a></td>
            <td>返回当事件被触发时，哪个鼠标按钮被点击。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_clientx.asp">clientX</a></td>
            <td>返回当事件被触发时，鼠标指针的水平坐标。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_clienty.asp">clientY</a></td>
            <td>返回当事件被触发时，鼠标指针的垂直坐标。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_ctrlkey.asp">ctrlKey</a></td>
            <td>返回当事件被触发时，"CTRL" 键是否被按下。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_metakey.asp">metaKey</a></td>
            <td>返回当事件被触发时，"meta" 键是否被按下。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_relatedtarget.asp">relatedTarget</a></td>
            <td>返回与事件的目标节点相关的节点。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_screenx.asp">screenX</a></td>
            <td>返回当某个事件被触发时，鼠标指针的水平坐标。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_screeny.asp">screenY</a></td>
            <td>返回当某个事件被触发时，鼠标指针的垂直坐标。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_shiftkey.asp">shiftKey</a></td>
            <td>返回当事件被触发时，"SHIFT" 键是否被按下。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
    </tbody>
</table>
<em style="font-size: 8pt">注：HTML DOM Event 对象 http://www.w3school.com.cn/htmldom/dom_obj_event.asp</em><br />
<br />
注：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 IE中，fromElement 对于 mouseover 和 mouseout 事件，fromElement 引用移出鼠标的元素。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 而在 Mozilla/Firefox中，relatedTarget 返回与事件的目标节点相关的节点。 <br />
要解决浏览器差异，可以使用：<br />
var oldElement = theEvent.fromElement ? theEvent.fromElement : theEvent.relatedTarget;
<hr color="#3366ff" size="1" />
<br />
<a id="4" name="4"></a><strong><br />
4、事件冒泡<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果你为多个嵌套的元素设置相同的事件句柄，会发生什么呢？他们将以什么样的顺序触发？如果你想使得一次只影响一个元素，那么如何保存触发事件句柄的事件呢？<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 要管理元素堆栈中的事件，其中一个方法就是众所周知的事件冒泡。在事件冒泡中，最内部的元素将首先触发该事件，然后堆栈内的下一个元素触发该事件，以此类推，直到最外面的元素。如果事件句柄被指定给所有元素，那么这些事件将依次被触发。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果 div2在 div1内部，而 div1又在 document内部，三者都做了事件处理。当事件触发的时候，优先最里面的 div2元素，然后是 div1元素，最后是 document元素。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果你有一个元素堆栈，并且只希望一个元素触发该事件句柄，那么你可以取消事件冒泡机制。如果在 IE中要取消一个事件冒泡，可以使用 IE中事件的 cancelBubble属性；对于 Mozilla而言，则应该使用事件的 stopPropagation方法。你可以先检查 stopPropagation方法是否存在，然后根据其结果确定使用哪种方法：
<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">function</span><span style="color: #000000">&nbsp;stopEvent(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(evnt.stopPropagation)&nbsp;evnt.stopPropagation;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;evnt.cancelBubble&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
}<br />
</span><span style="color: #008000">//</span><span style="color: #008000">注：IE&nbsp;7中调试出错，提示信息&nbsp;"stopPropagation为空或不是对象"。</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="5" name="5"></a><strong><br />
5、事件句柄和 this<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; this关键字表示的是当前调用的函数或者方法的所有者。对于一个全局变量而言，它表示的就是 window对象。对于一个对象的方法而言，它表示的就是该对象实例。而在一个事件句柄中，它表示的就是接收到该事件的元素。
<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: #000000">document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">first</span><span style="color: #000000">"</span><span style="color: #000000">).onmousedown&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在&nbsp;Firefox中将输出&nbsp;"[object&nbsp;HTMLDivElement]"</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">first&nbsp;element&nbsp;event</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="6" name="6"></a><strong><br />
6、DOM Level 2事件模型</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于堆栈内元素的事件处理，还有一种被称为事件捕捉(event capturing)或 cascade-down的事件处理机制。对于前面这个包含3个元素的示例而言，事件将从最外面的元素开始触发：window -&gt; div1 -&gt; div2。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 老事件模型和新的 DOM Level 2事件模型之间，主要区别：<br />
a.新事件模型并不依赖于特定的事件来处理属性；<br />
b.你可以对任何一个对象的任何一种事件注册多个事件句柄函数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 新的事件句柄提供的3个方法：<br />
addEventListener，添加一个事件监听器；<br />
removeEventListener，删除一个事件监听器；<br />
dispatchEvent，分发一个新的事件。<br />
<br />
示例：<br />
object.addEventListener('event', eventFunction, boolean);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如 click或 load之类的事件是其第一参数；第二个参数是指定的事件句柄函数；第三个参数用来指定事件是以 cascade-down或者冒泡模式处理的。当第三个参数为 false时这个事件监听器将以冒泡模式处理，否则将把这个事件监听器改成事件捕捉模型。
<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">function</span><span style="color: #000000">&nbsp;cascadeDown(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Capturing:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
}<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;bubbleUp(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Bubbling:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
}<br />
<br />
window.onload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setup;<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;setup(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">事件捕捉</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;document.addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;cascadeDown,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.forms[</span><span style="color: #000000">0</span><span style="color: #000000">].addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;cascadeDown,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.forms[</span><span style="color: #000000">0</span><span style="color: #000000">].elements[</span><span style="color: #000000">0</span><span style="color: #000000">].addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;cascadeDown,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">事件冒泡</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;document.addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;bubbleUp,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.forms[</span><span style="color: #000000">0</span><span style="color: #000000">].addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;bubbleUp,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.forms[</span><span style="color: #000000">0</span><span style="color: #000000">].elements[</span><span style="color: #000000">0</span><span style="color: #000000">].addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;bubbleUp,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
}<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
在&nbsp;Firefox中，单击按钮将顺序生成6个对话框<br />
<br />
Capturing:&nbsp;[object&nbsp;HTMLDocument]<br />
Capturing:&nbsp;[object&nbsp;HTMLFormElement]<br />
Capturing:&nbsp;[object&nbsp;HTMLInputElement]<br />
Bubbling:&nbsp;[object&nbsp;HTMLInputElement]<br />
Bubbling:&nbsp;[object&nbsp;HTMLFormElement]<br />
Bubbling:&nbsp;[object&nbsp;HTMLDocument]<br />
<br />
</span><span style="color: #008000">*/</span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果你想停止事件执行时，可以在函数中调用 stopPropagation方法：<br />
function cascadeDown(evnt) {<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; evnt.stopPropagation();<br />
}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果要彻底删除一个事件监听器，可以使用 removeEventListener方法：<br />
document.removeEventListener("click", cascadeDown, true);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 IE中，与 addEventListener和 removeEventListener方法相似的是 attachEvent和 detachEvent，对应语法是：<br />
object.attachEvent("eventhandler", function);<br />
第一个参数是事件句柄，第二个是其函数。detachEvent语法类似。<br />
<br />
<br />
<strong>跨浏览器解决方案：</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: #000000">window.onload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setup;<br />
window.onunload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cleanup;<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;setup(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;evtObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">clickme</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">检查对象模型</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(evtObject.addEventListener)&nbsp;evtObject.addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">click</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;clickMe,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(evtObject.attachEvent)&nbsp;evtObject.attachEvent(</span><span style="color: #000000">"</span><span style="color: #000000">onclick</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;clickMe);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(evtObject.onclick)&nbsp;evtObject.onclick</span><span style="color: #000000">=</span><span style="color: #000000">clickMe;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000">清理<br />
在&nbsp;IE中，需要跟踪&nbsp;window的&nbsp;unload事件，然后调用&nbsp;detachEvent方法清理，释放相应的内存<br />
而&nbsp;addEventListener方法使用的内存是无需清理的。<br />
</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;cleanup()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;evtObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">clickme</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(evtObject.detachEvent)&nbsp;evtObject.detachEvent(</span><span style="color: #000000">"</span><span style="color: #000000">onclick</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;clickMe);<br />
}<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;clickMe()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">clickMe</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}</span></div>
<br />
<br />
<h2>IE 属性</h2>
<p>除了上面的鼠标/事件属性，IE 浏览器还支持下面的属性：</p>
<table class="dataintable">
    <tbody>
        <tr>
            <th style="width: 20%">属性</th>
            <th>描述</th>
        </tr>
        <tr>
            <td>cancelBubble</td>
            <td>如果事件句柄想阻止事件传播到包容对象，必须把该属性设为 true。</td>
        </tr>
        <tr>
            <td>fromElement</td>
            <td>对于 mouseover 和 mouseout 事件，fromElement 引用移出鼠标的元素。</td>
        </tr>
        <tr>
            <td>keyCode</td>
            <td>对于 keypress 事件，该属性声明了被敲击的键生成的 Unicode 字符码。对于 keydown 和 keyup 事件，它指定了被敲击的键的虚拟键盘码。虚拟键盘码可能和使用的键盘的布局相关。</td>
        </tr>
        <tr>
            <td>offsetX,offsetY</td>
            <td>发生事件的地点在事件源元素的坐标系统中的 x 坐标和 y 坐标。</td>
        </tr>
        <tr>
            <td>returnValue</td>
            <td>如果设置了该属性，它的值比事件句柄的返回值优先级高。把这个属性设置为 fasle，可以取消发生事件的源元素的默认动作。</td>
        </tr>
        <tr>
            <td>srcElement</td>
            <td>对于生成事件的 Window 对象、Document 对象或 Element 对象的引用。</td>
        </tr>
        <tr>
            <td>toElement</td>
            <td>对于 mouseover 和 mouseout 事件，该属性引用移入鼠标的元素。</td>
        </tr>
        <tr>
            <td>x,y</td>
            <td>事件发生的位置的 x 坐标和 y 坐标，它们相对于用CSS动态定位的最内层包容元素。</td>
        </tr>
    </tbody>
</table>
<em style="font-size: 8pt">注：HTML DOM Event 对象 http://www.w3school.com.cn/htmldom/dom_obj_event.asp</em><br />
<br />
<br />
<h2>标准 Event 属性</h2>
<p>下面列出了 2 级 DOM 事件标准定义的属性。</p>
<table class="dataintable">
    <tbody>
        <tr>
            <th style="width: 20%">属性</th>
            <th>描述</th>
            <th style="width: 7%">IE</th>
            <th style="width: 7%">F</th>
            <th style="width: 7%">O</th>
            <th style="width: 7%">W3C</th>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_bubbles.asp">bubbles</a></td>
            <td>返回布尔值，指示事件是否是起泡事件类型。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_cancelable.asp">cancelable</a></td>
            <td>返回布尔值，指示事件是否可拥可取消的默认动作。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_currenttarget.asp">currentTarget</a></td>
            <td>返回其事件监听器触发该事件的元素。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_eventphase.asp">eventPhase</a></td>
            <td>返回事件传播的当前阶段。</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_target.asp">target</a></td>
            <td>返回触发此事件的元素（事件的目标节点）。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_timestamp.asp">timeStamp</a></td>
            <td>返回事件生成的日期和时间。</td>
            <td>No</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
        <tr>
            <td><a href="http://www.w3school.com.cn/htmldom/event_type.asp">type</a></td>
            <td>返回当前 Event 对象表示的事件的名称。</td>
            <td>6</td>
            <td>1</td>
            <td>9</td>
            <td>Yes</td>
        </tr>
    </tbody>
</table>
<em style="font-size: 8pt">注：HTML DOM Event 对象 <a href="http://www.w3school.com.cn/htmldom/dom_obj_event.asp">http://www.w3school.com.cn/htmldom/dom_obj_event.asp</a>
<hr color="#3366ff" size="1" />
</em><br />
<a id="7" name="7"></a><strong><br />
7、测验<br />
</strong><br />
Q1：使用 DOM Level 0方法为 document的 click事件指定一个事件句柄函数。<br />
A1：document.onclick = clickMe;<br />
<br />
<br />
Q2：使用 DOM Level 2事件处理机制为 document添加 click事件句柄。<br />
A2：document.addEventListener("click", clickMe, false);<br />
<br />
<br />
Q3：如果使事件处理机制能安全运行所有浏览器？<br />
A3：<br />
&nbsp;&nbsp;&nbsp; if (evtObject.addEventListener) evtObject.addEventListener("click", clickMe, false);<br />
&nbsp;&nbsp;&nbsp; else if (evtObject.attachEvent) evtObject.attachEvent("onclick", clickMe);<br />
&nbsp;&nbsp;&nbsp; else if (evtObject.onclick) evtObject.onclick=clickMe;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
Q4：对于为 document对象指定的 onclick事件句柄，如何知道是在屏幕的什么位置执行了单击操作？<br />
A4：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果使用 DOM Level 0事件处理系统，那么将无法使用 window对象的 event对象，也不能将其作为参数传给函数。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于 DOM Level 2事件处理模型而言，event对象将会传给事件句柄函数，你可以通过 event对象访问其 screenX和 screenY属性。<br />
<br />
<br />
Q5：使用 DOM Level 2事件系统，如何阻止从其他元素中冒泡上来的事件。<br />
A5：<br />
&nbsp;&nbsp;&nbsp;&nbsp; IE所支持的方法和绝大多数浏览器所支持的方法有所不同，因此你需要分别支持 IE和其他浏览器。你可以检查 event对象是否支持 stopPropagation方法。如果支持，则调用它；否则就将 cancelBubble属性的值设置为 true。<br />
<br />
<br />
Q7：捕获 document对象的 keydown事件<br />
A7：
<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: #000000">window.onload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(document.addEventListener)&nbsp;document.addEventListener(</span><span style="color: #000000">"</span><span style="color: #000000">keydown</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;getKey,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(document.attachEvent)&nbsp;document.attachEvent(</span><span style="color: #000000">"</span><span style="color: #000000">onkeydown</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;getKey);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(document.onkeydown)&nbsp;document.onkeydown</span><span style="color: #000000">=</span><span style="color: #000000">getKey;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getKey(evnt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;theEvent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;evnt&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;evnt&nbsp;:&nbsp;window.event;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(theEvent.which);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Firefox&nbsp;返回值，IE&nbsp;7提示&nbsp;undefined</span><span style="color: #008000"><br />
</span><span style="color: #000000">}</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/322189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-29 09:25 <a href="http://www.blogjava.net/kiant/articles/322189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(二) 对象、函数</title><link>http://www.blogjava.net/kiant/articles/321921.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Wed, 26 May 2010 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/321921.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/321921.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/321921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/321921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/321921.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、字符串基本类型和字符串对象的相互转换<br />
</a><a href="#2">2、String对象</a><br />
<a href="#3">3、正则表达式</a><br />
<a href="#4">4、数组</a><br />
<a href="#5">5、函数</a><br />
<a href="#6">6、匿名函数</a><br />
<a href="#7">7、函数字面量</a><br />
<br />
<br />
<br />
<strong><a id="1" name="1"></a><br />
1、字符串基本类型和字符串对象的相互转换</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果创建的是字符串基本类型，却又以对象的行为访问，那么 JavaScript会将该基本类型自动转换成对象，但是转换成的 String对象只是一个临时变量，并且在属性操作后销毁该对象，所以这种操作不够有效，多了一次转换的过程而已。<br />
<br />
var strName = "Shelley";&nbsp;//字符串基本类型<br />
alert(strName.length);&nbsp;&nbsp;//隐式创建 String对象，数值与 strName相同，并执行 length方法<br />
<hr color="#3366ff" size="1" />
<br />
<strong><a id="2" name="2"></a><br />
2、String对象</strong><br />
<br />
本节内容引自：JavaScript String 对象参考手册<br />
http://www.w3school.com.cn/js/jsref_obj_string.asp<br />
<br />
var sObject = new String("Sample string");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 字符串是 JavaScript 的一种基本的数据类型。String 对象的 length 属性声明了该字符串中的字符数。String 类定义了大量操作字符串的方法，例如从字符串中提取字符或子串，或者检索字符或子串。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 需要注意的是，JavaScript 的字符串是不可变的（immutable），String 类定义的方法都不能改变字符串的内容。像 String.toUpperCase() 这样的方法，返回的是全新的字符串，而不是修改原始字符串。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在较早的 Netscape 代码基的 JavaScript 实现中（例如 Firefox 实现中），字符串的行为就像只读的字符数组。例如，从字符串 s 中提取第三个字符，可以用 s[2] 代替更加标准的 s.charAt(2)。此外，对字符串应用 for/in 循环时，它将枚举字符串中每个字符的数组下标（但要注意，ECMAScript 标准规定，不能枚举 length 属性）。因为字符串的数组行为不标准，所以应该避免使用它。
<hr color="#3366ff" size="1" />
&nbsp;<br />
<a id="3" name="3"></a><br />
<strong>3、正则表达式</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 正则表达式是由字符串所组成的表达式，用于匹配、替换或者查找特定的字符串。通过 RegExp对象可以显式地创建正则表达式：<br />
var searchPatten = new RegExp('s+');<br />
<br />
也可以使用文字量方式创建正则表达式：<br />
var searchPatten = /s+/;<br />
<br />
<strong>test方法</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; test方法将判断以参数传入的字符串是否与正则表达式相匹配。<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">var</span><span style="color: #000000">&nbsp;re&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">Javascript&nbsp;rules</span><span style="color: #000000">/</span><span style="color: #000000">i;<br />
</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;var&nbsp;re&nbsp;=&nbsp;new&nbsp;RegExp('s+',&nbsp;'g');&nbsp;&nbsp;&nbsp;&nbsp;//对象实例，第二个参数表示匹配选项&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Javascript&nbsp;rules</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(re.test(str))&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(</span><span style="color: #000000">"</span><span style="color: #000000">I&nbsp;guess&nbsp;it&nbsp;does&nbsp;rule</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
其中修饰符<br />
i 执行对大小写不敏感的匹配。 <br />
g 执行全局匹配（查找所有匹配而非在找到第一个匹配后停止）。 <br />
m 执行多行匹配。 <br />
<br />
<strong>exec方法<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">var</span><span style="color: #000000">&nbsp;re&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RegExp(</span><span style="color: #000000">"</span><span style="color: #000000">JS*</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ig</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cfdsJS&nbsp;*(&amp;YJSjs&nbsp;888JS</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;resultArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;re.exec(str);<br />
</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(resultArray)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(resultArray[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(</span><span style="color: #000000">"</span><span style="color: #000000">next&nbsp;match&nbsp;starts&nbsp;at&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;re.lastIndex&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;resultArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;re.exec(str);<br />
}<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
由于设置选项&nbsp;g，RegExp中的&nbsp;lastIndex属性会设置为上一次匹配的位置，所以每次&nbsp;exec调用都会查找下一个匹配。该示例中总共找到4次匹配，当没有匹配时，将会返回的数值是空值&nbsp;null，当数组为空值时循环自动结束。&nbsp;<br />
<br />
输出：<br />
JS&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;6<br />
JS&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;13<br />
js&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;15<br />
JS&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;21<br />
<br />
</span><span style="color: #008000">*/</span></div>
<br />
</strong>exec方法将返回一个数组，但是数组并不是所有匹配项，而是当前匹配项和所有带圆括号的子字符串。如果在表达式中使用圆括号引用正则表达式的某部分，那么匹配的时候，这些括号所匹配的字符串也会体现在返回的数组中。<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">var</span><span style="color: #000000">&nbsp;re&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">(ds)</span><span style="color: #000000">+</span><span style="color: #000000">(j</span><span style="color: #000000">+</span><span style="color: #000000">s)</span><span style="color: #000000">/</span><span style="color: #000000">ig;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cfdsJS&nbsp;*(&amp;dsjjjsYJSjs&nbsp;888dsdsJS</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;resultArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;re.exec(str);<br />
</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(resultArray)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(resultArray[</span><span style="color: #000000">0</span><span style="color: #000000">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(</span><span style="color: #000000">"</span><span style="color: #000000">next&nbsp;match&nbsp;starts&nbsp;at&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;re.lastIndex&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">resultArray.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(</span><span style="color: #000000">"</span><span style="color: #000000">substring&nbsp;of&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;resultArray[i]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;resultArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;re.exec(str);<br />
}<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
<br />
输出：<br />
dsJS&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;6<br />
substring&nbsp;of&nbsp;ds<br />
substring&nbsp;of&nbsp;JS<br />
<br />
dsjjjs&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;16<br />
substring&nbsp;of&nbsp;ds<br />
substring&nbsp;of&nbsp;jjjs<br />
<br />
dsdsJS&nbsp;next&nbsp;match&nbsp;starts&nbsp;at&nbsp;31<br />
substring&nbsp;of&nbsp;ds<br />
substring&nbsp;of&nbsp;JS<br />
<br />
</span><span style="color: #008000">*/</span></div>
<br />
支持正则表达式的 String 对象的方法<br />
search 检索与正则表达式相匹配的值。 <br />
match 找到一个或多个正则表达式的匹配。 <br />
replace 替换与正则表达式匹配的子串。<br />
split 把字符串分割为字符串数组。<br />
&nbsp;<br />
<br />
参考：JavaScript RegExp 对象参考手册<br />
<a href="http://www.w3school.com.cn/js/jsref_obj_regexp.asp">http://www.w3school.com.cn/js/jsref_obj_regexp.asp</a>
<hr color="#3366ff" size="1" />
<br />
<strong><a id="4" name="4"></a><br />
4、数组</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 数组不一定是一维的，在 JavaScript中管理多维数组的方法是为每个数组元素创建一个新的数组。<br />
<br />
var threedPoints = new Array();<br />
threedPoints[0] = new Array(1.2, 3.33, 2.0);<br />
threedPoints[1] = new Array(5.3, 5.5, 5.5);<br />
threedPoints[2] = new Array(6.4, 2.2, 1.9);<br />
var newZPoint = threedPoints[2][2];&nbsp;&nbsp;&nbsp;&nbsp; //数组以索引方式访问<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 数组的 concat 和 slice都不会改变原有数组，而只是创建一个新的数组以作为方法的返回值。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在大多数情况下，数组元素的顺序并不重要，不过也有些需要维护数组元素顺序的场景，例如队列。数组维护队列的方法：<br />
push 将元素添加到数组后面<br />
unshift 将元素添加到数组最前面<br />
pop 移除数组的最后一个元素<br />
shift 移除第一个元素<br />
<br />
数组的访问<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: #008000">//</span><span style="color: #008000">通过循环来遍历数组</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">threedPoints[</span><span style="color: #000000">0</span><span style="color: #000000">].length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(threedPoints[</span><span style="color: #000000">0</span><span style="color: #000000">][i]);<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">使用&nbsp;for<img alt="" src="http://www.blogjava.net/Images/dot.gif" />in&nbsp;循环</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;itemIndex&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;threedPoints[</span><span style="color: #000000">0</span><span style="color: #000000">]){<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.writeln(threedPoints[</span><span style="color: #000000">0</span><span style="color: #000000">][itemIndex]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
</span></div>
<br />
根据逗号分隔的字符串方式创建数组<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">var</span><span style="color: #000000">&nbsp;animalString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cats,dogs,birds,horse</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;animalArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;animalString.split(</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
alert(animalArray[</span><span style="color: #000000">2</span><span style="color: #000000">]);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">alert&nbsp;box&nbsp;display&nbsp;birds</span></div>
<br />
<br />
JavaScript Array 对象参考手册<br />
<a href="http://www.w3school.com.cn/js/jsref_obj_array.asp">http://www.w3school.com.cn/js/jsref_obj_array.asp</a>
<hr color="#3366ff" size="1" />
<br />
<a id="5" name="5"></a><br />
<strong>5、函数</strong>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; JavaScript中函数和对象相似，你可以定义一个函数，创建一个新的函数，甚至输出一个函数。正是因为有了这个功能，你可以将一个函数给一个变量或数组元素，甚至可以将其作为参数传给另一个函数调用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在 JavaScript中有3种创建函数的方法：声明式的/静态的、动态的/匿名的、字面量式的。在使用它们之前，理解各种方法的效果是十分重要的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果在一个函数中需要执行多个任务，可以考虑将这个函数拆分成几个更小的单元，这样做可提高复用性。在实际中，尽量让函数短小、使其特定于某个人物、尽量保持通用是应该遵守的规则。
<hr color="#3366ff" size="1" />
&nbsp;<br />
<a id="6" name="6"></a><br />
<strong>6、匿名函数<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 匿名/动态函数对于定义一个在运行时才能确定需求的函数而言是个很好的方法。匿名函数每次访问都会解析一次。使用匿名函数构造器：<br />
var variable = new Function("param1", "param2",...,"paramn","function body");<br />
<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: #008000">/*</span><span style="color: #008000">&nbsp;<br />
用户将通过&nbsp;alert对话框来设置定义函数所需的函数体及两个参数，<br />
然后调用该函数，<br />
将其生成的结果输出到页面上。<br />
<br />
注：FF调试通过，IE7异常<br />
</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">提示输入函数体和参数</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;func&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;prompt(</span><span style="color: #000000">"</span><span style="color: #000000">Enter&nbsp;function&nbsp;body:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;prompt(</span><span style="color: #000000">"</span><span style="color: #000000">Enter&nbsp;value&nbsp;of&nbsp;x:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;y&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;prompt(</span><span style="color: #000000">"</span><span style="color: #000000">Enter&nbsp;value&nbsp;of&nbsp;y:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">调用这个匿名参数</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;op&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Function(</span><span style="color: #000000">"</span><span style="color: #000000">x</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">y</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;func);<br />
</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;theAnswer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;op(x,&nbsp;y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">function&nbsp;anonymous(x,&nbsp;y)&nbsp;{<img alt="" src="http://www.blogjava.net/Images/dot.gif" />}</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #008000">//</span><span style="color: #008000">输出函数执行结果</span><span style="color: #008000"><br />
</span><span style="color: #000000">alert(</span><span style="color: #000000">"</span><span style="color: #000000">Function&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;func);<br />
alert(</span><span style="color: #000000">"</span><span style="color: #000000">x&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;y&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;y);<br />
alert(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;answer&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;theAnswer);<br />
<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000"><br />
输入/输出：<br />
Function&nbsp;is:&nbsp;return&nbsp;x&nbsp;*&nbsp;y;<br />
x&nbsp;is&nbsp;:&nbsp;33;&nbsp;y&nbsp;is&nbsp;:&nbsp;11;<br />
The&nbsp;answer&nbsp;is:&nbsp;363;<br />
</span><span style="color: #008000">*/</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="7" name="7"></a><br />
<strong>7、函数字面量</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 函数字面量也称函数表达式，因为这样创建的函数将成为表达式的一部分，而不是一个特有类型的语句，他们像匿名函数一样没有定义函数名称，但函数字面量只会被解析一次，它是静态的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 当你想实现如吧一个函数作为另一个函数的参数之类的扩展时，函数字面量的特色就会显示出来。<br />
<br />
//将第三个参数作为函数来声明<br />
function funcObject(x,y,z){<br />
&nbsp;&nbsp;&nbsp; alert(z(x,y));<br />
}<br />
<br />
//第三个参数是一个函数<br />
funcObject(3, 4, function(x, y){ return x*y})<br />
<img src ="http://www.blogjava.net/kiant/aggbug/321921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-26 16:29 <a href="http://www.blogjava.net/kiant/articles/321921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript学习指南（第2版）笔记(一) Script、数据类型和变量、操作符和语句</title><link>http://www.blogjava.net/kiant/articles/321745.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 24 May 2010 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/321745.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/321745.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/321745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/321745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/321745.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、Script的 defer属性<br />
</a><a href="#2">2、为body添加脚本<br />
</a><a href="#3">3、CDATA小节<br />
</a><a href="#4">4、null和undefined变量</a><br />
<a href="#5">5、缩减JavaScript代码<br />
</a><br />
<br />
<a id="1" name="1"></a><br />
<strong>1、Script的 defer属性<br />
<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp; 如果将defer属性设置为"defer"，那么表示该脚本不会生成任何文档内容，于是浏览器可以提前处理页面的剩余部分，在页面处理结束并做好显示准备时才处理脚本部分。defer属性可以提高页面载入的速度，特别是那些引用了大量的JavaScript代码或者庞大的JavaScript程序库的页面。 <br />
<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: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;defer</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">defer</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />no&nbsp;content&nbsp;being&nbsp;generated&nbsp;&nbsp;<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
</span></div>
<hr color="#3366ff" size="1" />
<br />
<a id="2" name="2"></a><br />
<strong>2、为body添加脚本<br />
<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp; 前面我们曾经说过，因为对script元素进行集中管理有利于网页的可维护性，所以script元素通常将添加在网页上的head元素中。然而，在body元素中添加脚本的原因往往是出于性能的考虑。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 因为浏览器从同一个域名并发载入的资源是有限制的，所以，当把脚本添加到head元素中时，首先载入的将是脚本，其次才是文档的剩余部分。此外，浏览器可能会延迟页面剩余部分的显示，因为脚本中可能会调用document.write方法修改document对象。如果JavaScript文件很庞大，那么网页中的图片以及其他重要的信息将会被延迟显示，这所带来的问题远比可维护性更加重要。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 即使在script元素中使用defer属性也不一定能完全解决该问题，特别是并发资源访问和页面显示的限制。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在High Performance Web Sites（中译版《高性能网站建设指南》一书中，作者推荐将script元素放在文档的最末尾处，这样网页的其他部分就可以优先载入。大多数复杂网站的开发人员更倾向于这种方法。这种方法带来的负面影响是脚本不容易查找，网页的可维护性也较差。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 那么什么才是最佳方法呢？我发现大多数网站并不引用庞大的JavaScript程序库，在保证较好性能的前提下，将脚本放在head元素中，也确保网页可维护性的优势。不过，如果的确需要使用庞大的JavaScript程序库，那么可以考虑将脚本放在页面的最末尾处。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不论采用何种方法，请确保脚本位置的一致性，要么全部放在head元素中，要么全部在body元素的最末尾处。
<hr color="#3366ff" size="1" />
<br />
<a id="3" name="3"></a><strong>3、CDATA小节<br />
</strong>&nbsp;<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: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&lt;![CDATA[&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;hello()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;msg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello,&nbsp;&lt;em&gt;World!&lt;/em&gt;</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;document.open();<br />
&nbsp;&nbsp;&nbsp;document.write(msg);<br />
&nbsp;&nbsp;&nbsp;document.close();<br />
}<br />
<br />
</span><span style="color: #008000">//</span><span style="color: #008000">]]&gt;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 之所以使用CDATA小节，是因为XHTML处理器在解释标记型语言时会识别出所有的开始标签和结束标签。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在页面文件中通过script元素的src属性引用的JavaScript，是XHTML标准所兼容的，并且不要求使用CDATA小节。如果是嵌入的JavaScript代码，那么就需要使用CDATA小节，特别是包含在body元素中的代码。对于大多数浏览器而言，还需要用JavaScript注释符（//）来隐藏CDATA小节，如示例1.3所示，否则将会出现JavaScript错误。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 当然，保持页面整洁的最佳方式是将JavaScript代码从页面中彻底移去，改成使用链接JavaScript文件的方式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在本书的大多数示例中，JavaScript代码是直接嵌入在页面里的，这样可以提高代码的可读性且易于检查。然而，Mozilla推荐将所有嵌入的JavaScript代码都从页面中移去，放在独立的JavaScript文件中。使用独立的JavaScript文件，可以避免校验以及文本解释错误等问题，而不用担心页面是以HTML还是XHTML的方式进行处理。<br />
<br />
提示<br />
&nbsp;&nbsp;&nbsp;&nbsp; 使用JavaScript文件往往也能提高网页载入的效率，因为浏览器会在第一次载入文件的时候进行缓存，引用相同文件时则会从缓存中获取。<br />
<hr color="#3366ff" size="1" />
<br />
<a id="4" name="4"></a><br />
<strong>4、null和undefined变量<br />
</strong><br />
null变量是已定义的、值为null的变量。以下是一个null变量的示例：<br />
var nullString = null; <br />
<br />
如果变量已经声明但是还没有初始化，那么就是undefined变量：<br />
var undefString; <br />
<br />
如果声明了变量并且赋予了初始值，那么该变量就不是null或undefined：<br />
var sValue = "";&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 当你使用JavaScript程序库时，或者在一些复杂的代码中，某些变量有可能还没有初始化；如果尝试在表达式中使用这样的变量，那么就有可能得到出乎意料的结果，通常会导致JavaScript错误。如果不确定变量的状态，那么可以在条件表达式中测试该变量，例如：&nbsp;<br />
if (sValue) ...&nbsp;&nbsp;&nbsp;&nbsp; // 如果变量是null或undefined，那么结果为true，否则是false&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在第3章中将详细介绍条件语句，现在你只需要知道该表达式会判断变量sValue是否已经声明并初始化，如果已声明并初始化则该表达式的值为true，否则，该表达式的值为false。
<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">if</span><span style="color: #000000">&nbsp;(unknownVariable)&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;false，变量没有声明或赋值&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(undefinedString)&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;false，变量没有赋值&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(nullString)&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;false，变量已经声明并且赋值，但是所赋的值是null&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(sValue)&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;true，变量已经声明并且赋值（包括空字符串）&nbsp;使用null关键字，可以判断数值是否为null：</span></div>
<br />
if (sValue == null)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在JavaScript中，即使变量已经声明，但只要还没有初始化就是undefined变量。如果变量已经声明并初始化，那么变量就不是null或undefined。然而，在该示例中它是一个全局变量，正如之前的章节所述，没有以var关键字声明的变量可能会引起各种各样的问题。<br />
<hr color="#3366ff" size="1" />
&nbsp; <br />
<a id="5" name="5"></a><br />
<strong>5、缩减JavaScript代码<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 空格能够提高代码的可读性，但同时也会增加文件的大小。通常情况下，这没什么影响，因为大多数JavaScript文件都非常小。然而，对于某些大型Ajax应用，或者复杂的JavaScript程序库来说，太大的JavaScript文件会影响载入JavaScript的速度。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果要尽可能压缩JavaScript文件，那么可以选用一些免费的工具，例如Dean Edward的Packer（http://dean.edwards.name/packer/），它能够在线压缩JavaScript代码。或者使用Wikipedia中"minify"条目（http://en.wikipedia.org/wiki/Minify）中所列举的工具，这些工具可以在桌面或者服务器上使用。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 另一类工具是用来保护JavaScript代码版权的。这些工具不仅仅会压缩JavaScript代码，甚至还会对代码进行加密，从而使代码难以阅读。 
<img src ="http://www.blogjava.net/kiant/aggbug/321745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-24 17:13 <a href="http://www.blogjava.net/kiant/articles/321745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[笔记] 技巧/诀窍：在ASP.NET中重写URL </title><link>http://www.blogjava.net/kiant/articles/320564.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 11 May 2010 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320564.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320564.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320564.html</trackback:ping><description><![CDATA[<br />
原文地址：<br />
技巧/诀窍：在ASP.NET中重写URL <a href="http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx" target="_blank">http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx</a><br />
<br />
<a href="#1">方法一：使用Request.PathInfo 参数而不是查询字符串<br />
</a><a href="#2">方法二：使用HttpModule实现URL重写<br />
</a><a href="#3">方法三：在IIS7中使用HttpModule 实现无扩展名的URL重写<br />
</a><a href="#4">方法四：在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写</a>&nbsp;<br />
<a href="#5">在URL重写里处理ASP.NET PostBack<br />
</a><a href="#6">正确地处理CSS和图像引用</a><br />
<br />
<br />
例程的URL重写场景<br />
<a href="http://www.store.com/products.aspx?category=books">http://www.store.com/products.aspx?category=books</a><br />
http://www.store.com/products.aspx?category=DVDs<br />
http://www.store.com/products.aspx?category=CDs<br />
<br />
<strong><a id="1" name="1"></a><br />
方法一：使用Request.PathInfo 参数而不是查询字符串</strong> <br />
<br />
http://www.store.com/products.aspx/Books<br />
http://www.store.com/products.aspx/DVDs<br />
http://www.store.com/products.aspx/CDs
<hr color="#3366ff" size="2" />
&nbsp; <br />
<strong><a id="2" name="2"></a><br />
方法二：使用HttpModule实现URL重写</strong> <br />
<br />
http://www.store.com/products/Books.aspx<br />
http://www.store.com/products/DVDs.aspx<br />
http://www.store.com/products/CDs.aspx
<hr color="#3366ff" size="2" />
&nbsp; <br />
<strong><a id="3" name="3"></a><br />
方法三：在IIS7中使用HttpModule 实现无扩展名的URL重写</strong> <br />
<br />
http://www.store.com/products/Books<br />
http://www.store.com/products/DVDs<br />
http://www.store.com/products/CDs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IIS 7.0使得处理这类情形容易之极。你现在可以在 IIS 请求管道的任何地方执行一个HttpModule，这意味着你可以使用上面的URLRewriter 模块来处理和重写无扩展名的URL(甚至是带有 .asp，.php，或 .jsp 扩展名的URL)。下面示范了你在IIS7中该如何配置：
<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: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configSections</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">section&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="rewriter"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requirePermission</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,&nbsp;Intelligencia.UrlRewriter"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configSections</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpModules</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="UrlRewriter"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.RewriterHttpModule,&nbsp;Intelligencia.UrlRewriter"</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">httpModules</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.webServer</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">modules&nbsp;</span><span style="color: #ff0000">runAllManagedModulesForAllRequests</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="UrlRewriter"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.RewriterHttpModule"</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">modules</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">validation&nbsp;</span><span style="color: #ff0000">validateIntegratedModeConfiguration</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.webServer</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">rewriter</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">rewrite&nbsp;</span><span style="color: #ff0000">url</span><span style="color: #0000ff">="~/products/(.+)"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="~/products.aspx?category=$1"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">rewriter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<hr color="#3366ff" size="2" />
<br />
<strong><a id="4" name="4"></a><br />
方法四：在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写</strong> <br />
<br />
<hr color="#3366ff" size="2" />
<br />
<strong><a id="5" name="5"></a><br />
在URL重写里处理ASP.NET PostBack</strong> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当使用URL重写时，会出现这样的问题，&lt;form&gt; 控件显示的URL不是原先请求的URL(譬如，/products/books)，而是重写过后的URL(譬如，/products.aspx?category=books)。这意味着，当你做一个postback到服务器时，URL不再是你原先干净利落的那个了。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ASP.NET 2.0中，有个比较干净的诀窍你可以用来重写&lt;form&gt;控件的action属性。具体地来说，你可利用新的ASP.NET 2.0控件适配器扩展架构来定制控件的输出，用你提供的值来覆盖action属性的值。这不要求在你的.aspx页面里做任何编码改动，而只要在你的/app_browsers文件夹里添加一个.browser文件，注册使用一个控件适配类即可输出新的action属性。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/UrlRewrite.jpg" border="0" />
<hr color="#3366ff" size="2" />
<br />
&nbsp; <strong><a id="6" name="6"></a><br />
正确地处理CSS和图像引用<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不少人在第一次使用URL重写时，有时会遇上一个疑难杂症，就是他们发现他们的图像和CSS样式表引用有时会停止工作。这是因为他们在HTML网页里有对这些文件的相对引用，当你开始在应用里重写URL时，你需要意识到浏览器经常会在不同的逻辑层次结构层上(logical hierarchy levels)请求文件，而不是实际存储在服务器上的东西。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 譬如，如果我们上面的/products.aspx网页对.aspx 网页里的logo.jpg有一个相对引用，但是通过 /products/books.aspx这个URL来请求的，那么浏览器在显示网页时，将会发出一个对/products/logo.jpg的请求，而不是对/logo.jpg的请求。要正确地引用这个文件，确认你用根目录限定了(root qualify)CSS和图像引用(&#8220;/style.css&#8221;，而不是 &#8220;style.css&#8221;)。对于ASP.NET控件，你也可以使用&#8220;~&#8221;句法从你应用的根目录来引用文件(譬如，&lt;asp:image imageurl="~/images/logo.jpg" runat="server"/&gt;) 。 <br />
<br />
&nbsp; 附：<a href="/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip">/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip</a>&nbsp; 附加CS版的文件<br />
<img src ="http://www.blogjava.net/kiant/aggbug/320564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-11 10:52 <a href="http://www.blogjava.net/kiant/articles/320564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各浏览器中javascript兼容性问题</title><link>http://www.blogjava.net/kiant/articles/320537.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 10 May 2010 16:10:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320537.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320537.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320537.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、使用setAttribute()改变网页中标签的onclick属性<br />
</a><a href="#2">2、IE中通过 setAttribute添加的属性</a><br />
<br />
<br />
<a id="1" name="1"></a><br />
<strong>1、使用setAttribute()改变网页中标签的onclick属性</strong> *p1<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setAttribute设置style和onclick这些属性在IE中是行不通的。
<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: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;cancleEvent()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('a').setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">onclick</span><span style="color: #000000">"</span><span style="color: #000000">,'');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('g').innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">取消事件！</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;setEvent()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('a').setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">onclick</span><span style="color: #000000">"</span><span style="color: #000000">,'alert(</span><span style="color: #000000">"</span><span style="color: #000000">你好！</span><span style="color: #000000">"</span><span style="color: #000000">)');</span><span style="color: #008000">//</span><span style="color: #008000">firefox</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('a').onclick</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;{&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">This&nbsp;is&nbsp;a&nbsp;test!</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;}</span><span style="color: #008000">//</span><span style="color: #008000">IE&nbsp;firefox也有作用,但是使用firebug调试看不到修改后的效果，使用上面的方法可以看到。</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('Div1').innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">设置事件！</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
<br />
注：<br />
*p1：使用setAttribute()改变网页中标签的onclick属性&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://blog.csdn.net/Cnami/archive/2008/05/27/2486516.aspx">http://blog.csdn.net/Cnami/archive/2008/05/27/2486516.aspx</a><br />
<hr color="#3366ff" size="2" />
<br />
<a id="2" name="2"></a><br />
<strong>2、IE中通过 setAttribute添加的属性</strong> *p2<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IE下setAttribute设置元素的对象、集合和事件属性都只当成普通属性，起不到原有的作用，但可以直接进行赋值操作。<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: #000000">&lt;</span><span style="color: #000000">script&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;!--</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;init()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;obj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">btn</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.onclick</span><span style="color: #000000">=</span><span style="color: #000000">changeValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;obj.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#CC6600</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
}<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;changeValue()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">txt</span><span style="color: #000000">"</span><span style="color: #000000">).value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">New&nbsp;value!</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
}<br />
</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
<br />
注：<br />
*p2：[求助]通过 setAttribute 添加的属性在 IE 下不被实现？&nbsp;<a href="http://bbs.blueidea.com/viewthread.php?tid=2290521">http://bbs.blueidea.com/viewthread.php?tid=2290521</a><br />
<hr color="#3366ff" size="2" />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/320537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-11 00:10 <a href="http://www.blogjava.net/kiant/articles/320537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET 会话状态</title><link>http://www.blogjava.net/kiant/articles/320456.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 10 May 2010 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320456.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320456.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320456.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、ASP.NET 会话状态<br />
</a><a href="#2">2、会话状态模式</a><br />
<a href="#3">3、ASP.NET在不同应用程序之间共享Session</a><br />
<a href="#4">4、Session无故丢失</a><br />
<a href="#5">5、客户端使用Cookieless的方式存储Session信息<br />
</a><a href="#6">6、Session.SessionID 固定<br />
</a><br />
<br />
<a id="1" name="1"></a><br />
<p><strong>1、ASP.NET 会话状态</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话状态可在以下情况下使用：存储特定于单独会话的短期信息，并且需要较高的安全性。不要在会话状态中存储大量的信息。需要注意，将为应用程序中每一会话的生存期创建并维护会话状态对象。在支持许多用户的应用程序中，这可能会占用大量服务器资源并影响可缩放性。*p1 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET 默认情况下将会话信息存储在 ASP.NET 应用程序的内存空间。您可以使用一个独立的服务存储会话信息以便重新启动 ASP.NET 应用程序后会话信息仍然保留；或将会话信息存储在 SQL Server 中以便会话信息可供网络场中的多个 Web 服务器使用（重新启动 ASP.NET 应用程序后会话信息也会保留）；或将会话信息存储在自定义数据存储区。有关更多信息，请参见<a href="http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx" target="_blank">会话状态模式</a>。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了会话状态外，ASP.NET 还提供在应用程序中保留数据的一些其他方式。有关每种方式的比较，请参见 <a href="http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx" target="_blank">ASP.NET 状态管理建议</a>。*p2<br />
<br />
注:<br />
*p1：ASP.NET 状态管理建议&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx</a><br />
*p2：ASP.NET 会话状态&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/87069683(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/87069683(v=VS.80).aspx</a>
<hr color="#3366ff" size="2" />
<a id="2" name="2"></a><br />
<strong>2、会话状态模式<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET 会话状态支持若干用于会话数据的存储选项。每个选项都由 SessionStateMode 枚举中的一个值标识。下面的列表描述了可用的会话状态模式：
<p>&nbsp;</p>
<ul>
    <li>InProc 模式，此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。注意：它是唯一支持 Session_OnEnd 事件的模式。<br />
    <br />
    <li>StateServer 模式，此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态，并让会话状态可用于网络场中的多个 Web 服务器。注意：如果模式设置为 StateServer，则存储在会话状态中的对象必须是可序列化的。<br />
    <br />
    <li>SQLServer 模式，将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态，并让会话状态可用于网络场中的多个 Web 服务器。注意：如果是 SQL Server 模式，则存储在会话状态中的对象必须是可序列化的。<br />
    <br />
    <li>Custom 模式，此模式允许您指定自定义存储提供程序。<br />
    <br />
    <li>Off 模式，此模式禁用会话状态。 </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;通过在应用程序的 Web.config 文件中为 sessionState 元素的 mode 属性分配一个 SessionStateMode 枚举值，可以指定要让 ASP.NET 会话状态使用的模式。除了 InProc 和 Off 之外，其他模式都需要附加参数，例如将在本主题后面讨论的连接字符串值。通过访问 System.Web.SessionState.HttpSessionState.Mode 属性的值，可以查看当前选定的会话状态。*p3<br />
<br />
注：<br />
*p3：会话状态模式&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx</a> </p>
<hr color="#3366ff" size="2" />
<a id="3" name="3"></a><br />
<p><strong>3、ASP.NET在不同应用程序之间共享Session</strong> *p4<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多个单独的应用程序，如何将这些模块集中身份验证与授权过程</p>
<p>方案1：<br />
将每个独立的Web应用程序放到统一的解决方案中，实现起来复杂，易用性不高。<br />
<br />
方案2：利用Session会话共享<br />
InProc模式，Session被存储在IIS进程中，每个虚拟目录是隔离的，所以无法共享Session。</p>
<p>StateServer 模式，虽然是独立的状态服务器（进程），但在内存中这些应用程序还是隔离的。</p>
<p>SQLServer 模式，由于对Session的全部操作都是由存储过程来实现的，而且存储过程未进行加密，可以通过修改存储过程的内部结构来达到共享的目的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ASPState数据库ASPStateTempApplications表中存储的是应用程序信息，每个应用程序在启动的时候在这里会注册一条记录，包括应用程序的ID（通过哈希算法生成的）和应用程序名称。有多少个应用程序，在这个表里就对应多少条记录。那我们现在要做的是把这些记录变成一条记录，也就是要欺骗Framework，让它认为这些不同的应用程序是同一个应用程序。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;TempGetAppID存储过程，这个存储过程是用于通过传递应用程序名称来得到应用程序ID信息的。每个应用程序在调用这个过程时，这个过程会去AspStateTempApplications中检查是否有相应的记录，如果没有，就插入记录，然后返回相应的ID。<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dbo</span><span style="color: #ff0000">]</span><span style="color: #000000">.</span><span style="color: #ff0000">[</span><span style="color: #ff0000">TempGetAppID</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tAppName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;OUTPUT<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">LOWER</span><span style="color: #000000">(</span><span style="color: #008000">@appName</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">变量值固定，使所有应用程序通用为一个</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">/lm/w3svc/650056020/root/personnel/share</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;AppId<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">tempdb</span><span style="color: #ff0000">]</span><span style="color: #000000">.dbo.ASPStateTempApplications<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;AppName&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000"><br />
</span></div>
<p><br />
注：<br />
*p4：ASP.NET在不同应用程序之间共享Session &nbsp;<a href="http://www.3qsoft.com/Article.aspx?ID=173">http://www.3qsoft.com/Article.aspx?ID=173</a> </p>
<hr color="#3366ff" size="2" />
<a id="4" name="4"></a><br />
<strong>4、Session无故丢失</strong> *p5<br />
<br />
mode="InProc"&nbsp; <br />
==&nbsp; <br />
默认的配置方式很容易丢失Session 请参考&nbsp;
<p>asp中Session的工作原理：&nbsp; <br />
asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中，也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时，这些信息也就丢失。另外，重起或者关闭IIS服务都会造成信息的丢失。&nbsp; </p>
<p>原因1：&nbsp; <br />
bin目录中的文件被改写，asp.net有一种机制，为了保证dll重新编译之后，系统正常运行，它会重新启动一次网站进程，这时就会导致Session丢失，所以如果有access数据库位于bin目录，或者有其他文件被系统改写，就会导致Session丢失&nbsp; </p>
<p>原因2：&nbsp; <br />
文件夹选项中，如果没有打开&#8220;在单独的进程中打开文件夹窗口&#8221;，一旦新建一个窗口，系统可能认为是新的Session会话，而无法访问原来的Session，所以需要打开该选项，否则会导致Session丢失&nbsp; </p>
<p>原因3：&nbsp; <br />
似乎大部分的Session丢失是客户端引起的，所以要从客户端下手，看看cookie有没有打开&nbsp; </p>
<p>原因4：&nbsp; <br />
Session的时间设置是不是有问题，会不会因为超时造成丢失&nbsp; </p>
<p>原因5：&nbsp; <br />
IE中的cookie数量限制（每个域20个cookie）可能导致session丢失&nbsp; </p>
<p>原因6：&nbsp; <br />
使用web garden模式，且使用了InProc mode作为保存session的方式&nbsp; </p>
<p>解决丢失的经验&nbsp; <br />
1. 判断是不是原因1造成的，可以在每次刷新页面的时候，跟踪bin中某个文件的修改时间&nbsp; <br />
2. 做Session读写日志，每次读写Session都要记录下来，并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作，这样找丢失的原因会方便很多&nbsp; <br />
3. 如果允许的话，建议使用state server或sql server保存session，这样不容易丢失&nbsp; <br />
4. 在global.asa中加入代码记录Session的创建时间和结束时间，超时造成的Session丢失是可以在SessionEnd中记录下来的。&nbsp; <br />
5. 如果有些代码中使用客户端脚本，如javascript维护Session状态，就要尝试调试脚本，是不是因为脚本错误引起Session丢失&nbsp; </p>
<p>问：为什么Session在有些机器上偶尔会丢失？&nbsp; <br />
答：可能和机器的环境有关系，比如：防火墙或者杀毒软件等，尝试关闭防火墙。&nbsp; </p>
<p>问：为什么当调用Session.Abandon时并没有激发Session_End方法？&nbsp; <br />
答：首先Session_End方法只支持InProc（进程内的）类型的Session。其次要激发Session_End方法，必须存在Session（即系统中已经使用Session了），并且至少要完成一次请求（在这次请求中会调用该方法）。&nbsp; </p>
<p>问：为什么当我在InProc模式下使用Session会经常丢失？&nbsp; <br />
答：该问题通常是由于应用程序被回收导致的，因为当使用进程内Session时，Session是保存在aspnet_wp进程中，当该进程被回收Session自然也就没有了，确定该进程是否被回收可以通过查看系统的事件查看器获得信息。&nbsp; <br />
具体信息请参考：&nbsp; <br />
Session variables are lost intermittently in ASP.NET applications&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148&nbsp; <br />
在1.0的时候也有一个bug会导致工作进程被回收并重启，该bug已经在1.1和sp2中修复。&nbsp; <br />
关于该bug的详细信息请参考：&nbsp; <br />
ASP.NET Worker Process (Aspnet_wp.exe) Is Recycled Unexpectedly.&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792&nbsp; </p>
<p><br />
问：什么类型的对象可以保存在Session里？&nbsp; <br />
答：这依赖使用的Session的模式，当使用的是进程内（InProc）的Session那么可以轻松的保存任何对象。如果你使用了非InProc的模式，则只能保存可以序列化和反序列化的对象，如果此时保存的对象不支持序列化，则不能保存到这种模式（非InProc）的Session里。&nbsp; </p>
<p>问：为什么在Session_End中不能使用Response.Redirect和Server.Transfer方法跳转页面？&nbsp; <br />
答：Session_End是一个在服务器内部激发的事件处理函数。它是基于一个服务器内部的计时器的，在激发该事件时服务器上并没有相关的HttpRequest对象，因此此时并不能使用Response.Redirect和Server.Transfer方法。&nbsp; </p>
<p>问：在Session_End中是否可以获得HttpContext对象？&nbsp; <br />
答：不行，因为这个事件并没有和任何的请求（Request）相关联，没有基于请求的上下文。&nbsp; </p>
<p>问：在Web Service中该如何使用Session？&nbsp; <br />
答：为了在Web Service中使用Session，需要在Web Service的调用方做一些额外的工作，必须保存和存储调用Web Service时使用的Cookie。详细信息请参考MSDN文档的HttpWebClientProtocol.CookieContainer属性。然而，如果你使用代理服务器访问Web Service由于框架的限制，两者不能共享Session。&nbsp; </p>
<p><br />
问：当我使用webfarm时，当我重定向到其他的Web服务器时Session为什么会丢失？&nbsp; <br />
答：详细信息请参考：&nbsp; <br />
PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056&nbsp; </p>
<p>问：Session在global.asax中的那些事件中有效？&nbsp; <br />
答：Session只有在AcquireRequestState事件之后有效，该事件之后的事件都可以使用Session。&nbsp; </p>
<p><br />
问：为了可以顺序访问Session的状态值，Session是否提供了锁定机制？&nbsp; <br />
答：Session实现了Reader/Writer的锁机制：&nbsp; <br />
当页面对Session具有可写功能（即页面有 &lt;%@ Page EnableSessionState="True" %&gt;标记），此时直到请求完成该页面的Session持有一个写锁定。&nbsp; <br />
当页面对Session具有只读功能（即页面有 &lt;%@ Page EnableSessionState="ReadOnly" %&gt;标记），此时知道请求完成该页面的Session持有一个读锁定。&nbsp; <br />
读锁定将阻塞一个写锁定；读锁定不会阻塞读锁定；写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时，其中一个要等待另一个（稍快的那个）完成后，才开始写。&nbsp; </p>
<p>问：Session平滑超时意味着什么？&nbsp; <br />
答：Session平滑超时意味着只要你的页面访问（使用）了Session，超时时间将被刷新（可以理解为重新计时），即从该页面请求开始，将重新计算超时时间。但是，该页面不能禁用Session。它会自动的访问当前页面的Session，刷新超时时间。&nbsp; </p>
<p>问：在global.asax中的事件处理函数中Session为什么无效？&nbsp; <br />
答：依赖于在哪个事件处理函数中使用Session，Session在AcquireRequestState事件之后才有效，该事件之后的所有事件处理函数都可以使用Session，之前的则不能。&nbsp; </p>
<p><br />
问：当我使用InProc模式保存Session时，此时的Session是保存在哪里？&nbsp; <br />
答：不同的IIS的处理方式不同，&nbsp; <br />
当使用的是IIS5的时候Session是保存在aspnet_wp.exe的进程空间里的。&nbsp; <br />
当使用的是IIS6时，默认情况下所有的应用程序共享应用程序池，Session保存在w3wp.exe的进程空间中。&nbsp; </p>
<p>问：当页面出现错误后我的Session是否将被保存？我需要在Session_End中处理一些清理工作，但是失败了，为什么？&nbsp; <br />
答：Session_End只有在Session运行在InProc模式下才会被执行。Session_End使用的帐号是运行aspnet_wp工作进程的帐号（这个可以在machine.config中设置）。因此，如果在Session_End方法里，使用集成安全性链接到SQL，它将使用aspnet_wp进程的帐号打开链接，此时成功与否则依赖于你的SQL的安全性设置。&nbsp; </p>
<p>问：在Session_End是我是否可以获得有效的HttpSessionState和HttpContext对象？&nbsp; <br />
答：你可以在这个方法中获得HttpSessionState对象，可以直接使用Session来访问即可。但是不能获得HttpContext对象，因为该事件并没有和任何请求相关联，因此不存在上下文对象。&nbsp; </p>
<p>问：在SQLServer模式下使用Session，为什么我的Session不过期？&nbsp; <br />
答：在SqlServer模式下，Session的过期是通过SQL Agent的注册工作完成的，请检查你的SQL Agent是否运行？&nbsp; </p>
<p>问：当我设置EnableSessionState为&#8220;ReadOnly&#8221;后，但是我在InProc模式下依然可以修改Session的值，这是为什么？&nbsp; <br />
答：即使EnableSessionState标示为ReadOnly，但是在InProc模式下用户依然可以编辑Session。唯一不同的是，在请求过程中Session将不会被锁住。&nbsp; </p>
<p>问：为什么在切换成SQLServer模式后我的请求被挂起了？&nbsp; <br />
答：检查在Session里面是否都保存的是可以保存在SQLServer模式下的对象，即这些对象必须支持序列化。&nbsp; </p>
<p><br />
问：当Session设置成cookieless后会有什么影响？&nbsp; <br />
答：当把cookieless设置成true时，主要会有下面的约束：&nbsp; <br />
1、在页面中不能使用绝对链接&nbsp; <br />
2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。&nbsp; <br />
如果发送一个链接给其他人，此时的URL里面将包含Session ID的信息，所以两个人将公用一个Session。&nbsp;&nbsp;<br />
<br />
注：<br />
*p5：Session丢失&nbsp;<a href="http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html">http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html</a> </p>
<hr color="#3366ff" size="2" />
<a id="5" name="5"></a><br />
<strong>5、客户端使用Cookieless的方式存储Session信息</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionState中的cookieless="false"改为：cookieless="true"，这样，客户端的Session信息就不再使用Cookie存储了，而是将其通过URL存储。关闭当前的IE，打开一个新IE，重新访问刚才的Web应用程序，浏览器地址就会变为 http://localhost/MyTestApplication/(<strong>ulqsek45heu3ic2a5zgdl245</strong>)/default.aspx中黑体标出的就是客户端的Session ID。注意，这段信息是由IIS自动加上的，不会影响以前正常的连接。 *p6 <br />
<br />
问：当Session设置成cookieless后会有什么影响？&nbsp; <br />
答：当把cookieless设置成true时，主要会有下面的约束：&nbsp; <br />
1、在页面中不能使用绝对链接&nbsp; <br />
2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。&nbsp; <br />
如果发送一个链接给其他人，此时的URL里面将包含Session ID的信息，所以两个人将公用一个Session。 *p7<br />
<br />
注：<br />
*p6：[ASP.NET] Session 详解 &nbsp;<a href="http://www.blueidea.com/tech/program/2004/1856.asp">http://www.blueidea.com/tech/program/2004/1856.asp</a><br />
*p7：Session丢失&nbsp;<a href="http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html">http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html</a>
<hr color="#3366ff" size="2" />
<p>&nbsp;<a id="6" name="6"></a><br />
<strong>6、Session.SessionID 固定</strong></p>
<ul>
    <li>IsNewSession：取得值，指出工作階段是否以目前要求建立。<br />
    <br />
    <li>SessionID：取得工作階段的唯一工作階段識別項。 </li>
</ul>
<p>re: 因為Session在還沒裝物件之前, ID都不是固定的. 如果您賦予Session內容, ex: Session["xxx"]=123 , 您會發現ID就會固定. *p8<br />
<br />
注：<br />
*p8：[ASP.Net]Session.IsNewSession與Session.SessionID <a href="http://www.dotblogs.com.tw/yilinliu/archive/2009/04/24/8163.aspx">http://www.dotblogs.com.tw/yilinliu/archive/2009/04/24/8163.aspx</a><br />
<hr color="#3366ff" size="2" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/kiant/aggbug/320456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-10 10:34 <a href="http://www.blogjava.net/kiant/articles/320456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net获取网站路径</title><link>http://www.blogjava.net/kiant/articles/320085.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sat, 08 May 2010 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320085.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320085.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320085.html</trackback:ping><description><![CDATA[<p><br />
引用自：<br />
asp.net获取网站路径<br />
http://hi.baidu.com/zhangfengbang/blog/item/5f99d74b0ce661f883025cbc.html<br />
HttpRequest 成员<br />
http://msdn.microsoft.com/zh-cn/library/system.web.httprequest_members(v=VS.80).aspx<br />
ASP.NET获取网站根目录的url的函数，很简单<br />
<a href="http://www.xueit.com/html/2009-03/21_932_00.html">http://www.xueit.com/html/2009-03/21_932_00.html</a><br />
&nbsp;<br />
</p>
<br />
<hr color="#999999" size="4" />
<strong>网站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath<br />
虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath</strong>
<p><br />
任何于Request/HttpContext.Current等相关的方法, 都只能在有请求上下文或者页面时使用. 即在无请求上下文时,HttpContext.Current为null. 而上面提到的方法一直可用.</p>
<p>对于全局Cache对象的访问亦然.<br />
<br />
<br />
</p>
<p>
<hr color="#999999" size="4" />
<strong>示例：输出asp.net 网站路径。</strong>&nbsp;<br />
<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">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;responseHtml()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Text.StringBuilder&nbsp;sb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Text.StringBuilder();<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">输出:当前时间:&nbsp;2007-08-30&nbsp;11:03:49</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前时间:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(DateTime.Now.ToString())));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.CurrentExecutionFilePath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取当前应用程序的根目录路径:&nbsp;/aDirectory</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取当前应用程序的根目录路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.ApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.FilePath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.Path)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取当前正在执行的应用程序的根目录的物理文件系统路径:&nbsp;E:\Visual&nbsp;Studio&nbsp;2005\</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取当前正在执行的应用程序的根目录的物理文件系统路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.PhysicalApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取与请求的&nbsp;URL&nbsp;相对应的物理文件系统路径:&nbsp;E:\Visual&nbsp;Studio&nbsp;2005\\aDirectory\</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取与请求的&nbsp;URL&nbsp;相对应的物理文件系统路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.PhysicalApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(sb.ToString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;<br />
<br />
<br />
</p>
<hr color="#999999" size="4" />
<strong>在ASP.NET编程中经常需要用Request获取url的有关信息.<br />
<br />
</strong>测试的url地址是http://www.test.com/testweb/default.aspx, 结果如下：<br />
Request.ApplicationPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb<br />
Request.CurrentExecutionFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.FilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.PathInfo: <br />
Request.PhysicalApplicationPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:\WWW\testweb\<br />
Request.PhysicalPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:\WWW\testweb\default.aspx<br />
Request.RawUrl:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Url.AbsolutePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Url.AbsoluteUri:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.test.com/testweb/default.aspx<br />
Request.Url.Host:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www.test.com<br />
Request.Url.LocalPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx&nbsp;<br />
<br />
当url中带参数时可以使用:<br />
HttpContext.Current.Request.Url.PathAndQuery.ToString()//<br />
<br />
本页地址:&nbsp;&nbsp; Request.URL;&nbsp; <br />
<br />
上页地址:&nbsp;&nbsp; <br />
Request.UrlReferrer&nbsp;&nbsp; <br />
Request.ServerViables["http_referer"]&nbsp;&nbsp; <br />
Request.RawUrl&nbsp;&nbsp; <br />
Request.RawUrl.QueryAndPath&nbsp;&nbsp; <br />
System.IO.Path.GetFileName(Request.FilePath.ToString())&nbsp; <br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>获取网站根目录的url源代码</strong><span style="font-size: 8pt"><span style="font-size: 10pt">--2010.05.09</span><br />
<span style="font-size: 10pt">http://www.xueit.com/html/2009-03/21_932_00.html</span><br />
<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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetRootURI()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpContext&nbsp;HttpCurrent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpContext.Current;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpRequest&nbsp;Req;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(HttpCurrent&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Req&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpCurrent.Request;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Req.Url.GetLeftPart(UriPartial.Authority);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">直接安装在&nbsp;&nbsp;&nbsp;Web&nbsp;&nbsp;&nbsp;站点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">安装在虚拟子目录下&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Req.ApplicationPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;AppPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<span style="font-size: 12pt"><span style="font-size: 12pt">可修改为静态属性</span>&nbsp;
<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"><br />
private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;rootURI;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;获得网站根目录的url的函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;</span><span style="color: #008000">应用程序根目录&nbsp;eg:&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline"><a href="http://www.xxx.net:2156/im">http://www.xxx.net</span><span style="color: #008000">:2156/im</a> </span><span style="color: #808080">&lt;/returns&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;RootURI<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">.IsNullOrEmpty(rootURI))<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;&nbsp;&nbsp;&nbsp;&nbsp;HttpContext&nbsp;HttpCurrent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpContext.Current;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpRequest&nbsp;Req;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(HttpCurrent&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<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;&nbsp;&nbsp;&nbsp;&nbsp;Req&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpCurrent.Request;<br />
<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">string</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Req.Url.GetLeftPart(UriPartial.Authority);<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">if</span><span style="color: #000000">&nbsp;(Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">)<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: #008000">//</span><span style="color: #008000">直接安装在&nbsp;&nbsp;&nbsp;Web&nbsp;&nbsp;&nbsp;站点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><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;rootURI&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority;<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">else</span><span style="color: #000000"><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: #008000">//</span><span style="color: #008000">安装在虚拟子目录下&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><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;rootURI&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Req.ApplicationPath;<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;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rootURI;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
</span></span>
<img src ="http://www.blogjava.net/kiant/aggbug/320085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-09 00:02 <a href="http://www.blogjava.net/kiant/articles/320085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net对于图像文件的操作--存储、读取访问</title><link>http://www.blogjava.net/kiant/articles/320052.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 04 May 2010 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320052.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320052.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320052.html</trackback:ping><description><![CDATA[<p>内容引用自：<br />
菜鸟问题,高分求解:关于SQL Server存储图片的问题<br />
http://topic.csdn.net/t/20050415/20/3940356.html</p>
<p>数据库中Image类型的数据的存取(For C#/ASP.NET)<br />
http://www.cnblogs.com/billsfeng/archive/2008/07/31/1257579.html</p>
<p>SQL Server存储图像数据的策略与方法 <br />
http://www.yesky.com/20030113/1648152.shtml<br />
<br />
How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET<br />
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158<br />
</p>
<br />
<br />
<hr color="#999999" size="4" />
<strong>1、图片存储</strong><br />
<br />
a.存储于数据库<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;在大多数情况下，最好把图片文件与其它数据一起存在数据库中。因为将影像数据文件存储在数据库中有许多优点：<br />
<br />
　　<strong>易于管理</strong>&nbsp;当BLOB与其他数据一起存储在数据库中时，BLOB和表格是数据一起备份和恢复。这样就降低了表格数据与BLOB数据不同步的机会，而且降低了其他用户无意中删除了文件系统中BLOB数据位置的路径和风险。另外，将数据存储在数据库中BLOB和其他数据的插入、更新和删除都在同一个事务中实现。这样就确保了数据的一致性和文件与数据库之间的一致性。还有一点好处是不需要为文件系统中的文件单独设置安全性。<br />
<br />
　　<strong>可伸缩性</strong>&nbsp;尽管文件系统被设计为能够处理大量不同大小的对象，但是文件系统不能对大量小文件进行优化。在这种情况下，数据库系统可以进行优化。<br />
<br />
　　<strong>可用性</strong>&nbsp;数据库具有比文件系统更多的可用性。数据库复制允许在分布式环境中复制、分配和潜在的修改数据。在主系统失效的情况下，日志转移提供了保留数据库备用副本的方法。</span></div>
<em style="font-size: 8pt">引自：SQL Server存储图像数据的策略与方法</em><br />
<br />
<br />
b.存储于文件系统
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">当然，在某些情况下，将图片存储在文件系统中将是更好的选择：<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">）使用图片的应用程序需要数据流性能，例如实时的视频重现。<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">）象Microsoft&nbsp;PhotoDraw或者Adobe&nbsp;Photoshop这样的应用程序经常访问BLOB，这些应用程序只知道怎样访问文件。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">）需要使用一些NTFS文件系统中的特殊功能，例如远程存储。</span></div>
<em style="font-size: 8pt">引自：SQL Server存储图像数据的策略与方法</em><br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 建议：减轻数据库处理负担,也可以建立专门的文件服务器存放图片和视频.<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>2、数据库存储及读取图片数据</strong><br />
<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="font-weight: bold; color: #800000">1</span><span style="color: #000000">.将Image图像文件存入到数据库中&nbsp;&nbsp;我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.<br />
<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">.从SQL&nbsp;Server数据库读取Image类型的数据,并转换成bytes</span><span style="color: #ff0000">[]</span><span style="color: #000000">或Image图像文件</span></div>
<em style="font-size: 8pt">引自：数据库中Image类型的数据的存取(For C#/ASP.NET)</em><br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>3、asp.net中自定义对图片文件的访问</strong><br />
<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: #000000">web.config<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;vs调试、iis6&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpHandlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.jpg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.jpeg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.png"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.bmp"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</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">httpHandlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.webServer</span><span style="color: #0000ff">&gt;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;iis7&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jpgMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.jpg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jpegMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.jpeg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="pngMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.png"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bmpMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.bmp"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</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">handlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.webServer</span><span style="color: #0000ff">&gt;</span></div>
<br />
ImageHandler 图片缩放与水印效果<br />
http://www.blogjava.net/kiant/articles/317469.html<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>4、其他组件</strong><br />
<br />
Persits AspJpeg组件图片水印\缩略图\图片合并\图片切割\实例教程<br />
http://www.aspxhome.com/asp/component/200812/620614.htm<br />
<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: #000000"><strong>AspJpeg功能摘要</strong><br />
支持JPEG,&nbsp;GIF,&nbsp;BMP,&nbsp;TIFF&nbsp;和&nbsp;PNG&nbsp;格式图片.&nbsp;输出格式始终为&nbsp;JPEG<br />
源图片可以来源于磁盘、内存、或者记录集（数据库）<br />
缩略图片可以保存到磁盘、内存、或者HTTP流<br />
支持三种更改大小方式:&nbsp;nearest-neighbor,&nbsp;bilinear,&nbsp;and&nbsp;bicubic.&nbsp;<br />
可以在图片之上添加图片或者文字.&nbsp;<br />
支持画中画<br />
支持复制，反转，旋转，锐化，灰度调节.<br />
可以调节压缩比率，以得到最佳输出效果和大小.&nbsp;<br />
从Jpeg图片中抽取EXIF&nbsp;和&nbsp;IPTC数据.<br />
CMYK-RGB转换<br />
Read/write&nbsp;access&nbsp;to&nbsp;individual&nbsp;pixels&nbsp;of&nbsp;an&nbsp;image.&nbsp;（从图象中对任意象素进行读/写存取。）</span></div>
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>5、C# 处理GIF 图片的问题？（分不够，还有）</strong><br />
http://topic.csdn.net/t/20060703/11/4856635.html<br />
<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: #000000">8&nbsp;楼tzzzc（冷剑）回复于&nbsp;2006-07-03&nbsp;13:33:19&nbsp;得分&nbsp;0&nbsp;<br />
to:Knight94(愚翁)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;Graphics&nbsp;&nbsp;&nbsp;myImg&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;Graphics.FromImage(zoomImg);//创建Graphics&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;在最后一句出现问题(处理GIF&nbsp;&nbsp;&nbsp;图片时候，提示无法从带有索引像素格式的图像创建&nbsp;&nbsp;&nbsp;Graphics)，老提示：A&nbsp;&nbsp;&nbsp;Graphics&nbsp;&nbsp;&nbsp;object&nbsp;&nbsp;&nbsp;cannot&nbsp;&nbsp;&nbsp;be&nbsp;&nbsp;&nbsp;created&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;an<br />
<br />
<br />
9&nbsp;楼Knight94（愚翁）回复于&nbsp;2006-07-03&nbsp;13:41:34&nbsp;得分&nbsp;0<br />
&nbsp;不要用gif图像直接生成graphics对象，&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;处理流程：&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;1、gif&nbsp;&nbsp;&nbsp;分解成png或者jpg文件组；&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;2、对每个png或者jpg文件进行处理；&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;3、把处理好的png或者jpg文件组，进行合成一个gif。&nbsp;&nbsp;&nbsp;</span></div>
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>6、ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法</strong><br />
详细出处参考：http://www.jb51.net/article/17063.htm<br />
<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: #000000">Response.ContentType&nbsp;=&nbsp;"image/PNG";&nbsp;<br />
using&nbsp;(MemoryStream&nbsp;ms&nbsp;=&nbsp;new&nbsp;MemoryStream())&nbsp;<br />
{&nbsp;<br />
img.Save(ms,&nbsp;ChartFormat.Png);&nbsp;<br />
Response.OutputStream.Write(ms.GetBuffer(),&nbsp;0,&nbsp;(int)ms.Length);&nbsp;<br />
}&nbsp;<br />
<br />
就可以输入png图片了。&nbsp;<br />
这是由于Response.OutputStream这个流的无法往回读取造成的，也就是它的CanSeek属性是false。png图像生成的时候不像jpeg，不是流式的，已经写入的就不再管了，而是需要往回不断地写入结构数据。但是response流无法往回seek，所以直接用就不行了。改成一个可以seek的MemoryStream，先生成好png图片，然后再输出到response流。&nbsp;</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/320052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-04 15:41 <a href="http://www.blogjava.net/kiant/articles/320052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于在数据库中存储层次数据的一点看法与理解</title><link>http://www.blogjava.net/kiant/articles/319878.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sun, 02 May 2010 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319878.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319878.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319878.html</trackback:ping><description><![CDATA[<p><br />
文章内容引用自：<br />
全面了解数据库设计中分类算法<br />
http://blog.csdn.net/hyzhx/archive/2008/03/21/2201465.aspx<br />
<br />
在数据库中存储层次数据实现无限级分层<br />
http://www.52web.com/52article/?view-250.html<br />
http://www.thinkly.cn/index.php/archives/354<br />
<br />
商品无限分类的算法如何优化?<br />
http://www.javaeye.com/topic/170744<br />
<br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于无限分类的设计网上讨论有很多，说白了就是在数据库中设计树的问题，在这里仅对我所知的做些记录与对比。<br />
假设表结构为下图，并且为某表的外键引用。要求：<br />
1、实现无限层次。<br />
2、能找到节点的路径。<br />
3、能找到所有子孙节点集合（获取树）。<br />
<img height="288" alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/01.jpg" width="262" border="0" /><br />
<em style="font-size: 8pt">引用："在数据库中存储层次数据实现无限级分层"</em><br />
<br />
&nbsp;<br />
<span class="fstrong"><strong>
<hr color="#999999" size="4" />
方案1：邻接列表模型(The Adjacency List Model)/递归方法<br />
</strong>http://www.52web.com/52article/?view-250-page-2.html<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/02.jpg" border="0" /></span>&nbsp;<br />
<em style="font-size: 8pt">引用："在数据库中存储层次数据实现无限级分层"<br />
</em>
<p>&nbsp;</p>
<p>优点：结构简单明了，对于节点的维护并不需要额外的工作。<br />
缺点：实现要求2、3需要进行大量的递归操作，每一次数据库查询都需要花费一点时间。<br />
&nbsp;</p>
<p><strong>
<hr color="#999999" size="4" />
方案2：递归方法改进</strong><br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/05.jpg" border="0" /><br />
<br />
<p>&nbsp;</p>
<p>对方案1的扩展，新增 path字段以存储节点路径，arrayChild字段存储其下所有节点。</p>
<p>优点：实现要求1、2只需要一次查询。<br />
缺点：当节点发生改变时需要维护对应的字段，且 path与 arrayChild以拼串形式存储于文本字段，容易限制节点长度，并且对于查询效率有影响。</p>
<p>&nbsp;<br />
<strong>
<hr color="#999999" size="4" />
方案3：改进前序遍历树<br />
</strong>http://www.52web.com/52article/?view-250-page-2.html<br />
<img height="194" alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/03.jpg" width="456" border="0" /><img alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/04.jpg" border="0" /><br />
<br />
<br />
如果作为主键标识的节点编号存在外部引用，还需要定义一个链表编号 linkId来确保其主键标识固定，并重新定义其链表左右范围。<br />
<p>&nbsp;</p>
<p>优点：实现要求1、2只需要一次查询，但比方案2维护起来更见方便（减少大量的拼串），而且因为左右值表示的是链表的范围，所以查询效率更高。<br />
缺点：算法未经说明前不如方案1、2直观。&nbsp;</p>
<br />
<br />
<br />
ps:<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: #000000"><strong>分类算法要解决的问题&nbsp;<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在网站建设中，分类算法的应用非常的普遍。在设计一个电子商店时，要涉及到商品分类；在设计发布系统时，要涉及到栏目或者频道分类；在设计软件下载这样的程序时，要涉及到软件的分类；如此等等。可以说，分类是一个很普遍的问题。&nbsp;<br />
<br />
我常常面试一些程序员，而且我几乎毫无例外地要问他们一些关于分类算法的问题。下面的举几个我常常询问的问题。你认为你可以很轻松地回答么？&nbsp;<br />
<br />
</span><span style="color: #000000">1</span><span style="color: #000000">、分类算法常常表现为树的表示和遍历问题。那么，请问：如果用数据库中的一个Table来表达树型分类，应该有几个字段？&nbsp;<br />
<br />
</span><span style="color: #000000">2</span><span style="color: #000000">、如何快速地从这个Table恢复出一棵树？&nbsp;<br />
<br />
</span><span style="color: #000000">3</span><span style="color: #000000">、如何判断某个分类是否是另一个分类的子类？&nbsp;<br />
<br />
</span><span style="color: #000000">4</span><span style="color: #000000">、如何查找某个分类的所有产品？&nbsp;<br />
<br />
</span><span style="color: #000000">5</span><span style="color: #000000">、如何生成分类所在的路径。&nbsp;<br />
<br />
</span><span style="color: #000000">6</span><span style="color: #000000">、如何新增分类？&nbsp;<br />
<br />
在不限制分类的级数和每级分类的个数时，这些问题并不是可以轻松回答的。本文试图解决这些问题。<br />
</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/319878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-02 10:48 <a href="http://www.blogjava.net/kiant/articles/319878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] DataBinder.Eval用法</title><link>http://www.blogjava.net/kiant/articles/319195.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 27 Apr 2010 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319195.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319195.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319195.html</trackback:ping><description><![CDATA[<br />
转自：<br />
[ASP.NET]DataBinder.Eval用法<br />
http://www.cnblogs.com/march3/archive/2007/05/22/755534.html<br />
<br />
<p>&nbsp;</p>
<p>&lt;%# Bind("Subject") %&gt; //绑定字段<br />
&lt;%# Container.DataItemIndex + 1%&gt; //实现自动编号<br />
&lt;%# DataBinder.Eval(Container.DataItem, "[n]") %&gt; </p>
<p>通常使用的方法<br />
&lt;%# DataBinder.Eval(Container.DataItem, "ColumnName") %&gt; <br />
&lt;%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %&gt; <br />
&lt;%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %&gt; </p>
<p>其他用法<br />
&lt;%# ((DataRowView)Container.DataItem)["ColumnName"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem).Row["ColumnName"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem)["adtitle"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem)[n] %&gt; <br />
&lt;%# ((DbDataRecord)Container.DataItem)[0] %&gt; <br />
&lt;%# (((自定义类型)Container.DataItem)).属性.ToString() %&gt;//如果属性为字符串类型就不用ToString()了</p>
<p>DataBinder.Eval用法范例<br />
&lt;%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %&gt;<br />
格式化字符串参数是可选的。如果忽略参数，DataBinder.Eval 返回对象类型的值，</p>
<p>//显示二位小数<br />
&lt;%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %&gt; <br />
//{0:G}代表显示True或False<br />
&lt;ItemTemplate&gt;<br />
&nbsp;&lt;asp:Image Width="12" Height="12" Border="0" runat="server"<br />
&nbsp;AlternateText='&lt;%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %&gt;'<br />
&nbsp;ImageUrl='&lt;%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %&gt;' /&gt;<br />
&lt;/ItemTemplate&gt;<br />
//转换类型<br />
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)<br />
{0:d} 日期只显示年月日<br />
{0:yyyy-mm-dd} 按格式显示年月日<br />
{0:c} 货币样式<br />
&lt;%#Container.DataItem("price","{0:￥#,##0.00}")%&gt;<br />
&lt;%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%&gt;</p>
<p><br />
Specifier Type&nbsp;&nbsp;&nbsp;&nbsp; Format&nbsp;&nbsp; Output (Passed Double 1.42)&nbsp; Output (Passed Int -12400) <br />
c&nbsp; Currency&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:c}&nbsp;&nbsp;&nbsp;&nbsp; $1.42&nbsp;&nbsp;&nbsp;&nbsp; -$12,400 <br />
d&nbsp; Decimal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:d}&nbsp;&nbsp;&nbsp; System.FormatException&nbsp; -12400 <br />
e&nbsp; Scientific&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:e}&nbsp;&nbsp;&nbsp; 1.420000e+000&nbsp;&nbsp;&nbsp; -1.240000e+004 <br />
f&nbsp; Fixed point&nbsp;&nbsp;&nbsp;&nbsp; {0:f}&nbsp; 1.42&nbsp;&nbsp;&nbsp; -12400.00 <br />
g&nbsp; General&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:g}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; -12400 <br />
n&nbsp; Number with commas for thousands&nbsp; {0:n}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; -12,400 <br />
r&nbsp; Round trippable&nbsp;&nbsp;&nbsp; {0:r}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; System.FormatException <br />
x&nbsp; Hexadecimal&nbsp;&nbsp;&nbsp; {0:x4}&nbsp; System.FormatException&nbsp;&nbsp; cf90 </p>
<p><br />
{0:d} 日期只显示年月日<br />
{0:yyyy-mm-dd} 按格式显示年月日</p>
<p><br />
样式取决于 Web.config 中的设置</p>
<p>{0:c}&nbsp; 或 {0:￡0,000.00} 货币样式&nbsp; 标准英国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 ￡3,000.10</p>
<p>{0:c}&nbsp; 或 string.Format("{0:C}", price); 中国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-cn" uiCulture="zh-cn" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 ￥3,000.10</p>
<p>{0:c}&nbsp; 或 string.Format("{0:C}", price); 美国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 $3,000.10</p>
<p>&nbsp;</p>
<p><strong>DataBinder.Eval(Container.DataItem,"Name")和Container.DataItem("Name")有什么区别？</strong><br />
DataBinder是System.Web里面的一个静态类，它提供了<span style="color: #0000ff">Eval方法用于简化数据绑定表达式的编写</span>，但是它使用的方式是通过Reflection等开销比较大的方法来达到易用性，因此其性能并不是最好的。而Container则根本不是任何一个静态的对象或方法，它是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量，其类型是可以进行数据绑定的控件的数据容器类型（如在Repeater内部的数据绑定容器叫RepeaterItem），在这些容器类中基本都有DataItem属性，因此你可以写Container.DataItem，这个属性返回的是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTable，则这个数据项的类型实际是DataRowView。<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>数据绑定以及Container.DataItem几种方式与用法分析</strong><br />
http://blog.csdn.net/jelink/archive/2006/08/25/1118839.aspx<br />
<br />
<p>&nbsp;</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: #000000">绑定到集合:</span><span style="color: #000000">&lt;</span><span style="color: #000000">asp:ListBox&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ListBox1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;datasource</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">&lt;%#&nbsp;myArray%&gt;</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;runat</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">server</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;Import&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">System.Data</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #000000">&lt;%</span><span style="color: #000000">#&nbsp;((DataRowView)Container.DataItem)[</span><span style="color: #000000">"</span><span style="color: #000000">xxxx</span><span style="color: #000000">"</span><span style="color: #000000">]</span><span style="color: #000000">%&gt;</span><span style="color: #000000">&nbsp;</span></div>
<p><br />
<br />
<hr color="#999999" size="4" />
<strong>What's the deal with Databinder.Eval and Container.DataItem?</strong><br />
http://weblogs.asp.net/rajbk/archive/2004/07/20/what-s-the-deal-with-databinder-eval-and-container-dataitem.aspx<br />
<br />
</p>
<p>&nbsp;</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">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">='&lt;%#&nbsp;&nbsp;</span><span style="color: #ff0000">Databinder.Eval(Container.DataItem,"ID","default.aspx?CategoryId</span><span style="color: #0000ff">={0}"&nbsp;</span><span style="color: #ff0000">)&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;<br />
<br />
<br />
re:&nbsp;What's&nbsp;the&nbsp;deal&nbsp;with&nbsp;Databinder.Eval&nbsp;and&nbsp;Container.DataItem?&nbsp;<br />
<br />
Answering&nbsp;the&nbsp;question<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
<br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">#&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">If</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DataBinder.Eval(Container.DataItem,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">DATAFIELD</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">&lt;&gt;</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;</span><span style="color: #0000ff; background-color: #f5f5f5">Then</span><span style="color: #000000; background-color: #f5f5f5"><br />
<br />
&nbsp;&nbsp;&nbsp;Response.Write(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">something</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">)<br />
<br />
</span><span style="color: #0000ff; background-color: #f5f5f5">End</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">If</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<br />
Try&nbsp;this<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
<br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">#&nbsp;DataBinder.Eval(Container.DataItem,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">DataField</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">).Equals(</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">)?</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">Something</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<br />
<br />
Thursday,&nbsp;August&nbsp;02,&nbsp;2007&nbsp;11:23&nbsp;PM&nbsp;by&nbsp;someone&nbsp;</span></div>
<p><br />
</p>
<img src ="http://www.blogjava.net/kiant/aggbug/319195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-27 13:15 <a href="http://www.blogjava.net/kiant/articles/319195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>机箱静音改造日志</title><link>http://www.blogjava.net/kiant/articles/319236.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 23 Apr 2010 19:30:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319236.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319236.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319236.html</trackback:ping><description><![CDATA[<br />
<strong>2010.04.24 04:00&nbsp;&nbsp;&nbsp;&nbsp;室外温度：9.3℃</strong><br />
<br />
把一面的侧板拆下，竖立起来档着机箱，共振的鸣声消失了<br />
并停用内置的前置风扇 进一步降低音量 现在只剩下&nbsp; 显卡+CPU+电源风扇转了，要在进一步降噪只能从这里面着手了<br />
<br />
机箱侧盖打开有助于降温和消除共振<br />
CPU&nbsp;&nbsp;&nbsp;&nbsp;832转&nbsp; 29℃<br />
显卡&nbsp;&nbsp;&nbsp;&nbsp;同为55%转速，温度由67℃降至58℃<br />
<br />
<hr color="#999999" size="4" />
<strong>2010.04.24 03:00&nbsp;&nbsp;&nbsp;&nbsp;室外温度：10.7℃</strong><br />
<br />
CPU：E5300&nbsp;&nbsp;&nbsp;&nbsp;2.6G超频3.0&nbsp;&nbsp;&nbsp;&nbsp;30℃<br />
CPU风扇：九州风神阿尔法400plus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 832RPM&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;当前转速下音量很小，但是全速下就很吵了，建议有机会换个静音的风扇。<br />
<br />
显卡：昂达9600GSO 384M&nbsp;&nbsp;&nbsp;&nbsp;自带风扇&nbsp;&nbsp;&nbsp;&nbsp;55%转速&nbsp;&nbsp;&nbsp;&nbsp;67℃<br />
&nbsp;&nbsp;&nbsp;&nbsp;显卡自带的风扇很吵，下次还是换A卡好了，散热好，能分级调节风扇速度。<br />
<br />
机箱：酷冷至尊毁灭者RC-K100&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;机箱自带前置风扇，很静音，貌似对降温效果不大<br />
<br />
后置风扇：超频三旋风120MM 超静音机箱风扇&nbsp;&nbsp;&nbsp;&nbsp;未启用<br />
&nbsp;&nbsp;&nbsp;&nbsp;音量小，改善散热不大<br />
<br />
显卡侧板风扇：超频三旋风80MM 超静音机箱风扇&nbsp;&nbsp;&nbsp;&nbsp;未启用<br />
&nbsp;&nbsp;&nbsp;&nbsp;音量小，安装在侧板上会引起震动，对改善散热不大<br />
<br />
机箱挡板两侧：隔音棉<br />
&nbsp;&nbsp;&nbsp; 效果未知<br />
<br />
电源：长城双动力静音400SEL ATX 2.31版 额定300W<br />
&nbsp;&nbsp;&nbsp; 音量很小，提供的电源线头少，线头不够长，导致2个机箱风扇速控头都没能插上<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;总结：<br />
CPU风扇+显卡风扇+机箱自带前置风扇+后置风扇+显卡侧板风扇&nbsp;&nbsp; 一共5个风扇一起运行还是很吵的<br />
主要的噪音源还是显卡风扇，应该优先解决，建议换发热量小点静音版的A卡 <br />
只要显卡散热好了，剩下两个机箱风扇都可以不启用<br />
<br />
同时机箱侧板合上的时候似乎有一点的鸣因，是因为震动？<br />
不知道一些品牌机器是怎么做到机箱静音的<br />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/319236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-24 03:30 <a href="http://www.blogjava.net/kiant/articles/319236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 脚本收集、乱码</title><link>http://www.blogjava.net/kiant/articles/283308.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 23 Apr 2010 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/283308.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/283308.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/283308.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/283308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/283308.html</trackback:ping><description><![CDATA[<p><br />
<a href="http://www.codefans.net/jscss/sort/list_3_1.shtml" target="_blank">源码爱好者 层和布局</a>&nbsp;<br />
<br />
效果:<br />
<a href="http://www.codefans.net/jscss/code/764.shtml" target="_blank">弹出可拖动提示层(模式窗口)</a></p>
<br />
<br />
<hr color="#999999" size="4" />
[原]解决JS中文乱码<br />
http://www.cnblogs.com/xjyggd/archive/2009/04/14/1436000.html<br />
<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: #000000">[<strong>原]解决JS中文乱码&nbsp;<br />
</strong>方法一：&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">../JS/common.js</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;charset</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">gb2312</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt; </span><span style="color: #000000">加上charset</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">gb2312</span><span style="color: #000000">"</span><span style="color: #000000">就可以了。<br />
方法二：把JS文件的编码改成UTF</span><span style="color: #000000">-</span><span style="color: #000000">8</span><span style="color: #000000">　(VS2005的默认编码）<br />
方法三：把asp.net页面的输出编码改成gb2312（页面</span><span style="color: #000000">/</span><span style="color: #000000">web.config都可设置）<br />
<br />
<strong>Cookies的内容编码格式</strong><br />
Cookies的值中可以保存除了&#8220;;&#8221;以外的标点符号。但是不能保存汉字。保存汉字会出现乱码。&nbsp;<br />
所以对于Cookies中的内容要进行统一的编码和解码。为了在浏览器端和服务器端都能够进行解码和编码，&nbsp;所以要统一使用UTF编码格式。&nbsp;<br />
主要是因为javascript中只能使用UTF编码格式。&nbsp;</span></div>
 <img src ="http://www.blogjava.net/kiant/aggbug/283308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-23 18:13 <a href="http://www.blogjava.net/kiant/articles/283308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Response.Redirect(),Server.Transfer(),Server.Execute()的区别</title><link>http://www.blogjava.net/kiant/articles/319194.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 23 Apr 2010 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319194.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319194.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319194.html</trackback:ping><description><![CDATA[<br />
内容转自：<br />
Response.Redirect(),Server.Transfer(),Server.Execute()的区别<br />
http://www.cnblogs.com/3stones/archive/2008/03/20/1114645.html<br />
<br />
<br />
<p><strong>1、Response.Redirect():</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时，它会创建一个应答，应答头中指出了状态代码302（表示目标已经改变）以及新的目标URL。浏览器从服务器收到该应答，利用应答头中的信息发出一个对新URL的请求。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;这就是说，使用Response.Redirect方法时重定向操作发生在客户端，<span style="color: #0000ff">总共涉及到两次与服务器的通信（两个来回）：</span>第一次是对原始页面的请求，得到一个302应答，第二次是请求302应答中声明的新页面，得到重定向之后的页面。<br />
</p>
<p><strong>2、Server.Transfer</strong>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Server.transfer是IIS 5.0新增加的一个功能。它解决了Response.Redirect的两个重要的缺陷：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;1）在Response.Redirect中，我们得不到任何第一页的输出<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;2）Response.Redirect会丢失request中的所有属性，当然我们可以通过一些其他的办法，比如session来搞定，可是，有些页的参数是在request中传过来的，这样的话，就不行了<br />
&nbsp;&nbsp;&nbsp; &nbsp;3) &nbsp;Response.Redirect需要client端再发起一个请求。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Server.transfer就很好地解决了这些问题。它是从server端直接向下一页发起请求，不需要client再次发送请求。如果你的网页非常依赖response.redirect，这个小小的改变可以提高将近25%的效率（根据微软文档）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Transfer方法<span style="color: #0000ff">把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面</span>。调用Server.Transfer时，当前的ASPX页面终止执行，执行流程转入另一个ASPX页面，但新的ASPX页面仍使用前一ASPX页面创建的应答流。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果用Server.Transfer方法实现页面之间的导航，<span style="color: #0000ff">浏览器中的URL不会改变</span>，因为重定向完全在服务器端进行，浏览器根本不知道服务器已经执行了一次页面变换。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;默认情况下，Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面，但只要把该方法的第二个参数设置成True，就<span style="color: #0000ff">可以保留第一个页面的表单数据和查询字符串</span>。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;同时，使用Server.Transfer时应<span style="color: #ff0000">注意一点</span>：目标页面将使用原始页面创建的应答流，这导致ASP.NET的机器验证检查（Machine Authentication Check，MAC）认为新页面的ViewState已被篡改。因此，如果要保留原始页面的表单数据和查询字符串集合，必须把目标页面Page指令的 EnableViewStateMac属性设置成False。</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Server.Transfer()有一个<span style="color: #ff0000">不足就是：</span>当用户在a.aspx中提交了一个表单,然后用Server.Transfer()进入 b.aspx，这时如果用户刷新一下页面，浏览器便会问用户是否&#8220;重试&#8221;发送表单，如果用户点击&#8220;是&#8221;，那么，表单中的数据被重新发送到服务器。如发送表单的作用就是为了向数据库中插入一条记录，结果导不希望发生的事——同一表单被多次加入到数据库中。</p>
<p><br />
<br />
<strong>3、Server.Execute</strong>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Execute方法允许<span style="color: #0000ff">当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面</span>，当指定的ASPX页面执行完毕，控制流程重新返回原页面发出Server.Execute调用的位置。这种页面导航方式类似于针对ASPX页面的一次函数调用，<span style="color: #ff0000">被调用的页面能够访问发出调用页面的表单数据和查询字符串集合</span>，所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。<br />
<br />
</p>
<p><strong>4.</strong><br />
Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别:&nbsp; <br />
Execute是从当前页面转移到指定页面,并将执行返回到当前页面&nbsp; <br />
Transfer是将执行完全转移到指定页面 </p>
<p><br />
<strong>总结：<br />
</strong>在网络状态较好的情况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx（html）资源&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">&nbsp;*重定向<br />
</span>Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下，也有可能导致不期望的结果发生&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">*转发<br />
</span>Server.Execute方法占用资源最多.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">*包含<br />
</span><br />
<font color="#0000ff">ps. *项为笔记</font></p>
 <img src ="http://www.blogjava.net/kiant/aggbug/319194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-23 13:56 <a href="http://www.blogjava.net/kiant/articles/319194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>html中图片ATL参数分行、出错显示</title><link>http://www.blogjava.net/kiant/articles/318957.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 23 Apr 2010 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/318957.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/318957.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/318957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/318957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/318957.html</trackback:ping><description><![CDATA[<br />
引用自：<br />
html中图片的说明ATL参数能不能分行显示啊<br />
http://topic.csdn.net/t/20040904/21/3340893.html<br />
<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: #000000">&lt;</span><span style="color: #000000">img&nbsp;&nbsp;&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">img.jpg&nbsp;&nbsp;&nbsp;alt</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1111111 bbbbbbbbbb</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span></div>
<br />
<br />
<hr color="#999999" size="4" />
请教高手：当img的src地址不对时，如何使浏览器不显示&#8220;X&#8221;<br />
http://topic.csdn.net/t/20060913/10/5018384.html<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">img&nbsp;&nbsp;&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">aa</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">aa.jpg</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;onerror</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">this.src='file.jpg';</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;当aa.jpg不存在，将显示file.jpg&nbsp;&nbsp;&nbsp;。不知道是不是你想要的结果。需要另外的一个图片来替代</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/318957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-23 13:19 <a href="http://www.blogjava.net/kiant/articles/318957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataTable、DataView、ListBox 数据绑定与查询</title><link>http://www.blogjava.net/kiant/articles/280746.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Thu, 22 Apr 2010 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/280746.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/280746.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/280746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/280746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/280746.html</trackback:ping><description><![CDATA[<br />
<a href="http://www.cnblogs.com/jianxm/archive/2009/03/31/1426681.html" target="_blank">DataTable的一些特殊用法：Select</a>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_36_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_36_Open_Text.style.display='none'; Codehighlighter1_0_36_Closed_Image.style.display='inline'; Codehighlighter1_0_36_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_36_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_36_Closed_Text.style.display='none'; Codehighlighter1_0_36_Open_Image.style.display='inline'; Codehighlighter1_0_36_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_36_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_36_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />*&nbsp;补充一下，还可以利用DataView来达到检索的目的。&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DataTable&nbsp;dataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataTable();&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DataView&nbsp;dv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dataSource.DefaultView;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />dv.RowFilter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">columnA&nbsp;=&nbsp;'abc'</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">1.过滤后直接获取DataTable&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">DataTable&nbsp;newTable1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dv.ToTable();&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">2.设置新DataTable的TableName&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">DataTable&nbsp;newTable2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dv.ToTable(</span><span style="color: #000000">"</span><span style="color: #000000">NewTableName</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">DataTable&nbsp;newTable3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_417_445_Open_Image" onclick="this.style.display='none'; Codehighlighter1_417_445_Open_Text.style.display='none'; Codehighlighter1_417_445_Closed_Image.style.display='inline'; Codehighlighter1_417_445_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_417_445_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_417_445_Closed_Text.style.display='none'; Codehighlighter1_417_445_Open_Image.style.display='inline'; Codehighlighter1_417_445_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />dv.ToTable(</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;</span><span id="Codehighlighter1_417_445_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_417_445_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">columnA,columnF,columnC</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">4.综合了2.3两点。&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">DataTable&nbsp;newTable4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_534_562_Open_Image" onclick="this.style.display='none'; Codehighlighter1_534_562_Open_Text.style.display='none'; Codehighlighter1_534_562_Closed_Image.style.display='inline'; Codehighlighter1_534_562_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_534_562_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_534_562_Closed_Text.style.display='none'; Codehighlighter1_534_562_Open_Image.style.display='inline'; Codehighlighter1_534_562_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />dv.ToTable(</span><span style="color: #000000">"</span><span style="color: #000000">NewTableName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;</span><span id="Codehighlighter1_534_562_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_534_562_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">columnA,columnF,columnC</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
简化，利用 DataView过滤
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">DataView&nbsp;dv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.dtPerson.DefaultView;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置一个视图过滤</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dv.RowFilter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">employee_dept_id&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;departId;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstSource.DataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dv;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstSource.DisplayMember&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">employee_name</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstSource.ValueMember&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span>.dvPendingNode.RowFilter = "(node_end_time is null or node_end_time &gt; '2009-6-10 17:55:13')";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">this</span>.dvPendingNode.RowFilter += "and&nbsp; degree_name in ('', '进行', '暂停', '搁置') ";</span></div>
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>1. 我在一个winform程序里用DataView的RowFilter筛选时用两个下划线代表两个字符，但是怎么筛选不出来的?</strong><br />
http://topic.csdn.net/t/20040814/04/3273316.html<br />
<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: #000000">Q:<br />
我在一个winform程序里用DataView的RowFilter筛选时用两个下划线代表两个个字符，如：&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;dv.RowFilter="PID&nbsp;&nbsp;&nbsp;LIKE&nbsp;&nbsp;&nbsp;'"+str+"-__"，这样的筛选语句在SQL企业管理器里执行是能正确筛选到记录的，但是为什么在这里就一个都筛选不出来？是不是这里要用别的符号来代表一个字符啊。&nbsp;<br />
<br />
A:<br />
"_"&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;probably&nbsp;&nbsp;&nbsp;very&nbsp;&nbsp;&nbsp;sql&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;&nbsp;specific,&nbsp;&nbsp;&nbsp;classes&nbsp;&nbsp;&nbsp;in&nbsp;&nbsp;&nbsp;System.Data&nbsp;&nbsp;&nbsp;is&nbsp;&nbsp;&nbsp;supposed&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;be&nbsp;&nbsp;&nbsp;DBMS&nbsp;&nbsp;&nbsp;independent,&nbsp;&nbsp;&nbsp;you&nbsp;&nbsp;&nbsp;can&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp;&nbsp;to&nbsp;&nbsp;&nbsp;use&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;ABC&nbsp;&nbsp;&nbsp;LIKE&nbsp;&nbsp;&nbsp;'abc*'&nbsp;&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;LEN(ABC)=5<br />
<br />
</span></div>
<br />
<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>2. ListBox 多项选择（DataRowView）</strong> <br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstSource.SelectedItems.Count;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_73_515_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_515_Open_Text.style.display='none'; Codehighlighter1_73_515_Closed_Image.style.display='inline'; Codehighlighter1_73_515_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_73_515_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_73_515_Closed_Text.style.display='none'; Codehighlighter1_73_515_Open_Image.style.display='inline'; Codehighlighter1_73_515_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_73_515_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_73_515_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRowView&nbsp;row&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstSource.SelectedItems[i]&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;DataRowView;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Int32.Parse(row[</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">].ToString());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;employee&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;String.Format(</span><span style="color: #000000">"</span><span style="color: #000000">{0}&lt;{1}&gt;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;row[</span><span style="color: #000000">"</span><span style="color: #000000">employee_name</span><span style="color: #000000">"</span><span style="color: #000000">],&nbsp;row[</span><span style="color: #000000">"</span><span style="color: #000000">dept_name</span><span style="color: #000000">"</span><span style="color: #000000">]);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">数据填充</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #0000ff">this</span><span style="color: #000000">.idList.Contains(id))<br />
<img id="Codehighlighter1_405_514_Open_Image" onclick="this.style.display='none'; Codehighlighter1_405_514_Open_Text.style.display='none'; Codehighlighter1_405_514_Closed_Image.style.display='inline'; Codehighlighter1_405_514_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_405_514_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_405_514_Closed_Text.style.display='none'; Codehighlighter1_405_514_Open_Image.style.display='inline'; Codehighlighter1_405_514_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_405_514_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_405_514_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&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">this</span><span style="color: #000000">.idList.Add(id);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&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">this</span><span style="color: #000000">.valueList.Add(employee);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000">System.Windows.Forms.ListBox.SelectedIndexCollection&nbsp;indexes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.lstTarget.SelectedIndices;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;indexes.Count&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">--</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_181_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_298_Open_Text.style.display='none'; Codehighlighter1_181_298_Closed_Image.style.display='inline'; Codehighlighter1_181_298_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_181_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_181_298_Closed_Text.style.display='none'; Codehighlighter1_181_298_Open_Image.style.display='inline'; Codehighlighter1_181_298_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_181_298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_181_298_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.idList.RemoveAt(indexes[i]);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.valueList.RemoveAt(indexes[i]);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
 <img src ="http://www.blogjava.net/kiant/aggbug/280746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-22 12:35 <a href="http://www.blogjava.net/kiant/articles/280746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建Tooltips方案</title><link>http://www.blogjava.net/kiant/articles/317457.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Wed, 21 Apr 2010 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/317457.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/317457.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/317457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/317457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/317457.html</trackback:ping><description><![CDATA[<p>出自：<br />
11个出色的创建Tooltips的方案<br />
http://www.qianduan.net/11-excellent-program-to-create-tooltips.html<br />
<br />
AjaxCode -- Tooltips：消息提醒框控件<br />
http://www.open-open.com/ajax/Tooltips.htm<br />
<br />
<hr color="#999999" size="4" />
<strong>1. Easy CSS Tooltip</strong><br />
<a href="http://www.kollermedia.at/archive/2008/03/24/easy-css-tooltip/">http://www.kollermedia.at/archive/2008/03/24/easy-css-tooltip/</a><br />
<img height="132" alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.04/CSS_Tooltips.jpg" width="383" border="0" />
<p>&nbsp;</p>
Here is the 4 line magic (3lines css, 1line html):<br />
<span id="Codehighlighter1_337_351_Open_Text">
<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: #008000">/*</span><span style="color: #008000">&nbsp;css&nbsp;tooltip&nbsp;</span><span style="color: #008000">*/</span><span style="color: #800000"><br />
a:hover<br />
</span><span style="color: #000000">{</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;_background</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;Transparent</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
</span><span style="color: #000000">}</span><span style="color: #800000"><br />
</span><span style="color: #008000">/*</span><span style="color: #008000">BG&nbsp;color&nbsp;is&nbsp;a&nbsp;must&nbsp;for&nbsp;IE6</span><span style="color: #008000">*/</span><span style="color: #800000"><br />
a.tooltip&nbsp;span<br />
</span><span style="color: #000000">{</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;display</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;none</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;padding</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;6px&nbsp;10px</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;text-indent</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;0px</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;line-height</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;18px</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
</span><span style="color: #000000">}</span><span style="color: #800000"><br />
a.tooltip:hover&nbsp;span<br />
</span><span style="color: #000000">{</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;display</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;inline</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;position</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;absolute</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;#ffffff</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;border</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;1px&nbsp;solid&nbsp;#cccccc</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;color</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;#6c6c6c</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;text-decoration</span><span style="color: #000000">:</span><span style="color: #0000ff">&nbsp;none</span><span style="color: #000000">;</span><span style="color: #ff0000"><br />
</span><span style="color: #000000">}</span><span style="color: #800000"><br />
</span><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;end&nbsp;of&nbsp;css&nbsp;</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: #000000">Easy&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="tooltip"</span><span style="color: #ff0000">&nbsp;href</span><span style="color: #0000ff">="#"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Tooltip</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This&nbsp;is&nbsp;the&nbsp;crazy&nbsp;little&nbsp;Easy&nbsp;Tooltip&nbsp;Text.</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">.</span></div>
</span><br />
<br />
<hr color="#999999" size="4" />
<strong>2. jtip<br />
</strong>http://codylindley.com/blogstuff/js/jtip/<br />
<br />
<img height="184" alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.04/jtip.jpg" width="640" border="0" /><br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>3.</strong><br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/317457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-21 12:49 <a href="http://www.blogjava.net/kiant/articles/317457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>