??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩日日夜夜,97在线视频国产,免费人成在线观看网站http://www.aygfsteel.com/killme2008/archive/2008/01/08/173663.htmldennisdennisTue, 08 Jan 2008 07:48:00 GMThttp://www.aygfsteel.com/killme2008/archive/2008/01/08/173663.htmlhttp://www.aygfsteel.com/killme2008/comments/173663.htmlhttp://www.aygfsteel.com/killme2008/archive/2008/01/08/173663.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/173663.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/173663.htmlsmartclient是一个企业的ajax框架Q包括非常出色的UI库、工具库和客L服务端数据绑定等功能。smartclient本来是一个商业品, 2007q?1?h以LGPL协议开源。除了一些所见即所得的构徏工具和企业的可选组件外Q其他都开源了。这个记的javaeye和infoq都有报道?br />     在接触smartclient以前Q我q没有用过cM的ajax ui库,比如现在很火的ext。smartclientl我的第一印象是非常漂亮的ui效果Q有兴趣可以d的官?a >demo看看。smartclient的demo和文档做的非常出Ԍ入手开发也非常Ҏ?br /> W一步:下蝲LGPL版本Qƈ解压~?br /> W二步:q行解压后目录下的\SmartClient_60_LGPL\smartclientSDK\start_embedded_server.batQSDK自带了一个内嵌的tomcat
W三步:讉K http://localhost:8080

你将见到Q?br />

q些demo本n是用smartclient制作的。开发过E中你需要做是查看examples和文档中的referenceQapi文档Q,基本没有解决不了的问题?br />
人爱的Hello World例子Q?br />
isc.Label.create({
    height: 
50,
    styleName: 
"helloWorldText",
    padding: 
4,
    backgroundColor: 
"#ffffd0",
    align: 
"center",
    valign: 
"center",
    wrap: 
false,
    showEdges: 
true,
    showShadow: 
true,
    contents: 
"Hello world!"
})

效果Q?br />

    smartclient除了完整的UIlgQ还包括丰富的动态效果库以及可选的皮肤{高U主题,不再展开了,毕竟贴图是在是挺ȝ的事情:Q还不如有兴的自己demo。说了这么多优点Q那么缺Ҏ啥?你可能猜CQ性能Q所有js UI库无法避免的问题Q不q我没有其他UI库的使用l验Q倒是不能l出个比较数据。我们写的东西的性能也只是堪堪能够接受?br />    smartclient跟dwr可以说是天生一对,smartclient UIlg的数据源可以是xml也可以是jsonQ如果采用json做交换格式,可以与dwr无缝l合Q真正实现One Page,One ApplicationQ我们就是这样做的^_^)?br />







dennis 2008-01-08 15:48 发表评论
]]>
Flex is open sourced!http://www.aygfsteel.com/killme2008/archive/2007/04/26/113848.htmldennisdennisThu, 26 Apr 2007 09:02:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/04/26/113848.htmlhttp://www.aygfsteel.com/killme2008/comments/113848.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/04/26/113848.html#Feedback7http://www.aygfsteel.com/killme2008/comments/commentRss/113848.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/113848.html
Flex向微软WPF开战的新v炏V正如预期的那样QAdobe军_flex在Mozilla Public License (MPL)协议下纳入开源社区,flex的前景很值的期待?br>


dennis 2007-04-26 17:02 发表评论
]]>
jQuery使用手册Q收藏)http://www.aygfsteel.com/killme2008/archive/2007/04/19/111927.htmldennisdennisThu, 19 Apr 2007 05:51:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/04/19/111927.htmlhttp://www.aygfsteel.com/killme2008/comments/111927.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/04/19/111927.html#Feedback2http://www.aygfsteel.com/killme2008/comments/commentRss/111927.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/111927.html阅读全文

