<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[wind - web技术]]></title>
<link>http://feng.kiyeer.net/</link>
<description><![CDATA[创造机会的人是勇者；等待机会的人是愚者]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yong8868@163.com(wind)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>wind</title>
	<url>http://feng.kiyeer.net/images/logos.gif</url>
	<link>http://feng.kiyeer.net/</link>
	<description>wind</description>
</image>

			<item>
			<link>http://feng.kiyeer.net/article.asp?id=423</link>
			<title><![CDATA[JavaScript窗口功能指南之检查一个窗口是否存在]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Mon,30 Aug 2010 13:37:00 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=423</guid>
		<description><![CDATA[当你创建一个新窗口时，给open（）方法的返回值分配一个变量非常重要。比如，下面的语句创建一个新窗口，然后立即关闭它： <br/><br/>　　win = window.open(&#34;<a href="http://www.docjs.com/" target="_blank" rel="external">http://www.docjs.com/</a>&#34;, &#34;js&#34;); <br/><br/>　　win.close(); <br/><br/>Window对象 <br/>　　每一个浏览器窗口都与一个清楚地window对象对应，所以，当你想引用当前窗口时，你应该使用window对象。下面的语句设置当前窗口的URL： <br/><br/>　　window.location.href = &#34;<a href="http://www.docjs.com/" target="_blank" rel="external">http://www.docjs.com/</a>&#34;; <br/><br/>　　当你在脚本程序中放置这样一个语句时，你不需要指定window对象，因为当前窗口的存在是默认的： <br/><br/>　　location.href = &#34;<a href="http://www.docjs.com/" target="_blank" rel="external">http://www.docjs.com/</a>&#34;; <br/><br/>　　注意，self等价于window，所以，self.close（）实际上就等于window.close（）。 <br/><br/>　　当你想操纵一个窗口时，你必须确认它是存在的。在为window.open（）方法定义一个变量时，要将它定义为全局变量并设置为null。记住，open（）方法返回新窗口的window对象。这里是一个例子： <br/><br/>　　var win = null; <br/><br/>　　function launchWindow() { <br/><br/>　　 win = window.open(); <br/><br/>　　 // statements that refer to the new window go here <br/><br/>　　} <br/><br/>　　如果你想对新窗口执行一个操作，你首先应该检查变量win是否为null： <br/><br/>　　// if win exists, move the window <br/><br/>　　if (win) win.moveTo(0, 0); <br/><br/>　　注意，null等于false，同时任何其他合法的对象等价于true。如果win等于true，你就知道了它不是null，这意味着新窗口成功地创建了。<br/><br/>open &#34;属性&#34; <br/>现在你知道了浏览器实际创建了新窗口。但是它仍然存在吗？不是必须的。你需要确认可用的窗口的确拥有一个真正的window对象。既然每个window对象对应于一个open（）方法，你就可以通过对象探测检查到这个方法： <br/>　　// 如果win.open存在,就移动窗口 <br/><br/>　　if (win.open) win.moveTo(0, 0); <br/><br/>　　变量win对照窗口的window对象，所以win.open对应window的window.open方法。注意，条件表达式是一个函数引用，不是一个函数调用。除非你确认win存在，你不应该试图估计win.open。下面的语句描述了正确的执行方法： <br/><br/>　　// if win and win.open exist, move the window <br/><br/>　　if (win &amp;&amp; win.open) win.moveTo(0, 0); <br/><br/>　　由于&amp;&amp;是一个短操作符号，如果第一个参数（win）对应于true，那么结果就取决于第二个数值。如果第二个参数是false，那么整个表达式结果就是false。这是一个很重要的行为，因为如果win不存在，那么表达式win.open就会产生一个错误。 <br/><br/>closed 属性 <br/>　　由于JavaScript的第一个版本，浏览器窗口成为一个非常困难的问题。比如，一个window对象的一些方法，例如close()，即使当窗口已经关闭时也能被执行，同时另外一些却不能（比如moveTo()）。但是情况会更糟。Internet Explorer和Navigator经常有不同的行为。而且，预测一定操作的结果经常是非常困难的，即使你以前已经做过类似的尝试。我们将告诉你如何克服这些困难，方法就是介绍一个在交叉浏览器中能应用的语句，它将检查一个给定的窗口是否被打开。 <br/><br/>　　window.closed属性是一个Boolean型数值，它定义了是否窗口已经被关闭。当窗口被关闭时，window对象依然存在，并且它的closed属性已经被设置为true。 <br/><br/>　　使用closed来判断打开的窗口以及仍能够被引用（从window.open方法返回的数值）的窗口是否仍然打开着。当窗口关闭时，你不应该试图再操纵它。因为window.closed仅仅被Internet Explorer 4、Navigator 3 和高版本所支持，所以你应该注意前面的版本问题。我们将使用下面的代码： <br/><br/>　　// if win and win.open exist, and win.closed isn´t true, move the window <br/><br/>　　if (win &amp;&amp; win.open &amp;&amp; !win.closed) win.moveTo(0, 0); <br/><br/>　　Internet Explorer 3 和 Navigator 2 不支持 closed 方法，所以它在Boolean型表达式中等价于false (就像其他不存在地属性一样，比如 window.tomershiran）。]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=422</link>
			<title><![CDATA[javascript读取cookie,javascrip写入cookie,asp.net读取cook]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Sun,29 Aug 2010 01:26:50 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=422</guid>
		<description><![CDATA[javascript读取cookie,javascrip写入cookie,asp.net读取cookie,asp.net写入cookie<br/><br/>&lt;%@ Page Language=&#34;C#&#34; EnableViewState=&#34;false&#34;%&gt;<br/>&lt;script language=&#34;C#&#34; runat=&#34;server&#34;&gt;<br/>protected void Page_Load(object sender, EventArgs e)<br/>{<br/><br/>}<br/><br/>protected void Button1_Click(object sender, EventArgs e)<br/>{<br/>if (Request.Cookies[&#34;key&#34;] != null)<br/>Response.Write(HttpUtility.UrlDecode(Request.Cookies[&#34;key&#34;].Value));<br/>else<br/>Response.Write(&#34;null&#34;);<br/>}<br/><br/>protected void Button2_Click(object sender, EventArgs e)<br/>{<br/>Response.Cookies.Add(new HttpCookie(&#34;key&#34;, HttpUtility.UrlEncode(TextBox1.Text)));<br/>}<br/>&lt;/script&gt;<br/><br/>&lt;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="external">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&#34;&gt;<br/><br/>&lt;html xmlns=&#34;<a href="http://www.w3.org/1999/xhtml" target="_blank" rel="external">http://www.w3.org/1999/xhtml</a>&#34; &gt;<br/>&lt;head runat=&#34;server&#34;&gt;<br/>&lt;title&gt;javascript读取cookie,javascrip写入cookie,asp.net读取cookie,asp.net写入cookie&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;form id=&#34;form1&#34; runat=&#34;server&#34;&gt;<br/>&lt;div&gt;<br/>&lt;script language=&#34;javascript&#34;&gt;<br/>function getCookie(name){var arr = document.cookie.match(new RegExp(&#34;(^| )&#34;+name+&#34;=([^;]*)(;|$)&#34;));if(arr != null) return decodeURI(arr[2]); return null;}<br/>function setCookie(cookiename,cookievalue,cookieexpdate)<br/>{<br/>document.cookie = cookiename + &#34;=&#34; + encodeURI(cookievalue)<br/>+ &#34;; domain=.www.svnhost.cn&#34;<br/>+ &#34;; path=&#34; + &#34;/&#34;<br/>+ &#34;; expires=&#34; + cookieexpdate.toGMTString();<br/>}<br/>function Read()<br/>{<br/>alert(getCookie(&#34;key&#34;));<br/>}<br/>function Write()<br/>{<br/>var d = new Date();<br/>d.setTime(d.getTime()+1000*60*60*24*30);<br/>setCookie(&#34;key&#34;, document.getElementById(&#34;TextBox1&#34;).value, d);<br/>}<br/>&lt;/script&gt;<br/>&lt;asp:TextBox ID=&#34;TextBox1&#34; runat=&#34;server&#34;&gt;&lt;/asp:TextBox&gt;<br/>&lt;input type=&#34;button&#34; value=&#34;JS读取&#34; _disibledevent=&#34;color: #000000&#34;&gt; ]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=421</link>
			<title><![CDATA[Cr&#101;ateDocumentFragment的用处]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Sat,28 Aug 2010 16:12:02 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=421</guid>
		<description><![CDATA[一旦把节点添加到document.body(或其后的节点)中，页面就会立即反映出这个变化。对于少量的更新，这是很好的。然而，当要向 document.body添加大量数据时，如果逐个添加这些节点，这个过程有可能会十分缓慢。为解决这个问题，可以创建一个文档碎片，把所有的新节点附加其上，然后把文档碎片的内容一次性添加到document中。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 假设你想创建十个新段落。你可能这样写：<br/>var arrText=[&#34;1&#34;,&#34;2&#34;,&#34;3&#34;,&#34;4&#34;,&#34;5&#34;,&#34;6&#34;,&#34;7&#34;,&#34;8&#34;,&#34;9&#34;,&#34;10&#34;];<br/>for(var i=0;i&lt;arrText.length;i++)<br/>...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;var op=document.cr&#101;ateElement(&#34;P&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;var oText=document.cr&#101;ateTextNode(arrText[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;op.appendChild(oText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(op);<br/>}<br/><br/> 这段代码运行良好，但问题是它调用了十次document.body.appendChild(),每次要产生一次页面刷新。这时，文档碎片会更高效：<br/>var arrText=[&#34;1&#34;,&#34;2&#34;,&#34;3&#34;,&#34;4&#34;,&#34;5&#34;,&#34;6&#34;,&#34;7&#34;,&#34;8&#34;,&#34;9&#34;,&#34;10&#34;];<br/>var oFrag=document.cr&#101;ateDocumentFragment();<br/><br/>for(var i=0;i&lt;arrText.length;i++)<br/>...{<br/>&nbsp;&nbsp;&nbsp;&nbsp;var op=document.cr&#101;ateElement(&#34;P&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;var oText=document.cr&#101;ateTextNode(arrText[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;op.appendChild(oText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFrag.appendChild(op);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}<br/>document.body.appendChild(oFrag);<br/>这段代码中,document.body.appendChild()仅调用了一次，这意味首只需要进行一次屏幕的刷新。 ]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=420</link>
			<title><![CDATA[JavaScript的document和window对象详解]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Fri,27 Aug 2010 13:56:52 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=420</guid>
		<description><![CDATA[[document对象]<br/><br/>　　该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档。<br/><br/>　　属性<br/><br/>　　alinkColor 活动链接的颜色(ALINK)<br/>　　anchor 一个HTMI锚点,使用&lt;A NAME=&gt;标记创建(该属性本身也是一个对象)<br/>　　anchors array 列出文档锚点对象的数组(&lt;A NAME=&gt;)(该属性本身也是一个对象)<br/>　　bgColor 文档的背景颜色(BGCOLOR)<br/>　　cookie 存储于cookie.txt文件内的一段信息,它是该文档对象的一个属性<br/>　　fgColor 文档的文本颜色(&lt;BODY&gt;标记里的TEXT特性)<br/>　　form 文档中的一个窗体(&lt;FORM&gt;)(该属性本身也是一个对象)<br/>　　forms anay 按照其出现在文档中的顺序列出窗体对象的一个数组(该属性本身也是一个对象)<br/>　　lastModified 文档最后的修改日期<br/>　　linkColor 文档的链接的颜色,即&lt;BODY&gt;标记中的LINK特性(链接到用户没有观察到的文档)<br/>　　link 文档中的一个&lt;A HREF=&gt;标记(该属性本身也是一个对象)<br/>　　links array 文档中link对象的一个数组,按照它们出现在文档中的顺序排列(该属性本身也是一个对象)<br/>　　location 当前显示文档的URL。用户不能改变document.location(因为这是当前显示文档的位置)。但是,可以改变window.location (用其它文档取代当前文档)window.location本身也是一个对象,而document.location不是对象<br/>　　referrer 包含链接的文档的URL,用户单击该链接可到达当前文档<br/>　　title 文档的标题((TITLE&gt;)<br/>　　vlinkColor 指向用户已观察过的文档的链接文本颜色,即&lt;BODY&gt;标记的VLINK特性<br/><br/>　　方法<br/><br/>　　clear 清除指定文档的内容<br/>　　close 关闭文档流<br/>　　open 打开文档流<br/>　　write 把文本写入文档<br/>　　writeln 把文本写入文档,并以换行符结尾<br/><br/>[window对象]<br/><br/>　　它是一个顶层对象,而不是另一个对象的属性即浏览器的窗口。<br/><br/>　　属性<br/><br/>　　defaultStatus 缺省的状态条消息<br/>　　document 当前显示的文档(该属性本身也是一个对象)<br/>　　frame 窗口里的一个框架((FRAME&gt;)(该属性本身也是一个对象)<br/>　　frames array 列举窗口的框架对象的数组,按照这些对象在文档中出现的顺序列出(该属性本身也是一个对象)<br/>　　history 窗口的历史列表(该属性本身也是一个对象)<br/>　　length 窗口内的框架数<br/>　　location 窗口所显示文档的完整(绝对)URL(该属性本身也是一个对象)不要把它与如document.location混淆,后者是当前显示文档的URL。用户可以改变window.location(用另一个文档取代当前文档),但却不能改变document.location(因为这是当前显示文档的位置)<br/>　　name 窗口打开时,赋予该窗口的名字<br/>　　opener 代表使用window.open打开当前窗口的脚本所在的窗口(这是Netscape Navigator 3.0beta 3所引入的一个新属性)<br/>　　parent 包含当前框架的窗口的同义词。frame和window对象的一个属性<br/>　　self 当前窗口或框架的同义词<br/>　　status 状态条中的消息<br/>　　top 包含当前框架的最顶层浏览器窗口的同义词<br/>　　window 当前窗口或框架的同义词,与self相同<br/><br/>　　方法<br/><br/>　　alert() 打开一个Alert消息框<br/>　　clearTimeout() 用来终止setTimeout方法的工作<br/>　　close() 关闭窗口<br/>　　confirm() 打开一个Confirm消息框,用户可以选择OK或Cancel,如果用户单击OK,该方法返回true,单击Cancel返回false<br/>　　blur() 把焦点从指定窗口移开(这是Netscape Navigator 3.0 beta 3引入的新方法)<br/>　　focus() 把指定的窗口带到前台(另一个新方法)<br/>　　open() 打开一个新窗口<br/>　　PRompt() 打开一个Prompt对话框,用户可向该框键入文本,并把键入的文本返回到脚本<br/>　　setTimeout() 等待一段指定的毫秒数时间,然后运行指令事件处理程序<br/><br/>　　事件处理程序<br/><br/>　　Onload() 页面载入时触发<br/>　　Onunload() 页面关闭时触发]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=419</link>
			<title><![CDATA[yui]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Mon,19 Apr 2010 09:48:31 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=419</guid>
		<description><![CDATA[Yahoo! User Interface Library(简称yui) 是一个使用Javascrīpt编写的工具和控件库。它利用DOM脚本,DHTML和AJAX来构造具有丰富交互功能的Web程序。yui也包含几个核心的CSS文件。yui中的所有组件已经以开源的形式发布，它们遵循BSD协议并且可以免费使用。可以从Sourceforge站点下载完整的项目文件，同时包含相关文档和示例。 <br/><br/>yui项目开发人员的BLOG：YUI Blog，交流社区：ydn-javascrīpt on Yahoo! Groups。 <br/><br/>准备工作： <br/><br/>1、 下载yui <br/>最新版YUI下载地址：<a href="http://sourceforge.net/project/downloading.php?group_id=165715" target="_blank" rel="external">http://sourceforge.net/project/downloading.php?group_id=165715</a>&amp;filename=yui_2.3.1.zip<br/>yui项目文件已经发布在Sourceforge站点，文件包含相关文档，示例和代码。 <br/><br/>注：Yahoo没有为yui的运行提供免费的运行环境，你需要运行在你在即Web服务器上。 <br/><br/>2、 在你的网页中加入你需要的类库文件 <br/><br/>为了使用yui中的组件你必须在你的页面文件中用&lt;scrīpt&gt;指定相关组件的类库文件地址。如果该组件依赖于其他组件，你必须使用&lt;scrīpt&gt;指定所依赖的组件的类库文件地址。 <br/><br/>3、 如果有必要，在页面中加入CSS文件 <br/><br/>某些yui的控件包含一个相应的CSS文件，用来设定控件的样式。此时，你必须在页面中使用&lt;style&gt;指定相应的CSS文件的地址。你可以通过修改相应的CSS文件达到你想要的效果。 <br/><br/>4、 浏览相关文档和示例 <br/><br/>每一个组件都包含详细的API文档，并且提供了常用的例子。学习完后，回顾一下所有的API，做到心中有数。因为对于API理解的好坏将影响你对yui的使用效果。 <br/><br/>组件介绍 Yui组件分成2类：工具包和控件库 <br/><br/>Yui 工具包 <br/><br/>Yui 工具包利用DOM脚本来简化浏览器内的开发（in-browser devolvement），使用DHTML和AJAX的特性开发所有的Web程序。 <br/><br/>动画（Animation）：在你的页面中通过指定位置，大小，透明度或者页面元素的其他特性来创建一个&#34;电影效果（cinematic effects）&#34;。这些效果将在你的页面发生变化的时候给用户更好的体验。 <br/><br/>连接管理（Connection Manager）：这个工具包帮助你管理XMLHttpRequest（一般被称为AJAX）事务，它提供对表单提交（form posts），错误捕获（error handling）和callbacks的全面支持。该工具包也支持文件的上传管理。 <br/><br/>DOM：DOM工具包提供更简单的DOM脚本的功能调用方式，包含元素的位置和CSS样式的管理。 <br/><br/>拖放（Drag and Dro&#112;）：创建可拖放的对象。为了提供丰富的交互功能（比如拖动一个对象到目标位置）你可能需要编写很多代码。这个工具包可以在所有支持的浏览器中捕获所有的操作事务并保证其稳定地运行。 <br/><br/>事件（Event）：这个神奇的管理类库给你提供一种简单安全的方法访问浏览器的事件（比如点击和键盘操作）。这个事件封包中还包含了自定义事件对象，它为你的程序交互提供一种发布和订阅事件的机制。 <br/><br/>yui控件： <br/><br/>yui控件库为你页面提供一组高交互性性的可视化元素。这些元素完全在客户端创建维护，不需要请求服务器进行页面刷新。 <br/><br/>这些控件包括： <br/><br/>自动完成（AutoComplete）控件：自动完成控件为文本输入提供一种渐进式的用户体验（streamline user interactions）。控件会提供相似项列表和基于多样化的数据格式的提前键入功能（type-ahead functionality based on a variety of data-source formats），并且可以通过XMLHttpRequest访问服务端的数据。 <br/><br/>日历（Calendar）控件：一个用来日期选择的动态图形控件。 <br/><br/>容器（Container）控件：一组模仿windows样式的控件，他们包括Tooltip, Panel, Dialog 和 SimpleDialog。其中Module 和 Overlay控件提供一个可扩展的平台，你可以控制自定义的模仿windows样式的控件。 <br/><br/>日志（Logger）控件：提供一个快速和简单的记录日志的方式，它直接将日志信息输出到屏幕控制台（on-screen console）、Firefox的扩展组件FireBug，或者Safari的Javascrīpt控制台。yui的Debug组件将完整的记录输出信息和调试信息。 <br/><br/>菜单（Menu）控件：利用此控件只需要几行简单的代码就可以设计一个动态样式的菜单。可以完全使用javascrīpt构造一个菜单，can be layered on top of semantic unordered lists。 <br/><br/>滑块（Slider）控件：提供一个可滑动的组件，它允许使用者在一定的范围内（x轴，y轴）改变滑块的位置。 <br/><br/>树形（TreeView）控件：提供一个节点可缩放的树形控件。节点可以是链接，自定义属性，并且可以动态加载。节点元素的展现可以通过CSS修改，比如文件夹视图，TO－DO任务列表或者其他可视化处理 <br/><br/>yui的CSS资源 <br/><br/>为了让CSS能符合不同等级的浏览器（A-Grade browsers）的标准，我们想了很多。我们把这些作为yui类库的一部分共享出来，希望能在这里得到促进，获得一个简洁的，可维护并在浏览器中表现优秀的设计。 <br/><br/>页面网格样式（CSS Page Grids）：7个基本的用css组织子组件的页面框架，支持130种不通的页面布局。 <br/><br/>标准的CSS字体（Standard CSS Fonts）：标准的跨浏览器字体样式和大小展现。 <br/><br/>标准的CSS排列（Standard CSS Reset）：使用这些CSS声明来排除页面的空白部分并且公共元素的样式兼容各种浏览器的展现。]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=418</link>
			<title><![CDATA[在FireFox使用 getYear()]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Wed,25 Nov 2009 09:23:20 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=418</guid>
		<description><![CDATA[javascript 中 getYear() 的使用<br/>例:日期如果為 2006/1/12,<br/>在IE使用 getYear(), 會取得 2006;<br/>在FireFox使用 getYear(), 會取得106.<br/><br/>兩全的方法是: getFullYear(). ]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=390</link>
			<title><![CDATA[表格中 scope=&#34;col&#34; 的含义]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Fri,06 Feb 2009 15:28:24 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=390</guid>
		<description><![CDATA[表格中 &lt;td scope=&#34;col&#34;&gt; 的含义<br/><br/>&lt;td scope=&#34;col&#34;&gt; 在该单元格中，从左侧开始写起<br/><br/>&lt;td scope=&#34;row&#34;&gt; 在该单元格中，从右侧开始写起<br/><br/>Scope属性同时定义了行的表头和列的表头：<br/><br/><br/>col: 列表头 <br/>row: 行表头<br/>在第一行的&lt;th&gt;加上值为col的scope属性，声明他们是下面数据单元格的表头。同样的，给每行的开头&lt;th&gt;加上值为row的scope属性声明他们是右边数据单元格的表头。<br/><br/>Scope属性还有两个值：<br/><br/>colgroup: 定义列组（column group）的表头信息 <br/>rowgroup: 定义行组（row group）的表头信息<br/>一个列组是由&lt;colgroup&gt;标签定义的。行组则是由&lt;thead&gt;、&lt;tfoot&gt;和&lt;tbody&gt;定义的。<br/>]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=386</link>
			<title><![CDATA[JavaScript中item函数]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Tue,20 Jan 2009 14:00:15 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=386</guid>
		<description><![CDATA[JavaScript中item函数方法是返回集合中的当前项。使用方法：<br/>enumObj.item()<br/>其中必选项 myEnum 参数为任意 Enumerator 对象。<br/><br/>item 方法返回当前项。 如果集合为空或者当前项没有定义，那么将返回undefined 。<br/><br/>在下面的代码中，使用了JavaScript中item函数方法返回 Drives 集合中的一个成员。<br/>function ShowDriveList(){<br/>&nbsp;&nbsp; var fso, s, n, e, x;<br/>&nbsp;&nbsp; fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>&nbsp;&nbsp; e = new Enumerator(fso.Drives);<br/>&nbsp;&nbsp; s = &#34;&#34;;<br/>&nbsp;&nbsp; for (; !e.atEnd(); e.moveNext())<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = e.item();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = s + x.DriveLetter;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s += &#34; - &#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x.DriveType == 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = x.ShareName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (x.IsReady)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = x.VolumeName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = &#34;[驱动器未就绪]&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s +=&nbsp;&nbsp;n + &#34;<br/>&#34;;<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp; return(s);<br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=385</link>
			<title><![CDATA[Javascript的FSO功能]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Tue,20 Jan 2009 12:02:30 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=385</guid>
		<description><![CDATA[javascript是网页制作中离不开的脚本语言，依靠它，一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧？比如，对文件和文件夹进行读、写和删除，就象在VB、VC等高级语言中经常做的工作一样。怎么样，你是否需要了解这方面的知识？那就请跟我来，本文将详细描述如何使用javascript语言进行文件操作。<br/>一、功能实现核心：FileSystemObject 对象<br/>其实，要在javascript中实现文件操作功能，主要就是依靠FileSystemobject对象。<br/>二、FileSystemObject编程三部曲<br/>使用FileSystemObject 对象进行编程很简单，一般要经过如下的步骤： 创建FileSystemObject对象、应用相关方法、访问对象相关属性 。<br/>（一）创建FileSystemObject对象<br/>创建FileSystemObject对象的代码只要1行：<br/>var fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>上述代码执行后，fso就成为一个FileSystemObject对象实例。<br/>（二）应用相关方法<br/>创建对象实例后，就可以使用对象的相关方法了。比如，使用Cr&#101;ateTextFile方法创建一个文本文件：<br/>var fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>var f1 = fso.cr&#101;atetextfile(&#34;c:\\myjstest.txt&#34;,true&#34;);<br/>（三）访问对象相关属性<br/>要访问对象的相关属性，首先要建立指向对象的句柄，这就要通过get系列方法实现：GetDrive负责获取驱动器信息，GetFolder负责获取文件夹信息，GetFile负责获取文件信息。比如，指向下面的代码后，f1就成为指向文件c:\test.txt的句柄：<br/>var fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>var f1 = fso.GetFile(&#34;c:\\myjstest.txt&#34;);<br/>然后，使用f1访问对象的相关属性。比如：<br/>var fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>var f1 = fso.GetFile(&#34;c:\\myjstest.txt&#34;);<br/>alert(&#34;File last modified: &#34; + f1.DateLastModified);<br/>执行上面最后一句后，将显示c:\myjstest.txt的最后修改日期属性值。<br/>但有一点请注意：对于使用cr&#101;ate方法建立的对象，就不必再使用get方法获取对象句柄了，这时直接使用cr&#101;ate方法建立的句柄名称就可以：<br/>var fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>var f1 = fso.cr&#101;atetextfile(&#34;c:\\myjstest.txt&#34;,true&#34;);<br/>alert(&#34;File last modified: &#34; + f1.DateLastModified);<br/>三、操作驱动器（Drives）<br/>使用FileSystemObject对象来编程操作驱动器（Drives）和文件夹（Folders）很容易，这就象在Windows文件浏览器中对文件进行交互操作一样，比如：拷贝、移动文件夹，获取文件夹的属性。<br/>（一）Drives对象属性<br/>Drive对象负责收集系统中的物理或逻辑驱动器资源内容，它具有如下属性：<br/>l TotalSize：以字节（byte）为单位计算的驱动器大小。<br/>l AvailableSpace或FreeSpace：以字节（byte）为单位计算的驱动器可用空间。<br/>l DriveLetter：驱动器字母。<br/>l DriveType：驱动器类型，取值为：removable（移动介质）、fixed（固定介质）、network（网络资源）、CD-ROM或者RAM盘。<br/>l SerialNumber：驱动器的系列码。<br/>l FileSystem：所在驱动器的文件系统类型，取值为FAT、FAT32和NTFS。<br/>l IsReady：驱动器是否可用。<br/>l ShareName：共享名称。<br/>l VolumeName：卷标名称。<br/>l Path和RootFolder：驱动器的路径或者根目录名称。<br/>（二）Drive对象操作例程<br/>下面的例程显示驱动器C的卷标、总容量和可用空间等信息：<br/>var fso, drv, s =&#34;&#34;;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>drv = fso.GetDrive(fso.GetDriveName(&#34;c:\\&#34;));<br/>s += &#34;Drive C:&#34; + &#34; - &#34;;<br/>s += drv.VolumeName + &#34;\n&#34;;<br/>s += &#34;Total Space: &#34; + drv.TotalSize / 1024;<br/>s += &#34; Kb&#34; + &#34;\n&#34;;<br/>s += &#34;Free Space: &#34; + drv.FreeSpace / 1024;<br/>s += &#34; Kb&#34; + &#34;\n&#34;;<br/>alert(s);<br/>四、操作文件夹（Folders）<br/>涉及到文件夹的操作包括创建、移动、删除以及获取相关属性。<br/>Folder对象操作例程 :<br/>下面的例程将练习获取父文件夹名称、创建文件夹、删除文件夹、判断是否为根目录等操作：<br/>var fso, fldr, s = &#34;&#34;;<br/>// 创建FileSystemObject对象实例<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>// 获取Drive 对象<br/>fldr = fso.GetFolder(&#34;c:\\&#34;);<br/>// 显示父目录名称<br/>alert(&#34;Parent folder name is: &#34; + fldr + &#34;\n&#34;);<br/>// 显示所在drive名称<br/>alert(&#34;Contained on drive &#34; + fldr.Drive + &#34;\n&#34;);<br/>// 判断是否为根目录<br/>if (fldr.IsRootFolder)<br/>alert(&#34;This is the root folder.&#34;);<br/>else<br/>alert(&#34;This folder isn&#39;t a root folder.&#34;);<br/>alert(&#34;\n\n&#34;);<br/>// 创建新文件夹<br/>fso.Cr&#101;ateFolder (&#34;C:\\Bogus&#34;);<br/>alert(&#34;Cr&#101;ated folder C:\\Bogus&#34; + &#34;\n&#34;);<br/>// 显示文件夹基础名称，不包含路径名<br/>alert(&#34;Basename = &#34; + fso.GetBaseName(&#34;c:\\bogus&#34;) + &#34;\n&#34;);<br/>// 删除创建的文件夹<br/>fso.Del&#101;teFolder (&#34;C:\\Bogus&#34;);<br/>alert(&#34;Del&#101;ted folder C:\\Bogus&#34; + &#34;\n&#34;);<br/>五、操作文件（Files）<br/>对文件进行的操作要比以上介绍的驱动器（Drive）和文件夹（Folder）操作复杂些，基本上分为以下两个类别：对文件的创建、拷贝、移动、删除操作和对文件内容的创建、添加、删除和读取操作。下面分别详细介绍。<br/>（一）创建文件<br/>一共有3种方法可用于创建一个空文本文件，这种文件有时候也叫做文本流（text stream）。<br/>第一种是使用Cr&#101;ateTextFile方法。代码如下：<br/>var fso, f1;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>f1 = fso.Cr&#101;ateTextFile(&#34;c:\\testfile.txt&#34;, true);<br/>第二种是使用OpenTextFile方法，并添加上ForWriting属性，ForWriting的值为2。代码如下：<br/>var fso, ts;<br/>var ForWriting= 2;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>ts = fso.OpenTextFile(&#34;c:\\test.txt&#34;, ForWriting, true);<br/>第三种是使用OpenAsTextStream方法，同样要设置好ForWriting属性。代码如下：<br/>var fso, f1, ts;<br/>var ForWriting = 2;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>fso.Cr&#101;ateTextFile (&#34;c:\\test1.txt&#34;);<br/>f1 = fso.GetFile(&#34;c:\\test1.txt&#34;);<br/>ts = f1.OpenAsTextStream(ForWriting, true);<br/>（二）添加数据到文件<br/>当文件被创建后，一般要按照“打开文件－&gt;填写数据－&gt;关闭文件”的步骤实现添加数据到文件的目的。<br/>打开文件可使用FileSystemObject对象的OpenTextFile方法，或者使用File对象的OpenAsTextStream方法。<br/>填写数据要使用到TextStream对象的Write、WriteLine或者WriteBlankLines方法。在同是实现写入数据的功能下，这3 者的区别在于：Write方法不在写入数据末尾添加新换行符，WriteLine方法要在最后添加一个新换行符，而WriteBlankLines则增加一个或者多个空行。<br/>关闭文件可使用TextStream对象的Close方法。<br/>（三）创建文件及添加数据例程<br/>下面的代码将创建文件、添加数据、关闭文件几个步骤结合起来进行应用：<br/>var fso, tf;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>// 创建新文件<br/>tf = fso.Cr&#101;ateTextFile(&#34;c:\\testfile.txt&#34;, true);<br/>// 填写数据，并增加换行符<br/>tf.WriteLine(&#34;Testing 1, 2, 3.&#34;) ;<br/>// 增加3个空行<br/>tf.WriteBlankLines(3) ;<br/>// 填写一行，不带换行符<br/>tf.Write (&#34;This is a test.&#34;);<br/>// 关闭文件<br/>tf.Close();<br/>（四）读取文件内容<br/>从文本文件中读取数据要使用TextStream对象的Read、ReadLine或ReadAll 方法。Read方法用于读取文件中指定数量的字符；ReadLine方法读取一整行，但不包括换行符；ReadAll方法则读取文本文件的整个内容。读取的内容存放于字符串变量中，用于显示、分析。在使用Read或ReadLine方法读取文件内容时，如果要跳过一些部分，就要用到Skip或 SkipLine方法。<br/>下面的代码演示打开文件、填写数据，然后读取数据：<br/>var fso, f1, ts, s;<br/>var ForReading = 1;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>// 创建文件<br/>f1 = fso.Cr&#101;ateTextFile(&#34;c:\\testfile.txt&#34;, true);<br/>// 填写一行数据<br/>f1.WriteLine(&#34;Hello World&#34;);<br/>f1.WriteBlankLines(1);<br/>// 关闭文件<br/>f1.Close();<br/>// 打开文件<br/>ts = fso.OpenTextFile(&#34;c:\\testfile.txt&#34;, ForReading);<br/>// 读取文件一行内容到字符串<br/>s = ts.ReadLine();<br/>// 显示字符串信息<br/>alert(&#34;File contents = &#39;&#34; + s + &#34;&#39;&#34;);<br/>// 关闭文件<br/>ts.Close();<br/>（五）移动、拷贝和删除文件<br/>对于以上三种文件操作，javascript各有两种对应的方法：File.Move 或 FileSystemObject.MoveFile用于移动文件；File.Copy 或 FileSystemObject.CopyFile用于拷贝文件；File.Del&#101;te 或 FileSystemObject.Del&#101;teFile用于删除文件。<br/>下面的代码演示在驱动器C的根目录下创建一个文本文件，填写一些内容，然后将文件移动到\tmp目录下，再在目录\temp下面建立一个文件拷贝，最后删除这两个目录的文件：<br/>var fso, f1, f2, s;<br/>fso = new ActiveXObject(&#34;Scripting.FileSystemObject&#34;);<br/>f1 = fso.Cr&#101;ateTextFile(&#34;c:\\testfile.txt&#34;, true);<br/>// 写一行<br/>f1.Write(&#34;This is a test.&#34;);<br/>// 关闭文件<br/>f1.Close();<br/>// 获取C:\根目录下的文件句柄<br/>f2 = fso.GetFile(&#34;c:\\testfile.txt&#34;);<br/>// 移动文件到\tmp目录下<br/>f2.Move (&#34;c:\\tmp\\testfile.txt&#34;);<br/>// 拷贝文件到\temp目录下<br/>f2.Copy (&#34;c:\\temp\\testfile.txt&#34;);<br/>// 获取文件句柄<br/>f2 = fso.GetFile(&#34;c:\\tmp\\testfile.txt&#34;);<br/>f3 = fso.GetFile(&#34;c:\\temp\\testfile.txt&#34;);<br/>// 删除文件<br/>f2.Del&#101;te();<br/>f3.Del&#101;te();<br/>六、结 语<br/>通过以上对FileSystemObject的各种对象、属性和方法的介绍和示例，相信你已经对如何使用javascript语言在页面中操作驱动器、文件和文件夹有了清晰的认识。但是上述提及的例程都非常简单，要全面、灵活地掌握javascript文件操作技术，还需要大量的实践练习。而且还有一点提醒大家，由于涉及到在浏览器中进行文件读写这样的高级操作，对于默认的浏览器安全级别而言，在代码运行前都会有一个信息提示，这点请在实际环境中提示访问者注意。]]></description>
		</item>
		
			<item>
			<link>http://feng.kiyeer.net/article.asp?id=384</link>
			<title><![CDATA[Prototype中dom对象方法汇总]]></title>
			<author>yong8868@163.com(feng)</author>
			<category><![CDATA[web技术]]></category>
			<pubDate>Mon,19 Jan 2009 15:40:52 +0800</pubDate>
			<guid>http://feng.kiyeer.net/default.asp?id=384</guid>
		<description><![CDATA[这部分提供了很多(写的都有点烦了)方便的操作dom的方法：包含有名的$方法、document.getElementsByClassName方法，以及Element对象、Ins&#101;rtion对象<br/><br/>以下部分一个一个的详细介绍：<br/><br/>$(element)：getElementById的封装，element可以是一个元素的id或元素本身，也可以是一个数组，这时返回一个数组，使用$方法，会自动调用Element.extend(element)方法，这样的话使元素可以直接调用 Element中的方法, 例如Element.hide(element)可以写成这样$(element).hide()<br/><br/>document.getElementsByClassName(className, parentElement): 根据class选择元素<br/><br/>Element.extend(element): 扩展element，使element可以直接调用Element、Form.Element或Form中定义的方法<br/><br/>Element对象的方法：<br/><br/>visible: function(element)：判断element是否可见, 参数element可以是元素本身或元素id(下面的方面的参数基本上都是这样的)<br/>toggle: function(element)：反转element的可见性<br/>hide: function(element)：隐藏元素<br/>show: function(element)：显示元素<br/>remove: function(element)：移除元素<br/>up&#100;ate: function(element, html) ：使用html更新element的内容，html中的script会执行(下同)<br/>replace: function(element, html)：将element替换为html<br/>inspect: function(element)：element的字符串表示<br/>recursivelyCollect: function(element, property): 递归收集, 例如Element.recursivelyCollect(element, &#34;parentNode&#34;)返回element所有的祖先节点, 注意只返回nodeType == 1的元素，也就是不返回文本元素<br/>ancestors: function(element): 等同于上面的例子，返回元素的所有祖先节点<br/>descendants: function(element): 返回所有子孙节点<br/>immediateDescendants: function(element)：返回元素的直接的子孙节点(子节点)的数组<br/>previousSiblings: function(element)：返回元素前面的兄弟节点<br/>nextSiblings: function(element)：返回位于元素后面的兄弟节点<br/>siblings: function(element)：返回元素所有的兄弟节点<br/>match: function(element, sel&#101;ctor)：使用Sel&#101;ctor的match方法匹配元素(Sel&#101;ctor将在后面介绍), sel&#101;ctor参数是一个css sel&#101;ctor表达式或者Prototype中的一个Sel&#101;ctor实例，如果element匹配sel&#101;ctor则返回true，否则返回 false，例如对于一个className为logcss的div来说，下面的表达式返回true, $(element).match(&#34;div.logcss&#34;) 待续。。<br/><br/>//up&#100;ate 2006-11-30 09:40<br/><br/><br/>up(element, e&#173;xpression, index)：利用 Sel&#101;ctor.findElement方法找到element元素的祖先节点中符合表达式e&#173;xpression的所有元素组成的数组索引为index 的元素，也可以忽略e&#173;xpression(默认为*，表示匹配所有元素)和index(默认为0)，直接这样调用up(element, index)或up(element)<br/>down(element, e&#173;xpression, index)：跟up一样，只是返回的是子孙节点<br/>previous(element, e&#173;xpression, index)：返回前面的兄弟节点<br/>next(element, e&#173;xpression, index)：返回后面的兄弟节点<br/>getElementsBySel&#101;ctor(element,args)：Sel&#101;ctor.findChildElements(element, args)的封装，args表示可以传递多个参数，每个参数是一个css sel&#101;ctor表达式，返回element的子孙节点中符合任何一个css sel&#101;ctor表达式的元素组成的数组<br/>getElementsByClassName(element, className)：返回element中的子孙节点中符合clsssName的元素<br/>readAttribute(element, name)：return $(element).getAttribute(name)，之所以添加这个方法是因为在IE和Safari(Mac)中getAttribute不是一个真正的函数，它没有call、apply等方法，所以在很多时候调用会出现错误(Prototype中很多地方使用了函数的这两个方法)，例如下面的例子(官方文档中的一个例子)，就只能使用readAttribute：<br/><br/>&lt;div id=&#34;widgets&#34;&gt;<br/>&lt;div class=&#34;widget&#34; widget_id=&#34;7&#34;&gt;...&lt;/div&gt;<br/>&lt;div class=&#34;widget&#34; widget_id=&#34;8&#34;&gt;...&lt;/div&gt;<br/>&lt;div class=&#34;widget&#34; widget_id=&#34;9&#34;&gt;...&lt;/div&gt;<br/>&lt;/div&gt;<br/>$$(&#39;div.widget&#39;).invoke(&#39;readAttribute&#39;, &#39;widget_id&#39;)<br/>// [&#34;7&#34;, &#34;8&#34;, &#34;9&#34;]<br/><br/>//Up&#100;ate 2006-12-1<br/><br/>getHeight: function(element)：返回元素高度，return element.offsetHeight<br/>classNames: function(element)：返回一个Element.ClassNames对象，改对象提供对元素class的操作，包括add、remove、set等，一般很少使用，使用Element.addClassName等方法就可以了(就在下面)<br/>hasClassName: function(element, className) ：判断element是否含有className<br/>addClassName: function(element, className) ：给element添加一个class<br/>removeClassName: function(element, className) ：移除元素中的一个class<br/>observe()：调用Event对象(Prototype中的，将在后面介绍)的observe方法为元素注册事件handle<br/>stopObserving() ：移除注册的事件handle<br/>cleanWhitespace: function(element)：移除元素中空白的文本子节点<br/>empty: function(element)：判断元素是否为空<br/>childOf: function(element, ancestor) ：判断element是否为ancestor的子孙节点<br/>scrollTo: function(element) ：滚动条移动到元素所在的地方<br/>getStyle: function(element, style) ：得到元素某个css样式的值，例如$(element).getStyle(&#34;float&#34;)<br/>setStyle: function(element, style) ：设置元素的css样式，style十一个对象，例如element.setStyle({left: &#34;40px&#34;, &#34;background-color&#34;:&#34;#666&#34;})<br/>getDimensions: function(element) ：得到元素的尺寸，即使元素是隐藏的也可以正确的返回，返回 return {width: o&#114;iginalWidth, height: o&#114;iginalHeight}这样的关联数组<br/>makePositioned: function(element) ：当元素的position css属性为static或不存在使，将次属性更改为relative<br/>undoPositioned: function(element) ：跟makePositioned相反的操作<br/>makeClipping: function(element) ：把元素变成clipping(切片)，也就是设置元素的overflow属性为hidden<br/>undoClipping: function(element)：反转上面的方法对元素所做的修改<br/>hasAttribute(element)：判断元素是否有某个属性<br/><br/>Element对象的方法是不是不少啊，哈哈，下面介绍有关Ins&#101;rtion的四个类<br/><br/>Ins&#101;rtion.Before：将内容插入到元素的前面，内容在元素外面<br/>Ins&#101;rtion.Top：将内容插入到元素的顶部，内容在元素里面<br/>Ins&#101;rtion.Bottom：将内容插入到元素的底部，内容在元素里面<br/>Ins&#101;rtion.After：将内容插入到元素后面，内容在元素外面<br/><br/>使用它们的方法比较简单：new Ins&#101;rtion.wh&#101;re(element, content)，其中wh&#101;re表示上面的Before、Top等，content是html字符串，注意其中javascript片断会执行<br/><br/>终于写完了，Prototype的Element方法还真不少<br/><br/>虽然以前觉得自己对Prototype还比较熟悉，写的也有点累，但是发现自己收获仍然挺大的，为了写出这些方法的具体作用和用法，必须强迫自己一行行的把Prototype的代码弄清楚，使自己对Prototype中很多精巧的写法有了更深刻的认识和理解<br/><br/>写这个教程的主要目的是为了给大家一个快速的参考，大家还是对照着源代码看才会真正有所提高]]></description>
		</item>
		
</channel>
</rss>