dennis 2007-04-19 13:51 发表评论
]]>
传统javascript事g模型实现观察者模?/title><link>http://www.aygfsteel.com/killme2008/archive/2007/03/16/104150.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 16 Mar 2007 01:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/killme2008/archive/2007/03/16/104150.html</guid><wfw:comment>http://www.aygfsteel.com/killme2008/comments/104150.html</wfw:comment><comments>http://www.aygfsteel.com/killme2008/archive/2007/03/16/104150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/killme2008/comments/commentRss/104150.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/killme2008/services/trackbacks/104150.html</trackback:ping><description><![CDATA[    在W3C新的事g模型框架中,IE和Mozilla都实C相应的版本,IE的是attachEvent和detachEvent来实现元素事件的d和删除,而Mozilla则是标准的addEventListener?removeEventListener。在传统的javascript事g模型中,我们没办法ؓ一个页面元素注册多个事Ӟ只有靠自己来实现观察者模式。代码来自《ajax in action?我添加了注释<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">命名I间</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> jsEvent </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array();<br /><br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">构造函?/span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(el,eventType){<br /> </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">内部l护一个事件列?/span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.lsnrs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array();<br /> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.el </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> el;<br /> el.eventRouter </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br /> </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">注册回调函数</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);"> el[eventType] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> jsEvent.EventRouter.callback;<br />};<br /><br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">d事g</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.prototype.addListener </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(lsnr){<br /> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.lsnrs.append(lsnr,</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">); <br />} ;<br /><br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">U除事g</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.prototype.removeListener</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(lsnr){ <br /></span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.lsnrs.remove(lsnr); <br />}; <br /><br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">通知所有事?/span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.prototype.notify </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(e){<br /> </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> lsnrs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.lsnrs;<br /> </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);">lsnrs.length;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br />  </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> lsnr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> lsnrs[i];<br />  lsnr.call(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">,e);<br /> }<br />};<br /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">回调函数调用notify</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.callback</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(event){<br /> </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> e </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> event </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);"> window.event;<br /> </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> router </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.eventRouter;<br /> router.notify(e);<br />};<br /><br />Array.prototype.append </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(obj,nodup){<br /> </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(nodup){ <br />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.length]</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">obj;<br /> }<br />};<br />Array.prototype.remove </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(o)<br />{<br />   </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.indexOf(o);<br />   </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (i</span><span style="color: rgb(0, 0, 0);">>-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />  {<br />    </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.splice(i,</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />   }<br />     </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> (i</span><span style="color: rgb(0, 0, 0);">>-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />   }  <br />}; <br /></span></div><br />q里比较巧妙的就?span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);"> el.eventRouter </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;</span><br /><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">注册回调函数</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);"> el[eventType] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> jsEvent.EventRouter.callback;<br /><br />首先lel元素d属?/span><span style="color: rgb(0, 0, 0);">eventRouter是当前的EventRouter对象Q然?/span><span style="color: rgb(0, 0, 0);">Q比如eventType假设为onclickQel是一个button元素Q那么这里就是el[</span><span style="color: rgb(0, 0, 0);">onclick]=</span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.callback;相当于el.onclick=</span><span style="color: rgb(0, 0, 0);">jsEvent.EventRouter.callback;<br />而请注意q个回调函数</span><span style="color: rgb(0, 0, 0);">callback首先得到元素的</span><span style="color: rgb(0, 0, 0);">eventRouter对象Q再调用此对象的notifyҎ触发所有注册的事g?br /><br />再请注意notify函数里面q一行:<br /></span><span style="color: rgb(0, 0, 0);"> lsnr.call(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">,e);<br /><br />我们把event对象传入此函C参,?/span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> e </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> event </span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);"> window.event;那么所有事件函数的W一个参数都是event对象Q避免了IE需要通过window.event得到的事件对象的览器不一致行为?br /><br />使用此对象方式:<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> mat</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.getElementById('mousemat');<br />  cursor</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.getElementById('cursor');<br />  </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> mouseRouter</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> jsEvent.EventRouter(mat,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">onmousemove</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />  mouseRouter.addListener(writeStatus);<br />  mouseRouter.addListener(drawThumbnail); </span></div><br /></span><span style="color: rgb(0, 0, 0);"></span><br /><span id="Codehighlighter1_43_1006_Open_Text"><span style="color: rgb(0, 128, 0);"></span></span><img src ="http://www.aygfsteel.com/killme2008/aggbug/104150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/killme2008/" target="_blank">dennis</a> 2007-03-16 09:19 <a href="http://www.aygfsteel.com/killme2008/archive/2007/03/16/104150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax技术再思?/title><link>http://www.aygfsteel.com/killme2008/archive/2007/03/14/103857.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Wed, 14 Mar 2007 10:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/killme2008/archive/2007/03/14/103857.html</guid><wfw:comment>http://www.aygfsteel.com/killme2008/comments/103857.html</wfw:comment><comments>http://www.aygfsteel.com/killme2008/archive/2007/03/14/103857.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/killme2008/comments/commentRss/103857.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/killme2008/services/trackbacks/103857.html</trackback:ping><description><![CDATA[    q几日重诅Rajax实战》,对AJAX技术的理解有点改变。当ajax开始火热的时候,其实那时我呆的那家公司早?2q时已l开始用XmlHttpRequest做前后台的异步通信Q因为做的是内部|应用,通过l一安装一个delphi写ActiveX表格控g来进行数据的展现和报表的打印Q用xml作ؓ前后C换数据的格式。所以当ajax技术开始火热的时候,我以为,我所做的是ajax应用。买了《ajax实战》,ȝ也不深入Q特别是前面几个章节ȝ半懂不懂Q因为那时的我对javascript和设计模式等斚wq没有深入系l的学习q?br /><br />    我们都知道ajax是javascript、css、DOM和XmlHttpRequest的结合体Q可使用了这些技术的应用׃定是ajax吗?《ajax实战》提Z衡量是否是ajax应用的四条标准:<br /><br />1 览器中的是应用Q而不是内容;<br />2 服务器交付的是数据,而不是内容;<br />3 用户和应用的交互是连l的Q大部分对于服务器的h是隐式的而不是显式的Q?br />4 代码库式巨大的、复杂的Q而且式组l良好的Q这个特点对于架构来说非帔R要,需要认真对待?br /><br />如果以这L标准衡量Q其实我们的很多自以为是ajax应用q是严格意义上的ajax应用QY件的应用可以划分为瞬态的和独占的Q比如china-pub|站Q这只是个瞬态应用,我们只是偶尔去访问它Q对交互的连l性也没有很强的要求;而另外如word、excel之类的应用,需要持l不断的交互Q我们点下某个按钮,L期待能马上有个效果出来,q样的应用就是所谓的独占应用。ajax技术已l在很广泛的瞬态应用中实施Q而ajax的趋势是否就是独占式应用Qgmail和google mapl出了答案,以及现在比较火热的web office{。可我对于此cd用的前景q不看好Q像word之类的应用,对于实时性和安全性的要求是比较高的,而当前网l环境下的gq和安全问题Q会l此cd用带来相当大的隐忧。而实现这L独占式应用,带来的也是服务器非常巨大的ƈ发量Qgmail是个典型的例子Q当你操作非帔RJ的时候,Ҏ出现莫名其妙的错误?br /><br />    我仍然认为ajax应该成ؓ目前web应用的润滑剂Q它应该应用在细节上改善用户体验上,而非d取代桌面应用Q也不可能取代?br /><img src ="http://www.aygfsteel.com/killme2008/aggbug/103857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/killme2008/" target="_blank">dennis</a> 2007-03-14 18:56 <a href="http://www.aygfsteel.com/killme2008/archive/2007/03/14/103857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备忘——javascript操作表格排序http://www.aygfsteel.com/killme2008/archive/2007/03/10/103009.htmldennisdennisSat, 10 Mar 2007 09:26:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/03/10/103009.htmlhttp://www.aygfsteel.com/killme2008/comments/103009.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/03/10/103009.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/103009.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/103009.html
           //cd转换器,列的字D늱型{换ؓ可以排序的类型:String,int,float
            function convert(sValue, sDataType) {
                
switch(sDataType) {
                    
case "int":
                        
return parseInt(sValue);
                    
case "float":
                        
return parseFloat(sValue);
                    
case "date":
                        
return new Date(Date.parse(sValue));
                    
default:
                        
return sValue.toString();
                
                }
            }
            
            
//排序函数产生器,iCol表示列烦引,sDataType表示该列的数据类?/span>
            function generateCompareTRs(iCol, sDataType) {
        
                
return  function compareTRs(oTR1, oTR2) {
                            
var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
                            
var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
        
                            
if (vValue1 < vValue2) {
                                
return -1;
                            } 
else if (vValue1 > vValue2) {
                                
return 1;
                            } 
else {
                                
return 0;
                            }
                        };
            }
            
            
//排序Ҏ
            function sortTable(sTableID, iCol, sDataType) {
                
var oTable = document.getElementById(sTableID);
                
var oTBody = oTable.tBodies[0];
                
var colDataRows = oTBody.rows;
                
var aTRs = new Array;
                
                
//所有列攑օ数组
                for (var i=0; i < colDataRows.length; i++) {
                    aTRs[i] 
= colDataRows[i];
                }
                 
                
//判断最后一ơ排序的列是否与现在要进行排序的列相同,是的话,直接使用reverse()逆序
                if (oTable.sortCol == iCol) {
                    aTRs.reverse();
                } 
else {
                    
//使用数组的sortҎQ传q排序函?/span>
                    aTRs.sort(generateCompareTRs(iCol, sDataType));
                }
        
                
var oFragment = document.createDocumentFragment();
                
for (var i=0; i < aTRs.length; i++) {
                    oFragment.appendChild(aTRs[i]);
                }
       
                oTBody.appendChild(oFragment);
                
//记录最后一ơ排序的列烦?/span>
                oTable.sortCol = iCol;
            }

完整例子Q?br />
<html>
    
<head>
    
<title>Table Sort Example</title>
        
<script type="text/javascript">
            
            
//转换器,列的字D늱型{换ؓ可以排序的类型:String,int,float
            function convert(sValue, sDataType) {
                
switch(sDataType) {
                    
case "int":
                        
return parseInt(sValue);
                    
case "float":
                        
return parseFloat(sValue);
                    
case "date":
                        
return new Date(Date.parse(sValue));
                    
default:
                        
return sValue.toString();
                
                }
            }
            
            
//排序函数产生器,iCol表示列烦引,sDataType表示该列的数据类?/span>
            function generateCompareTRs(iCol, sDataType) {
        
                
return  function compareTRs(oTR1, oTR2) {
                            
var vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
                            
var vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
        
                            
if (vValue1 < vValue2) {
                                
return -1;
                            } 
else if (vValue1 > vValue2) {
                                
return 1;
                            } 
else {
                                
return 0;
                            }
                        };
            }
            
            
//排序Ҏ
            function sortTable(sTableID, iCol, sDataType) {
                
var oTable = document.getElementById(sTableID);
                
var oTBody = oTable.tBodies[0];
                
var colDataRows = oTBody.rows;
                
var aTRs = new Array;
                
                
//所有列攑օ数组
                for (var i=0; i < colDataRows.length; i++) {
                    aTRs[i] 
= colDataRows[i];
                }
                 
                
//判断最后一ơ排序的列是否与现在要进行排序的列相同,是的话,直接使用reverse()逆序
                if (oTable.sortCol == iCol) {
                    aTRs.reverse();
                } 
else {
                    
//使用数组的sortҎQ传q排序函?/span>
                    aTRs.sort(generateCompareTRs(iCol, sDataType));
                }
        
                
var oFragment = document.createDocumentFragment();
                
for (var i=0; i < aTRs.length; i++) {
                    oFragment.appendChild(aTRs[i]);
                }
       
                oTBody.appendChild(oFragment);
                
//记录最后一ơ排序的列烦?/span>
                oTable.sortCol = iCol;
            }

        
</script>
    
</head>
    
<body>
        
<p>Click on the table header to sort in ascending order.</p>
        
<table border="1" id="tblSort">
            
<thead>
                
<tr>
                    
<th onclick="sortTable('tblSort', 0)" 
                        style
="cursor:pointer">Last Name</th>
                    
<th onclick="sortTable('tblSort', 1)" 
                        style
="cursor:pointer">First Name</th>
                    
<th onclick="sortTable('tblSort', 2, 'date')" 
                        style
="cursor:pointer">Birthday</th>
                    
<th onclick="sortTable('tblSort', 3, 'int')" 
                        style
="cursor:pointer">Siblings</th>
                
</tr>
            
</thead>
            
<tbody>
                
<tr>
                    
<td>Smith</td>
                    
<td>John</td>
                    
<td>7/12/1978</td>
                    
<td>2</td>
                
</tr>
                
<tr>
                    
<td>Johnson</td>
                    
<td>Betty</td>
                    
<td>10/15/1977</td>
                    
<td>4</td>
                
</tr>
                
<tr>
                    
<td>Henderson</td>
                    
<td>Nathan</td>
                    
<td>2/25/1949</td>
                    
<td>1</td>
                
</tr>
                
<tr>
                    
<td>Williams</td>
                    
<td>James</td>
                    
<td>7/8/1980</td>
                    
<td>4</td>
                
</tr>
                
<tr>
                    
<td>Gilliam</td>
                    
<td>Michael</td>
                    
<td>7/22/1949</td>
                    
<td>1</td>
                
</tr>
                
<tr>
                    
<td>Walker</td>
                    
<td>Matthew</td>
                    
<td>1/14/2000</td>
                    
<td>3</td>
                
</tr>
            
</tbody>
        
</table>        
    
</body>
</html>



dennis 2007-03-10 17:26 发表评论
]]>
javascript之XML DOM对象http://www.aygfsteel.com/killme2008/archive/2007/03/09/102748.htmldennisdennisFri, 09 Mar 2007 02:21:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/03/09/102748.htmlhttp://www.aygfsteel.com/killme2008/comments/102748.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/03/09/102748.html#Feedback1http://www.aygfsteel.com/killme2008/comments/commentRss/102748.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/102748.html var oXmlDom = new...  阅读全文

dennis 2007-03-09 10:21 发表评论
]]>
oh,my god.我终于能看懂正则表达式咯http://www.aygfsteel.com/killme2008/archive/2007/03/07/102323.htmldennisdennisWed, 07 Mar 2007 01:54:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/03/07/102323.htmlhttp://www.aygfsteel.com/killme2008/comments/102323.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/03/07/102323.html#Feedback1http://www.aygfsteel.com/killme2008/comments/commentRss/102323.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/102323.html正则表达式专?/a>以及正则表达式工作室?br />
常用正则表达式,掌握了规则,看懂q些表达式ƈ不困难,当然Q要辑ֈ熟练写的E度׃那么Ҏ了?br />

匚w中文字符的正则表辑ּQ?[\u4e00-\u9fa5]

匚w双字节字W?包括汉字在内)Q[^\x00-\xff]

应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?/p>

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匚wI的正则表辑ּQ\n[\s| ]*\r

匚wHTML标记的正则表辑ּQ?<(.*)>.*<\/\1>|<(.*) \/>/

匚w首尾I格的正则表辑ּQ?^\s*)|(\s*$)

应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现Q如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址Q?/p>

下面是利用正则表辑ּ匚wIP地址QƈIP地址转换成对应数值的JavascriptE序Q?/p>

function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匚wIP地址的正则表辑ּ
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?/p>

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匚w|址URL的正则表辑ּQhttp://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字W的法E序Q?/p>

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //l果为:abcefgi

我原来在CSDN上发贴寻求一个表辑ּ来实现去除重复字W的ҎQ最l没有找刎ͼq是我能惛_的最单的实现Ҏ。思\是用后向引用取出包括重复的字符Q再以重复的字符建立W二个表辑ּQ取C重复的字W,两者串q。这个方法对于字W顺序有要求的字W串可能不适用?/p>

得用正则表达式从URL地址中提取文件名的javascriptE序Q如下结果ؓpage1

s="http://www.gzcynet/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正则表达式限制网表单里的文本框输入内容Q?/p>

用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表辑ּ限制只能输入全角字符Q? onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"




dennis 2007-03-07 09:54 发表评论
]]>
javascript之DOM技术(二)http://www.aygfsteel.com/killme2008/archive/2007/02/10/99135.htmldennisdennisSat, 10 Feb 2007 07:12:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/10/99135.htmlhttp://www.aygfsteel.com/killme2008/comments/99135.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/10/99135.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/99135.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/99135.html阅读全文

dennis 2007-02-10 15:12 发表评论
]]>
ECMAScript对象基础http://www.aygfsteel.com/killme2008/archive/2007/02/06/98290.htmldennisdennisTue, 06 Feb 2007 06:05:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98290.htmlhttp://www.aygfsteel.com/killme2008/comments/98290.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98290.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/98290.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/98290.htmlvar pointer=GlobalQ?br />报错Q找不到此对象。这是因为在ECMAScript中,每个函数都某个对象的ҎQ我们用到的isNaN(),isFinite(),parseInt()和parseFloat()函数Q看h是独立的函数Q其实它们都是Global对象的函数?br />需要注意两个用于处理url~码的函敎ͼ

1)encodeURI()和decodeURI()  处理完整的uri
2)encodeURIComponent()和decodeURIComponent()     处理片段

2.其他对象如Array,Math,Date对象Q我发现比较有趣的是Array的处理方式与ruby中Array的处理方式几乎一栗?br />
3.ECMAScript对象的创建方式:
1Q工厂方式:

function showColor(){
  alert(
this.color)
}

function createCar(sColor, iDoors, iMpg) {
    
var oTempCar = new Object;
    oTempCar.color 
= sColor;
    oTempCar.doors 
= iDoors;
    oTempCar.mpg 
= iMpg;
    oTempCar.showColor 
=showColor;
    
return oTempCar;
}


var oCar1 = createCar("red"423);
var oCar2 = createCar("blue"325);

q样的方式看h很奇怪,好象ҎshowColor()不是对象的方?br />
2Q构造函数方式:

function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.showColor = function () {
        alert(
this.color)
    }
;
}


var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);


q样的方式有个新问题Q那是每次构造一个对象都重复生成函数showColorQؓ每个对象创徏独立的函数版本?br />
3Q原型方?br />
function Car() {
}


Car.prototype.color 
= "red";
Car.prototype.doors 
= 4;
Car.prototype.mpg 
= 23;
Car.prototype.drivers 
= new Array("Mike""Sue");
Car.prototype.showColor 
= function () {
    alert(
this.color);
}
;

var oCar1 = new Car();
var oCar2 = new Car();

oCar1.drivers.push(
"Matt");

alert(oCar1.drivers);    
//outputs "Mike,Sue,Matt"
alert(oCar2.drivers);    //outputs "Mike,Sue,Matt"


利用对象的prototype属性来构造对象,但是有两个问题:没办法用构造函C参来生成对象Q函数虽然被不同对象׃nQ但是属性竟然也被共享,比如上面代码中,oCar1的drivers属性与oCar2的drivers属性是同一个Array对象?br />
4Qؓ了解决上面问题,我们引入了构造函?原型的؜合方式:
function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.drivers = new Array("Mike""Sue");
}


Car.prototype.showColor 
= function () {
    alert(
this.color);
}
;

var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);

oCar1.drivers.push(
"Matt");

alert(oCar1.drivers);    
//outputs "Mike,Sue,Matt"
alert(oCar2.drivers);    //outputs "Mike,Sue"


属性通过构造函数方式,而函数则通过原型来生成,q就避免了纯_原型方式带来的问题。但是函数放在对象的构造函数定义,让习惯java,c++的h也感觉不爽,对象Z么不能放在一块地方定义呢Q这引出来了动态原型方?br />
5Q动态原型方式:
function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.drivers = new Array("Mike""Sue");

    
if (typeof Car._initialized == "undefined"{

        Car.prototype.showColor 
= function () {
            alert(
this.color);
        }
;

        Car._initialized 
= true;
    }

}



var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);

通过引入_initialized 属性,当第一ơ构造对象时生成ҎshowColor Q再ơ生成对象时Q此时的_initialized 已经是true,避免了重复生成函数Q属性的定义和函数的定义都在构造函数内Q也满了语义上的对象封装概c?br />
我们应当量采用 构造函?原型混合方式 ?span style="FONT-WEIGHT: bold"> 动态原型方?/span> 来创建ECMAScript对象?img src ="http://www.aygfsteel.com/killme2008/aggbug/98290.html" width = "1" height = "1" />

dennis 2007-02-06 14:05 发表评论
]]>
ECMAScript基础http://www.aygfsteel.com/killme2008/archive/2007/02/06/98289.htmldennisdennisTue, 06 Feb 2007 06:03:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98289.htmlhttp://www.aygfsteel.com/killme2008/comments/98289.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98289.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/98289.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/98289.htmlW??ECMAScript基础

JavaScript实质上是ECMAScript在web环境中的实现Q还有其他实玎ͼ如Flash的ActionScript{)。因此了解基本的ECMAScript相当于掌握javascript的基?br />
1。ECMAScript的基概念Q?br />1Q区分大写
2Q变量是q型(解释型语a的基本特点)
3Q每行结分号可有可无Q与java不同Q?br />4Q注释的形式与java相同Q单行或者块注释Q?br />5Q大括号代表代码块{}

2。变量,使用var定义。如var test="test1"
当然Q变量是q型,q且可以不被初始化而定?br />var test="test1"
var test2;
test=1;
采用匈牙利类型标记法来命名变量?br />
3.关键字和保留字(略)

4。原始值和引用?br />与javacMQ变量分成原始类型与引用cd两类Q?br />1Q原始值存储在stack?br />2Q引用值是存储在heap中的对象Q存储在变量处的是一个point

5。原始类型:
1QECMAScript?U原始类型:Undefined、Null、Boolean、Number和String。可以用typeof来判断一个值是否在某类型的范围内。如Q?br />
var s="test";
alert(
typeof s)  //输出"string"

注意Qtype nullq回objectQ因为null被认为是对象的占位符?br />
2)Undefinedcd
当变量未初始化时Q该变量的默认值就是undefined。但是,undefinedq不同于未定义的倹{但是,typeofq不区分两者,比如Q?br />
var temp1;
alert(
typeof temp1);  //未初始化Q输出undefined
alert(typeof temp2);   //未定义,也是undefined


函数无返回|q回的也是undefined

3QNullcd
Null只有一个|也就是null。Undefined本质上是从Nullz来的Q因此两者相{:
alert(null==undefined);  //输出true
但两者意义不同,Undefined表示变量未被初始化之前的|而Null则表C尚未存在的对象Q也是对象的占位符?br />
4QBooleancd
Boolean有两个|true,false

5)Numbercd
Numbercd很有,Number可以表示32位的数字Q也可以表示64位的点敎ͼ?开头的数字当成八进Ӟ以ox开头即为十六进制。有的地方在于所有数字运结果都是返回十q制Q?br />在ECMAScript中,点数的计算本质上是存储的是字符丌Ӏ?br />Numbercd的大在Number.MAX_VALUE和Number.MIN_VALUE之间
无穷大用Infinity表示Q如你所见,Number.MAX_VALUE是InfinityQ而Number.MIN_VALUE是-InfinityQ可以通过isFinite(n)来判断n是否过界限

最后,q有一个特D值是NaNQ表CNot a NumberQ非敎ͼQ非C生在cd转换p|Ӟ注意Q它与自w不相当Qalert(NaN==NaN);  //输出false

不推荐用NaNQ我们可以通过isNaN()来判断是否是非数Q很常用咯)

6) Stringcd
String是唯一没有固定大小的原始类型,可以存储0或者多个Unicode字符。与java不同的是Q可以用双引好和单引号来声明字W:
var s1="test1";
var s2='test2';
常见转义W与其他语言相同?br />
6。类型{?br />1Q{换成字符?
Boolean,String和Numbercd本质上都是伪对象Q他们都有toString()ҎQ与java相同Q?br />
Numbercd的toString()有两U模式:
toString()Q返回数字的十进?br />toString(n)Q返回nq制的字W串(n?,8,10,16Q?br />
2Q{换成数字Q?br />两个ҎQparseInt()和parseFloat()Ҏ。用法略q,需要注意的是parseInt如果没指定基敎ͼ会把?开始的解析?q制。parseFloat反而不会?br />
3Q强制类型{换:
3U强制类型{换:
String(value);
Boolean(value);
Number(value);
规则如下Q?br />Q?QString(value)与toString()基本一P除了对null或者undefined的{换之外,如:
var s1=String(null); //通过
var oNull=null;
var s2=oNull.toString(); //报错

Q?QBoolean(value)Q如果该value是空字符丌Ӏ数?、undefined或者nullQ返回falseQ其他返回true

Q?QNumber()与parseInt和parseFloat基本相同Q不同的是Number(){换整体,如果转换p|q回NaN。如Q?br />
Number(false)  ;//  0
Number(true);  //   1
Number(new Object());   //  NaN
Number('5.6.7');    //  NaN


7。引用类型:
1)Objectc:cM于java中java.lang.Object的地位和作用Qjs中所有类都承此c而来。它包含下面的属性:
Q?QConstructor——对创徏该对象函数的引用
Q?QPrototype——对该对象对象原型的引用Q对所有的c,它将q回一个Object实例
Q?QHasOwnProperty(property)——判断是否有某个属?br />Q?QIsPropertOf(object)——判断该对象是否为另一个对象的原型
Q?QPropertyIsEnumerable(property)——判断对象的属性是否可以枚?br />Q?QToString()——返回对象的原始字符串表C?br />Q?QValueOf()——返回最适合该对象的原始|对于许多c,它的l果与ToString()相同

2QBooleanc,量避免使用Q注意的是,在Boolean表达式中Q所有的值将被自动{化ؓtrueQ所以下面的输出Q?br />var oFalseObject=new Boolean(false);
alert(oFalseObject&&true);  //输出trueQ而不是false

3) Numberc?是Number原始cd的引用类型,应该用此c,量使用原始cd。需要注?个方法:
Q?QtoFixed()Q返回具有指定位数小数的字符Ԍ如:
var oNumberObject=new Number(99);
alert(oNumberObject.toFixed(2));  // 输出99.00

 (2) toExponential()Q返回用U学记数法表C的数字的字W串形式Q如Q?br />var oNumberObject=new Number(99);
alert(oNumberObject.toExponential(1));  //输出9.9e+1

(3)toPrecision(),Ҏq行舍入Q返回尽可能接近真实值的数字Q如Q?br />var oNumberObject=new Number(99);
alert(oNumberObject.toPrecision(3));  //输出99.0
注意Q这3个方法都进行四舍五入操?br />
4QStringc,是String原始cd的对象,常见Ҏ见下面的例子Q?br />
var oStringObject=new String("hello world");
alert(oStringObject.length);  
//输出11
alert(oStringObject.toString()==oStringObject.valueOf());  //输出true
alert(oStringObject.charAt(1));   //输出e
alert(oStringObject.charCodeAt(1)); //输出e的字W代码:101
alert(oStringObject.concat(",china"));   //输出hello world,china
alert(oStringObject.indexOf("e"));   //输出1
alert(oStringObject.lastIndexOf("o"));  //输出7

var oStringObject1=new String("yellow");
var oStringObject2=new String("brick");
var iResult=oStringObject1.localeCompare(oStringObject2);  //Ҏ本地比较
if(iResult>0){
  alert(
"oStringObject1在oStringObject2后面");
}
else if(iResult<0){
   alert(
"oStringObject1在oStringObject2前面");
}
else
   alert(
"oStringObject1和oStringObject2相同");
alert(oStringObject.substring(
3,7));  //输出"lo w"
alert(oStringObject.slice(3,7));  //输出"lo w"
alert(oStringObject.toUpperCase());
alert(oStringObject.toLowerCase());
alert(
"中国".toLocaleLowerCase());


8.操作W和语句Q省略大部分操作W的介绍和控制语句,与其他语aQjava,rubyQ基本相同,需要注意的摘抄如下Q?br />1Qdelete操作W:用于删除对以前定义的对象属性或者方法的引用Q如Q?br />
var o=new Object();
o.name
="dennis";
alert(o.name); 
//输出dennis
delete o.name;   //解除引用
alert(o.name);  //输出undifined


2)for ... in语句Q严格的枚D语句Q用于枚丑֯象属?br />
3Qswitch可以作用于字W串Q而不仅仅是整?br />
4Q不支持重蝲Q与ruby相同Q,可以通过arguments对象来变相实?br />
5Q在ECMAScript中,函数其实是完整一个对象(与ruby相同Q或者说动态语a的基本特点)Q可以采用:
var function_name=new Function(arg1,arg2,arg3,...,function_body);
来定义函敎ͼ速度比普通方法慢Q。函数可以作为参C递,函数的length属性返回此函数的参C?br />6QECMAScript的闭包概念与其他动态语a的概念很不同Q我q不大理解,q段旉好好研究一下?写入备忘录)

dennis 2007-02-06 14:03 发表评论
]]>
javascript事g模型框架http://www.aygfsteel.com/killme2008/archive/2007/02/06/98286.htmldennisdennisTue, 06 Feb 2007 05:58:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98286.htmlhttp://www.aygfsteel.com/killme2008/comments/98286.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98286.html#Feedback1http://www.aygfsteel.com/killme2008/comments/commentRss/98286.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/98286.html阅读全文

dennis 2007-02-06 13:58 发表评论
]]>
javascript之DOM技?一)http://www.aygfsteel.com/killme2008/archive/2007/02/06/98218.htmldennisdennisTue, 06 Feb 2007 03:38:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98218.htmlhttp://www.aygfsteel.com/killme2008/comments/98218.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/06/98218.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/98218.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/98218.html阅读全文

dennis 2007-02-06 11:38 发表评论
]]>
վ֩ģ壺 ʯ| º| ָ| Ϫ| | | ɽ| | | | | | ݸ| | ¡| | | | | ǿ| | | | Ԫ| տ| | | | | | | | | ֹ| | ƽ| | ػ| | | Ʊ|