<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>javascript研究小组</title>
    <description>希望集中javaeye上的javascript爱好者一起进行学习、研究，并拿出我们的研究成果！</description>
    <link>http://hzJavaEyer.group.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>javascript drag&amp;drop beginning</title>
        <author>wangxin0072000</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://wangxin0072000.javaeye.com">wangxin0072000</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/191903" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/191903</a>&nbsp;
          发表时间: 2008年05月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>javascript drag&drop beginning</strong><br />首先我不赞成自己实现拖拽功能，因为比较麻烦，<br />建议用当下比较流行的一些库，用什么那就看项目需要了，<br />但是即便用别人的东西也只至少知道原理，所以我们先看看原理吧<br />如果想自己手动实现拖拽，那么我们先看看都要有哪些工作要做。<br />1 至少要获得鼠标的坐标吧，不然还干个屁。<br />2 至少要获得鼠标的动作吧，不然我怎么知道什么时候拖。什么时候停<br />3 在页面上拖动一个目标实际上就是，改变某个标签的坐标，当然一般也要适当改变<br />也些样式。所以你至少要知道一些css方面的知识。<br /><br />1 鼠标坐标：look：<br /><pre name="code" class="java">function mouseCoords(ev){
    if (ev.pageX || ev.pageY) {
        return {
            x: ev.pageX,
            y: ev.pageY
        };
    }
    return {
        x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y: ev.clientY + document.body.scrollTop - document.body.clientTop
    };
}</pre>唯一要解释的就是型参ev：ev实际就是windows.even:<br />调用这个函数：<br /><pre name="code" class="java">document.onmousemove = mouseMove;
function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);
} // mousePos.x就是横坐标，mousePos.y就是纵坐标</pre>好了，就到这吧。<br />2 复习一下doument下面的都鼠标动作吧（当然只列出我们用的到的）<br />onmousedown:当焦点停留在当前元素上并且按下鼠标键时触发<br />onmousemove:当光标在当前元素上并且光标在当前元素上面移动时触发<br />onmouseout:当光标移出某个元素时触发<br />onmouseover:当贯标移动到某个元素上面时触发<br />onmouseup:当焦点在当前元素上并松开鼠标键时触发<br />下一步：搞清楚流程：<br />拖拽的流程：<br />捕获鼠标按下动作，之后判断鼠标按下所在的坐标是不是你想要的DOM对象，<br />如果是那么让这个对象的坐标跟着鼠标移动而改变，直到鼠标松开（onmouseup）。<br />根据这个流程，我们第一步要先把我们想要移动的DOM对象<br />记录下拉，而且我们必须把这个对象的style position <br />设置为absolute。<br /><pre name="code" class="java">//定义监听函数
document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;
//存放我们想要拖动的DOM对象
var dragObject  = null;
var mouseOffset = null;
function mouseMove(ev){
	ev           = ev || window.event;
	//这里用到了上面第一点写的函数（mouseCoords）
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		dragObject.style.top      = mousePos.y;
		dragObject.style.left     = mousePos.x;

		return false;
	}
}
function mouseUp(){
	dragObject = null;
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject  = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}</pre>这段代码的意思就是告诉浏览器页面上的哪些元素可以被拖动。<br />然后如果捕获的元素是允许被拖动的（即鼠标所在的区域<br />是这个元素的范围内），那么这个元素的坐标就<br />随着鼠标变化，直到鼠标弹起。<br />那么为了让鼠标知道哪些元素可以被拖动，我们需要制作<br />一个容器，盛放这些元素，并且写一个注册函数，把可以拖动<br />的元素注册到容器中：<br /><pre name="code" class="java">
var dropTargets = [];

function addDropTarget(dropTarget){
	dropTargets.push(dropTarget);
}

function mouseUp(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	for(var i=0; i&lt;dropTargets.length; i++){
		var curTarget  = dropTargets[i];
		var targPos    = getPosition(curTarget);
		var targWidth  = parseInt(curTarget.offsetWidth);
		var targHeight = parseInt(curTarget.offsetHeight);
		
		if(
			(mousePos.x > targPos.x)                &&
			(mousePos.x &lt; (targPos.x + targWidth))  &&
			(mousePos.y > targPos.y)                &&
			(mousePos.y &lt; (targPos.y + targHeight))){
				// dragObject was dropped onto curTarget!
		}
	}
	dragObject   = null;
}</pre>所以如果你使用javascript lib，那么如果给某个元素增加拖动<br />属性，那么一般都可以捕获到 up 和 down事件，并可以在这些<br />事件中增加自己的动作。
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/191903#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 11:26:37 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/191903</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/191903</guid>
      </item>
          <item>
        <title>提高css的可读性（翻译总结）</title>
        <author>xo_tobacoo</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://xo-tobacoo.javaeye.com">xo_tobacoo</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/190498" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/190498</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          当你完成了项目后，非常可能马上就忘记了你的项目布局结构。为了在多年后仍然能够理解自己的代码你必须保证良好的代码组织结构。良好的结构降低复杂性，易于管理和维护。然而，怎么样才使良好的结构呢？下面介绍一些技巧供使用。<br /><br />很多开发者创造性的使用注释和文本格式提高css代码的可读性。这些方式结合css基本语法，更具有可读性的结构，并含有更多的隐含提示信息。<br /><br />本文介绍了5个技巧提高代码可管理性和可维护性。你可以把它们用到css中，也可以用到其它任何样式语言或者编程语言中。<br /><br />1.   分离你的样式<br /><br />按照标准把代码分成多个文件模块进行管理。所谓“标准”应该是从名字你能够一眼就看出此文件中代码的功能和作用范围。另外工程很大导致模块文件代码也很大，那么你可以进行再细分，把公共代码分离出来作为主样式表进行重用，虽然可能导致没有必要的服务请求，但是我们获得重用的好处。<br /><br />看下例：第一句注明是“核心样式”。接下来是版本信息，接下来是按功能分离出来的样式文件。<br /><br />/*------------------------------------------------------------------<br />[核心样式]<br /><br />Project: Smashing Magazine<br />Version: 1.1<br />Last change: 05/02/08 [fixed Float bug, vf]<br />Assigned to: Vitaly Friedman (vf), Sven Lennartz (sl)<br />Primary use: Magazine<br />-------------------------------------------------------------------*/<br />@import "reset.css";<br />@import "layout.css";<br />@import "colors.css";<br />@import "typography.css";<br />@import "flash.css";<br />/* @import "debugging.css"; */<br /><br /><br />2.定义页面结构的注释。<br /><br />为了便于他人和团队的浏览，理解，我们可以使用一些关键字，一些符号，定义一个页面整体结构视图。看下面的例子：通过注释结构我们就能了解布局结构。<br /><br />/*------------------------------------------------------------------<br />[布局设计]<br /><br />* body<br />    + Header / #header<br />    + Content / #content<br />        - Left column / #leftcolumn<br />        - Right column / #rightcolumn<br />        - Sidebar / #sidebar<br />            - RSS / #rss<br />            - Search / #search<br />            - Boxes / .box<br />            - Sideblog / #sideblog<br />    + Footer / #footer<br /><br />Navigation #navbar<br />Advertisements .ads<br />Content header h2<br />——————————————————————-*/<br /><br />…或者这样:<br /><br />/*------------------------------------------------------------------<br />[此样式的描述]<br /><br />1. Body<br />    2. Header / #header<br />        2.1. Navigation / #navbar<br />    3. Content / #content<br />        3.1. Left column / #leftcolumn<br />        3.2. Right column / #rightcolumn<br />        3.3. Sidebar / #sidebar<br />            3.3.1. RSS / #rss<br />            3.3.2. Search / #search<br />            3.3.3. Boxes / .box<br />            3.3.4. Sideblog / #sideblog<br />            3.3.5. Advertisements / .ads<br />    4. Footer / #footer<br />-------------------------------------------------------------------*/<br /><br /><br /><br />3.定义颜色和类型<br /><br /><br />定义了不易发生变化的样式之后接下来的任务就是可变或可选部分。如颜色，我们可以为颜色定义自己的颜色词典，以便快速的选择，替换。<br /><br />如下面按颜色风格定义颜色字典：<br /><br />/*------------------------------------------------------------------<br /># [关于此颜色样式风格的描述]<br /><br /># Dark grey (text): #333333<br /># Dark Blue (headings, links) #000066<br /># Mid Blue (header) #333399<br /># Light blue (top navigation) #CCCCFF<br /># Mid grey: #666666<br /># */<br /><br /><br />和上面例子稍有不同，我们可以按内容来定义颜色字典：<br /><br />/*------------------------------------------------------------------<br />[关于此颜色样式风格的描述]<br /><br />Background: #ffffff (white)<br />Content: #1e1e1e (light black)<br />Header h1: #9caa3b (green)<br />Header h2: #ee4117 (red)<br />Footer: #b5cede (dark black)<br /><br />a (standard): #0040b6 (dark blue)<br />a (visited): #5999de (light blue)<br />a (active): #cc0000 (pink)<br />-------------------------------------------------------------------*/<br /><br />类型可以使用同样的方法。如你要定义系统的字体使用。<br /><br />/*------------------------------------------------------------------<br />[此类型的描述]<br /><br />Body copy: 1.2em/1.6em Verdana, Helvetica, Arial, Geneva, sans-serif;<br />Headers: 2.7em/1.3em Helvetica, Arial, "Lucida Sans Unicode", Verdana, sans-serif;<br />Input, textarea: 1.1em Helvetica, Verdana, Geneva, Arial, sans-serif;<br />Sidebar heading: 1.5em Helvetica, Trebuchet MS, Arial, sans-serif;<br /><br />Notes: decreasing heading by 0.4em with every subsequent heading level<br />-------------------------------------------------------------------*/<br /><br /><br />4. 组织css属性：按统一的组织方式写属性，易于团队之间相互交流。<br /><br />按类型组织：<br /><br />body,<br />    h1, h2, h3,<br />    p, ul, li,<br />    form {<br />        border: 0;<br />        margin: 0;<br />        padding: 0;<br />    }<br /><br /><br />有些人按字母顺序组织：<br /><br />body {<br />    background: #fdfdfd;<br />    color: #333;<br />    font-size: 1em;<br />    line-height: 1.4;<br />    margin: 0;<br />    padding: 0;<br />}<br /><br /><br />5.使用友好的缩进风格 <br /><br />下面的缩进能表达“结构关系”：<br /><br />#main-column { display: inline; float: left; width: 30em; }<br />        #main-column h1 { font-family: Georgia, "Times New Roman", Times, serif; margin-bottom: 20px; }<br />        #main-column p { color: #333; }<br /><br /><br />下面的缩进加注释表达了“修改更新”的意思：<br /><br />#sidebar ul li a {<br />    display: block;<br />    background-color: #ccc;<br />        border-bottom: 1px solid #999; /* @new */<br />    margin: 3px 0 3px 0;<br />        padding: 3px; /* @new */<br />}<br /><br /><br />注意：过多的注释和空白会导致加载速度变慢，因此我们可以使用两个版本，一个是开发版本，一个是商业版本。商业版本使用工具进行压缩。另外我们可以根据这些注释更新需求文档。
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/190498#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 10:33:15 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/190498</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/190498</guid>
      </item>
          <item>
        <title>JS之父再谈JS历史（一）</title>
        <author>hax</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://hax.javaeye.com">hax</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/190436" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/190436</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          译自<a href="http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html" target="_blank">Brendan Eich的Blog上Popularity一文</a>。【】内为我的注。<br /><br />Popularity<br />关于流行<br /><br />It seems (according to one guru, but coming from this source, it's a left-handed compliment) that JavaScript is finally popular.<br />貌似（根据一位<a href="http://javascript.crockford.com/popular.html" target="_blank">精神导师</a>的说法【<a href="http://sp42.javaeye.com/blog/178525" target="_blank">中译</a>】）JavaScript最终流行了（尽管从原文来看这种赞美乃是言不由衷）。<br /><br />To me, a nerd from a tender age, this is something between a curse and a joke. (See if you are in my camp: isn't the green chick hotter?)<br />对我这个从小就是nerd【nerd就是痴迷于电脑的呆头鹅，当然nerd也可以以此为荣】的人来说，这介于诅咒和玩笑之间。（看看你是不是在我这个阵营：难道不是那个绿色女孩更hot？<span style="color: gray">【本段删除：不是很理解BE的意思，green chick大概是指那种天生尤物但是喜欢践踏男人自尊的女人，难道BE的意思是nerd都是呆头鹅，很贱地喜欢green chick？】</span>【<span style="color: green">5月7日更新：</span>感谢greens.leef的留言以及我<a href="http://annaliminyan.blogcn.com" target="_blank">女朋友</a>的提点，在原文中有这样<a href="http://www.youtube.com/watch?v=4LiynW5ok5I&eurl=http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html" target="_blank">一段视频</a>，是<a href="http://en.wikipedia.org/wiki/Wicked_(musical)" target="_blank">百老汇音乐剧Wicked（邪恶女巫）</a>中的唱段“Popular”（BE还真搞），这个剧是从<a href="http://zh.wikipedia.org/wiki/%E7%B6%A0%E9%87%8E%E4%BB%99%E8%B9%A4_%28%E7%AB%A5%E8%A9%B1%29" target="_blank">《绿野仙踪》（奥兹国的魔法师）</a>故事衍生而成，视频中绿色皮肤的那个就是西方女巫<a href="http://en.wikipedia.org/wiki/Elphaba" target="_blank">Elphaba</a>，由Idina Menzel扮演，她以该角获得<a href="http://en.wikipedia.org/wiki/Tony_Award_for_Best_Performance_by_a_Leading_Actress_in_a_Musical#2000s" target="_blank">2004年Tony Awards音乐剧最佳女主角奖</a>】）<br /><br /><br /><div class="quote_title">引用</div><div class="quote_div">    Brendan Eich convinced his pointy-haired boss at Netscape that the Navigator browser should have its own scripting language, and that only a new language would do, a new language designed and implemented in big hurry, and that no existing language should be considered for that role.</div><br /><div class="quote_title">引用</div><div class="quote_div">BrendanEich就有这个本事，能够说服当时Netscape的秃头老板，要做Navigator自己的脚本语言，还要不是新的语言不去做，－就这样，匆匆忙忙地设计出一门新的语言并实现出来，还真的没有别的语言能代替这种需求。【sp42译】<br /></div><br /><br />I don't know why Doug is making up stories. He wasn't at Netscape. He has heard my recollections about JavaScript's birth directly, told in my keynotes at Ajax conferences. Revisionist shenanigans to advance a Microhoo C# agenda among Web developers?<br />我不知道Doug干嘛要编故事。他并没在Netscape呆过。在<a href="http://www.ajaxexperience.com/" target="_blank">Ajax大会</a>我做的主题报告上，他也直接听过我关于JavaScript诞生的回忆。修正主义的玩笑是为了在Web开发者中推进<a href="http://www.google.com/search?hl=en&hs=Khw&q=microhoo+site%3Avalleywag.com&btnG=Search" target="_blank">“微虎”</a>的C#么？<br /><br />Who knows, and it's hard to care, but in this week of the tenth anniversary of mozilla.org, a project I co-founded, I mean to tell some history.<br />谁知道呢，也无所谓。不过本周【本篇文章写于4月3日】是我参与创建的<a href="http://www.mozilla.org/" target="_blank">mozilla.org</a>的第十个年头，我想聊一点历史。<br /><br />As I've often said, and as others at Netscape can confirm, I was recruited to Netscape with the promise of "doing Scheme" in the browser. At least client engineering management including Tom Paquin, Michael Toy, and Rick Schell, along with some guy named Marc Andreessen, were convinced that Netscape should embed a programming language, in source form, in HTML. So it was hardly a case of me selling a "pointy-haired boss" -- more the reverse.<br />正如我经常说的，并且其他Netscape的人也可以证明，我是以在浏览器中“搞<a href="http://en.wikipedia.org/wiki/Scheme_(programming_language)" target="_blank">Scheme</a>”的名头被招募到Netscape的。至少客户端工程管理层，包括<a href="http://www.tuko.com/u/paquin/" target="_blank">Tom Paquin</a>, <a href="http://www.toyland.org/" target="_blank">Michael Toy</a>和<a href="http://www.onset.com/team/team_schell.html" target="_blank">Rick Schell</a>，以及叫做<a href="http://blog.pmarca.com/" target="_blank">Marc Andreessen</a>的那些家伙，相信Netscape应该在HTML中以源代码形式嵌入一种编程语言。所以并非是我说服“秃头老板”【其实sp42翻译有误，并非秃头老板而是尖头老板，见<a href="http://en.wikipedia.org/wiki/Image:Dilbert-20050910.png" target="_blank">呆伯特的图片</a>，最左边一个就是尖头老板，根据维基中文，他是“呆伯特的直屬上司，長得像毛澤東，缺乏一般知識常識及其職位所應具有的管理能力，愛說大話且富有向物理現實挑戰的精神(永無止境的顛覆與冒險)，倒楣跟負責的往往是他的下屬。”】——而是反过来。<br /><br /><br />Whether that language should be Scheme was an open question, but Scheme was the bait I went for in joining Netscape. Previously, at SGI, Nick Thompson had turned me on to SICP.<br />这个语言是否应该是Scheme见仁见智，不过Scheme正是我加入Netscape的诱因之一。之前在SGI，<a href="http://mjtemplate.org/" target="_blank">Nick Thompson</a>曾向我介绍了<a href="http://mitpress.mit.edu/sicp/" target="_blank">SICP</a>。<br /><br />What was needed was a convincing proof of concept, AKA a demo. That, I delivered, and in too-short order it was a <em>fait accompli</em>.<br />当时需要的是一个有说服力的概念验证，也就是一个demo。我完成了它，而它随即变成了<em>既成事实</em>。<br /><br />【待续】
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/190436#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 01:53:42 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/190436</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/190436</guid>
      </item>
          <item>
        <title>原创----我的一个小框架</title>
        <author>terryang</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://terryang.javaeye.com">terryang</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/188397" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/188397</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这里写出我自己的一个框架。希望多多指正。我觉得应该也算是一个mvc了吧，是不断的完善到现在，觉得可以拿出来丑丑了，呵呵。这里将主要的部分，如果需要源码的可以给我留言。好了，开始。</p>
<p>先从中间层讲起，也就是mvc中的c，也叫控制器，是整个框架的核心。在前台发送来请求先到web.xml中映射，这个和普通的servlet配置是一样的。</p>
<pre name="code" class="xml">&lt;servlet&gt;
	&lt;servlet-name&gt;Servlets&lt;/servlet-name&gt; &lt;!--映射到Servlets.java这个控制器上面--&gt;
	&lt;servlet-class&gt;com.servlets.Servlets&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
	&lt;servlet-name&gt;Servlets&lt;/servlet-name&gt;
	&lt;url-pattern&gt;*.do&lt;/url-pattern&gt; &lt;!--接受.do的请求--&gt;
&lt;/servlet-mapping&gt;</pre>
<p>和普通的servlet配置一样吧。</p>
<p>因为下面要用到一些前台传过来的参数，所以先把前台的参数说明一下：</p>
<p>以一个form传递为例子：</p>
<p>&nbsp;&nbsp;&nbsp; user.do是action请求，&quot;user&quot;是下面要用到的类名</p>
<p>&nbsp;&nbsp;&nbsp; invokeMethod是类中的方法名，即&quot;login&quot;</p>
<pre name="code" class="html">&lt;form name=&quot;login&quot; action=&quot;user.do&quot; method=&quot;post&quot;&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;invokeMethod&quot; value=&quot;login&quot;&gt;
	&lt;input type=&quot;text&quot; name=&quot;uesrname&quot; /&gt;
	&lt;input type=&quot;submit&quot; value=&quot;登录&quot; /&gt;
 &lt;/form&gt;</pre>
&nbsp;
<p>关键的地方就在Servlets.java这个文件里面</p>
<pre name="code" class="java">		String urlstr=request.getRequestURL().toString(); //获得请求的url
		String str = urlstr.substring(urlstr.lastIndexOf(&quot;/&quot;) + 1, urlstr.length());//获得 &quot;*.do&quot; 这个action参数，上面form传过来的话就是得到 &quot;user.do&quot;
		String filename = str.substring(0, str.lastIndexOf(&quot;.&quot;));//获得 &quot;.do&quot; 前面的字符串即：&quot;user&quot;
		String actionName=Utils.toUpperCaseFirst(filename)+&quot;Action&quot;;
		/**
		将user首字母大写后加上&quot;Action&quot; 得到类名，就是学要到达的地方--&gt;&quot;UserAction.java&quot;
		到达这个类以后，前台页面form那个hidden参数 &quot;invokeMethod&quot; 是这个类其中的一个方法，
		根据java的反射机制调用这个方法进行相应的操作。两次反射就是整个框架的核心。
		总体来说，就是前台的action是一个类名,&quot;invokeMethod&quot;是这个类的方法，根据java的反射
		调用这个类的方法，实现mvc中的m，即action操作
		**/
		List params = new ArrayList();
		 params.add(request);//params
		params.add(response);
		Object object[] = { params };//params 是两个参数,即：request  和 response
		CommandUtils.invoke(object, &quot;com.actions.&quot; + actionName);

</pre>
<p>&nbsp; 反射的代码见下面的附件。</p>
<p>现在就剩action的具体操作了，在这个例子中也就是UserAction.java中login这个方法的具体操作：</p>
<pre name="code" class="java">       /**
	这个类必须继承自ActionCommand (见附件)
	类名中的User即为前台action请求&quot;.do&quot;前的参数,在servlet中转化为UserAction 
	login即为前台页面form中的hidden参数invokeMethod	
	**/

public class UserAction extends ActionCommand {
 /*
	 * 用户登录验证
	 */
	public void login(List args) throws IOException {
		HttpServletRequest request = (HttpServletRequest) args.get(0);//获得request
		HttpServletResponse response = (HttpServletResponse) args.get(1);//获得response
		String uername = request.getParameter(&quot;username&quot;);//测试获得用户名
		//下面就是可进行你的登录具体操作了
	
	}

}

</pre>
<p>&nbsp; 再说说怎么使用这个框架：</p>
<p>&nbsp;&nbsp;&nbsp; 前台的话就是一个&quot;.do&quot;的action的请求， 比如说上面的&ldquo;use.do&rdquo; ，在后台建立一个action类，UserAction.java继承ActionCommand,首字母必须大写</p>
<p>&nbsp;&nbsp;&nbsp; 在该类中建一个名字为前台invokeMethod参数的方法名，并带入一个List参数。OK，测试一下！</p>
<p>好了，完是完了，不知道大家看懂没有了。呵呵。多多指点。下面附上两个反射的代码。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/188397#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 13:58:38 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/188397</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/188397</guid>
      </item>
          <item>
        <title>jQuery插件</title>
        <author>ice-cream</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://ice-cream.javaeye.com">ice-cream</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/187770" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/187770</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2>文件上传(File upload)</h2>
<p><a href="http://www.phpletter.com/Demo/AjaxFileUpload-Demo/">Ajax File Upload</a>
.<br />
<a href="http://www.pixeline.be/experiments/jqUploader/">jQUploader</a>
.<br />
<a href="http://www.fyneworks.com/jquery/multiple-file-upload/">Multiple File Upload plugin</a>
. <br />
<a href="http://www.appelsiini.net/projects/filestyle">jQuery File Style</a>
.<br />
<a href="http://jquery.com/plugins/project/InputFileCSS">Styling an input type file</a>
.<br />
<a href="http://digitalbush.com/projects/progress-bar-plugin">Progress Bar Plugin</a>
.</p>
<h2>表单验证(Form Validation)</h2>
<p><a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">jQuery Validation</a>
.<br />
<a href="http://www.dyve.net/jquery/?autohelp">Auto Help</a>
.<br />
<a href="http://www.willjessup.com/sandbox/jquery/form_validator/form_validate.html">Simple jQuery form validation</a>
.<br />
<a href="http://letmehaveblog.blogspot.com/2007/08/easy-client-side-web-forms-validations.html">jQuery XAV - form validations</a>
.<br />
<a href="http://itgroup.com.ph/alphanumeric/">jQuery AlphaNumeric</a>
.<br />
<a href="http://digitalbush.com/projects/masked-input-plugin">Masked Input</a>
.<br />
<a href="http://www.dennydotnet.com/post/TypeWatch-jQuery-Plugin.aspx">TypeWatch Plugin</a>
.<br />
<a href="http://jquery.com/plugins/project/TextLimiter">Text limiter for form fields</a>
.<br />
<a href="http://www.shawngo.com/gafyd/index.html">Ajax Username Check with jQuery</a>
.</p>
<h2>表单－选取框(Form - Select Box stuff)</h2>
<p><a href="http://jquery.sanchezsalvador.com/page/jquerycombobox.aspx">jQuery Combobox</a>
.<br />
<a href="http://www.ajaxray.com/blog/2007/11/08/jquery-controlled-dependent-or-cascading-select-list-2/">jQuery controlled dependent (or Cascadign) Select List</a>
.<br />
<a href="http://code.google.com/p/jqmultiselects/">Multiple Selects</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/select/">Select box manipulation</a>
.<br />
<a href="http://code.google.com/p/jqueryselectcombo/">Select Combo Plugin</a>
.<br />
<a href="http://www.msxhost.com/jquery/linked-selects/json/%20target=">jQuery - LinkedSelect</a>
<br />
<a href="http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/">Auto-populate multiple select boxes</a>
.<br />
<a href="http://www.sitespotting.it/esempi/002/">Choose Plugin (Select Replacement)</a>
.</p>
<h2>表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)</h2>
<p><a href="http://www.malsup.com/jquery/form/">jQuery Form Plugin</a>
.<br />
<a href="http://code.handlino.com/wiki/jquery-form">jQuery-Form</a>
.<br />
<a href="http://envero.org/jlook/">jLook Nice Forms</a>
.<br />
<a href="http://www.whitespace-creative.com/jquery/jNice/">jNice</a>
.<br />
<a href="http://www.brainfault.com/2007/07/07/pin-plugin-reloaded/">Ping Plugin</a>
.<br />
<a href="http://grzegorz.frydrychowicz.net/jquery_toggleformtext/">Toggle Form Text</a>
.<br />
<a href="http://thoughts.kuzemchak.net/entry/toggleval-for-jquery/">ToggleVal</a>
.<br />
<a href="http://www.pengoworks.com/workshop/jquery/field.plugin.htm">jQuery Field Plugin</a>
.<br />
<a href="http://code.befruit.com/">jQuery Form&rsquo;n Field plugin</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/checkboxes/">jQuery Checkbox manipulation</a>
.<br />
<a href="http://www.alcoholwang.cn/jquery/jTaggingDemo.htm">jTagging</a>
.<br />
<a href="http://code.google.com/p/labelcheck/">jQuery labelcheck</a>
.<br />
<a href="http://scott.sauyet.com/thoughts/archives/2007/03/31/overlabel-with-jquery/">Overlabel</a>
.<br />
<a href="http://blog.amicoimmaginario.it/2007/08/28/jquery-plugin-3-state-radio-buttons/">3 state radio buttons</a>
.<br />
<a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/">ShiftCheckbox jQuery Plugin</a>
.<br />
<a href="http://digitalbush.com/projects/watermark-input-plugin">Watermark Input</a>
.<br />
<a href="http://kawika.org/jquery/checkbox/">jQuery Checkbox (checkboxes with imags)</a>
.<br />
<a href="http://www.softwareunity.com/sandbox/jqueryspinbtn/">jQuery SpinButton Control</a>
.<br />
<a href="http://www.phpletter.com/form_builder/demo.html">jQuery Ajax Form Builder</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/focusfields/">jQuery Focus Fields</a>
.<br />
<a href="http://home.iprimus.com.au/kbwood/jquery/timeEntry.html">jQuery Time Entry</a>
.</p>
<h2>时间、日期和颜色选取(Time, Date and Color Picker)</h2>
<p><a href="http://marcgrabanski.com/code/ui-datepicker/">jQuery UI Datepicker</a>
.<br />
<a href="http://kelvinluck.com/assets/jquery/datePicker/">jQuery date picker plugin</a>
.<br />
<a href="http://code.google.com/p/jquery-timepicker/">jQuery Time Picker</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/timepicker/">Time Picker</a>
.<br />
<a href="http://www.oakcitygraphics.com/jquery/clockpick/ClockPick.cfm">ClickPick</a>
.<br />
<a href="http://labs.perifer.se/timedatepicker/">TimePicker</a>
.<br />
<a href="http://acko.net/dev/farbtastic">Farbtastic jQuery Color Picker Plugin</a>
.<br />
<a href="http://www.intelliance.fr/jquery/color_picker/">Color Picker by intelliance.fr</a>
.</p>
<h2>投票插件(Rating Plugins)</h2>
<p><a href="http://www.phpletter.com/Demo/Jquery-Star-Rating-Plugin/">jQuery Star Rating Plugin</a>
.<br />
<a href="http://www.m3nt0r.de/devel/raterDemo/">jQuery Star Rater</a>
.<br />
<a href="http://riderdesign.com/articles/displayarticle.aspx?articleid=21">Content rater with asp.net, ajax and jQuery</a>
.<br />
<a href="http://www.learningjquery.com/2007/05/half-star-rating-plugin">Half-Star Rating Plugin</a>
.</p>
<h2>搜索插件(Search Plugins)</h2>
<p><a href="http://www.vulgarisoip.com/2007/08/06/jquerysuggest-11/">jQuery Suggest</a>
.<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">jQuery Autocomplete</a>
.<br />
<a href="http://www.pengoworks.com/workshop/jquery/autocomplete.htm">jQuery Autocomplete Mod</a>
.<br />
<a href="http://www.ajaxdaddy.com/demo-jquery-autocomplete.html">jQuery Autocomplete by AjaxDaddy</a>
.<br />
<a href="http://dev.reach1to1.net/saurabh/jplugins/autocomplete/">jQuery Autocomplete Plugin with HTML formatting</a>
.<br />
<a href="http://interface.eyecon.ro/docs/autocomplete">jQuery Autocompleter</a>
.<br />
<a href="http://nodstrum.com/2007/09/19/autocompleter/">AutoCompleter (Tutorial with PHP&amp;MySQL)</a>
.<br />
<a href="http://rikrikrik.com/jquery/quicksearch/">quick Search jQuery Plugin</a>
.</p>
<h2>编辑器(Inline Edit &amp; Editors)</h2>
<p><a href="http://www.jaysalvat.com/jquery/jtageditor/">jTagEditor</a>
.<br />
<a href="http://demo.wymeditor.org/demo.html">WYMeditor</a>
.<br />
<a href="http://garage.pimentech.net/scripts_doc_jquery_jframe/">jQuery jFrame</a>
.<br />
<a href="http://www.appelsiini.net/projects/jeditable">Jeditable - edit in place plugin for jQuery</a>
. <br />
<a href="http://www.dyve.net/jquery/?editable">jQuery editable</a>
.<br />
<a href="http://www.jdempster.com/category/jquery/disableTextSelect/">jQuery Disable Text Select Plugin</a>
.<br />
<a href="http://15daysofjquery.com/edit-in-place-with-ajax-using-jquery-%20-library/15/">Edit in Place with Ajax using jQuery</a>
.<br />
<a href="http://davehauenstein.com/blog/archives/28">jQuery Plugin - Another In-Place Editor</a>
.<br />
<a href="http://dev.iceburg.net/jquery/tableEditor/demo.php">TableEditor</a>
.<br />
<a href="http://joshhundley.com/teditable-in-place-editing-for-tables/">tEditable - in place table editing for jQuery</a>
.</p>
<h2>多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)</h2>
<p><a href="http://www.contentwithstructure.com/extras/jmedia">jMedia - accessible multi-media embedding</a>
.<br />
<a href="http://sourceforge.net/projects/jbedit/">JBEdit - Ajax online Video Editor</a>
.<br />
<a href="http://www.sean-o.com/jquery/jmp3/">jQuery MP3 Plugin</a>
.<br />
<a href="http://malsup.com/jquery/media/">jQuery Media Plugin</a>
.<br />
<a href="http://jquery.lukelutman.com/plugins/flash/index.html">jQuery Flash Plugin</a>
.<br />
<a href="http://www.solitude.dk/archives/embedquicktime/">Embed QuickTime</a>
.<br />
<a href="http://keith-wood.name/svg.html">SVG Integration</a>
.</p>
<h2>图片(Photos/Images/Galleries)</h2>
<p><a href="http://jquery.com/demo/thickbox/">ThickBox</a>
.<br />
<a href="http://leandrovieira.com/projects/jquery/lightbox/">jQuery lightBox plugin</a>
.<br />
<a href="http://blog.joshuaeichorn.com/archives/2007/01/11/jquery-image-strip/">jQuery Image Strip</a>
.<br />
<a href="http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html">jQuery slideViewer</a>
.<br />
<a href="http://benjaminsterling.com/2007/09/09/jquery-jqgalscroll-photo-gallery/">jQuery jqGalScroll 2.0</a>
.<br />
<a href="http://benjaminsterling.com/2007/10/02/jquery-jqgalviewii-photo-gallery/">jQuery - jqGalViewII</a>
.<br />
<a href="http://benjaminsterling.com/2007/10/21/jqgalviewiii-proof-of-concept/">jQuery - jqGalViewIII</a>
.<br />
<a href="http://opiefoto.com/articles/photoslider">jQuery Photo Slider</a>
.<br />
<a href="http://joanpiedra.com/jquery/thumbs/">jQuery Thumbs - easily create thumbnails</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/jQIR/">jQuery jQIR Image Replacement</a>
.<br />
<a href="http://www.gmarwaha.com/jquery/jcarousellite/index.php#what">jCarousel Lite</a>
.<br />
<a href="http://projects.sevir.org/storage/jpanview/index.html">jQPanView</a>
.<br />
<a href="http://sorgalla.com/projects/jcarousel/#Examples">jCarousel</a>
.<br />
<a href="http://www.intelliance.fr/jquery/imagebox/">Interface Imagebox</a>
.<br />
<a href="http://www.getintothis.com/blog/2006/10/12/image-gallery-using-jquery-interface-reflections/">Image Gallery using jQuery, Interface &amp; Reflactions</a>
.<br />
<a href="http://realazy.org/lab/jquery/j-gallery/">simple jQuery Gallery</a>
.<br />
<a href="http://chicagosocial.com/gallery/">jQuery Gallery Module</a>
.<br />
<a href="http://www.eogallery.com/">EO Gallery</a>
.<br />
<a href="http://flesler.blogspot.com/search/label/jQuery.ScrollShow">jQuery ScrollShow</a>
.<br />
<a href="http://www.malsup.com/jquery/cycle/">jQuery Cycle Plugin</a>
.<br />
<a href="http://www.projectatomic.com/en/flickr.htm">jQuery Flickr</a>
.<br />
<a href="http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin">jQuery Lazy Load Images Plugin</a>
.<br />
<a href="http://www.sunsean.com/zoomi/">Zoomi - Zoomable Thumbnails</a>
.<br />
<a href="http://remysharp.com/2007/03/19/a-few-more-jquery-plugins-crop-labelover-and-pluck/#crop">jQuery Crop - crop any image on the fly</a>
.<br />
<a href="http://jquery.com/plugins/project/reflection">Image Reflection</a>
.</p>
<h2>Google地图（Google Map）</h2>
<p><a href="http://www.dyve.net/jquery/?googlemaps">jQuery Plugin googlemaps</a>
.<br />
<a href="http://code.google.com/p/jmaps/">jMaps jQuery Maps Framework</a>
.<br />
<a href="http://projects.sevir.org/storage/jqmaps/index.html">jQmaps</a>
.<br />
<a href="http://olbertz.de/jquery/googlemap.html">jQuery &amp; Google Maps</a>
.<br />
<a href="http://snippets.dzone.com/posts/show/4361">jQuery Maps Interface forr Google and Yahoo maps</a>
.<br />
<a href="http://webrocket.ulmb.com/jmaps/">jQuery J Maps - by Tane Piper</a>
.</p>
<h2>游戏(Games)</h2>
<p><a href="http://fmarcia.info/jquery/tetris/tetris.html">Tetris with jQuery</a>
.<br />
<a href="http://64squar.es/">jQuery Chess</a>
.<br />
<a href="http://www.bennadel.com/blog/623-jQuery-Demo-Mad-Libs-Word-Game.htm">Mad Libs Word Game</a>
.<br />
<a href="http://www.alexatnet.com/node/68">jQuery Puzzle</a>
.<br />
<a href="http://www.willjessup.com/sandbox/jquery/solar_system/rotator.html">jQuery Solar System (not a game but awesome jQuery Stuff)</a>
.</p>
<h2>表格等(Tables, Grids etc.)</h2>
<p><a href="http://docs.jquery.com/Plugins/Tablesorter">UI/Tablesorter</a>
. <br />
<a href="http://www.reconstrukt.com/ingrid/">jQuery ingrid</a>
.<br />
<a href="http://www.trirand.com/blog/?p=13">jQuery Grid Plugin</a>
.<br />
<a href="http://ideamill.synaptrixgroup.com/jquery/tablefilter/tabletest.htm">Table Filter - awesome!</a>
.<br />
<a href="http://dev.iceburg.net/jquery/tableEditor/demo.php">TableEditor</a>
.<br />
<a href="http://www.hanpau.com/jquery/unobtrusivetreetable.php">jQuery Tree Tables</a>
.<br />
<a href="http://www.javascripttoolbox.com/jquery/#expandablerows">Expandable &ldquo;Detail&rdquo; Table Rows</a>
.<br />
<a href="http://www.remotesynthesis.com/blog/index.cfm/2007/9/25/Sortable-Table-ColdFusion-Custom-Tag-with-jQueryUI">Sortable Table ColdFusion Costum Tag with jQuery UI</a>
.<br />
<a href="http://flesler.blogspot.com/2007/10/jquerybubble.html">jQuery Bubble</a>
.<br />
<a href="http://tablesorter.com/docs/">TableSorter</a>
.<br />
<a href="http://www.webtoolkit.info/demo/jquery/scrollable/demo.html">Scrollable HTML Table</a>
.<br />
<a href="http://p.sohei.org/stuff/jquery/columnmanager/demo/demo.html">jQuery column Manager Plugin</a>
.<br />
<a href="http://p.sohei.org/stuff/jquery/tablehover/demo/demo.html">jQuery tableHover Plugin</a>
.<br />
<a href="http://p.sohei.org/stuff/jquery/columnhover/demo/demo.html">jQuery columnHover Plugin</a>
.<br />
<a href="http://makoomba.altervista.org/grid/">jQuery Grid</a>
.<br />
<a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/">TableSorter plugin for jQuery</a>
.<br />
<a href="http://joshhundley.com/teditable-in-place-editing-for-tables/">tEditable - in place table editing for jQuery</a>
.<br />
<a href="http://www.hovinne.com/dev/jquery/chartotable/">jQuery charToTable Plugin</a>
.<br />
<a href="http://www.ita.es/jquery/jquery.grid.columnSizing.htm">jQuery Grid Column Sizing</a>
.<br />
<a href="http://www.ita.es/jquery/jquery.grid.rowSizing.htm">jQuery Grid Row Sizing</a>
.</p>
<h2>统计图(Charts, Presentation etc.)</h2>
<p><a href="http://worcesterwideweb.com/2007/06/04/jquery-wizard-plugin/">jQuery Wizard Plugin </a>
.<br />
<a href="http://www.reach1to1.com/sandbox/jquery/jqchart/">jQuery Chart Plugin</a>
.<br />
<a href="http://ejohn.org/apps/speed/">Bar Chart</a>
.</p>
<h2>边框、圆角、背景(Border, Corners, Background)</h2>
<p><a href="http://www.malsup.com/jquery/corner/">jQuery Corner</a>
.<br />
<a href="http://blue-anvil.com/archives/anti-aliased-rounded-corners-with-jquery">jQuery Curvy Corner</a>
.<br />
<a href="http://dev.jquery.com/%7Epaul/plugins/nifty/example.html">Nifty jQuery Corner</a>
.<br />
<a href="http://illandril.net/jQuery/transparentCorners/">Transparent Corners</a>
.<br />
<a href="http://www.methvin.com/jquery/jq-corner.html">jQuery Corner Gallery</a>
.<br />
<a href="http://blog.brandonaaron.net/my-jquery-plugins/gradient/">Gradient Plugin</a>
.</p>
<h2>文字和超链接(Text and Links)</h2>
<p><a href="http://wanderinghorse.net/computing/%20/jquery/spoilers/demo.html">jQuery Spoiler plugin</a>
.<br />
<a href="http://johannburkard.de/blog/programming/%20/highlight-%20-text-higlighting-jquery-plugin.html">Text Highlighting</a>
.<br />
<a href="http://www.jdempster.com/category/jquery/disableTextSelect/">Disable Text Select Plugin</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/newsticker/">jQuery Newsticker</a>
.<br />
<a href="http://www.ollicle.com/2007/jun/03/jquery_lineheight_flexible.html">Auto line-height Plugin</a>
.<br />
<a href="http://agencenp.net/textgrad/textgrad.html">Textgrad - a text gradient plugin</a>
.<br />
<a href="http://kawika.org/jquery/linklook/">LinkLook - a link thumbnail preview</a>
.<br />
<a href="http://rikrikrik.com/jquery/pager/#examples">pager jQuery Plugin</a>
.<br />
<a href="http://rikrikrik.com/jquery/shortkeys/">shortKeys jQuery Plugin</a>
.<br />
<a href="http://www.ollicle.com/eg/jquery/biggerlink">jQuery Biggerlink</a>
.<br />
<a href="http://troy.dyle.net/linkchecker/">jQuery Ajax Link Checker</a>
.</p>
<h2>鼠标提示（Tooltips）</h2>
<p><a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/">jQuery Plugin - Tooltip</a>
.<br />
<a href="http://www.codylindley.com/blogstuff/js/jtip/">jTip - The jQuery Tool Tip</a>
.<br />
<a href="http://examples.learningjquery.com/62/demo/index.html#examplesection">clueTip</a>
.<br />
<a href="http://edgarverle.com/BetterTip/default.cfm">BetterTip</a>
.<br />
<a href="http://ioreader.com/2007/05/15/flash-tooltips-using-jquery/">Flash Tooltips using jQuery</a>
.<br />
<a href="http://www.texotela.co.uk/code/jquery/tooltipdemo/">ToolTip</a>
.</p>
<h2>菜单和导航(Menus, Navigations)</h2>
<p><a href="http://stilbuero.de/jquery/tabs_3/">jQuery Tabs Plugin - awesome! </a>
. [<a href="http://stilbuero.de/jquery/tabs_3/nested.html">demo nested tabs</a>
.]<br />
<a href="http://blog.cutterscrossing.com/index.cfm/2007/6/15/Updated-JQuery-Nested-Tab-Set-with-Demo">another jQuery nested Tab Set example (based on jQuery Tabs Plugin)</a>
.<br />
<a href="http://www.sunsean.com/idTabs/">jQuery idTabs</a>
.<br />
<a href="http://jdsharp.us/jQuery/plugins/jdMenu/">jdMenu - Hierarchical Menu Plugin for jQuery</a>
.<br />
<a href="http://be.twixt.us/jquery/suckerFish.php">jQuery SuckerFish Style</a>
.<br />
<a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Plugin Treeview</a>
.<br />
<a href="http://be.twixt.us/jquery/treeView.php">treeView Basic</a>
.<br />
<a href="http://labs.activespotlight.net/jQuery/menu_demo.html">FastFind Menu</a>
.<br />
<a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/">Sliding Menu</a>
.<br />
<a href="http://gmarwaha.com/blog/?p=7">Lava Lamp jQuery Menu</a>
.<br />
<a href="http://icon.cat/wiki/IconDock_En#iconDock_jQuery_Plugin">jQuery iconDock</a>
.<br />
<a href="http://cherne.net/brian/resources/jquery.variations.html">jVariations Control Panel</a>
.<br />
<a href="http://www.trendskitchens.co.nz/jquery/contextmenu/">ContextMenu plugin</a>
.<br />
<a href="http://p.sohei.org/jquery-plugins/clickmenu/">clickMenu</a>
.<br />
<a href="http://www.ndesign-studio.com/blog/mac/css-dock-menu">CSS Dock Menu</a>
.<br />
<a href="http://webexpose.org/2006/12/28/jquery-pop-up-menu-tutorial/">jQuery Pop-up Menu Tutorial</a>
.<br />
<a href="http://www.getintothis.com/blog/2006/09/26/my-first-jquery-plugin-a-sliding-menu/">Sliding Menu</a>
.</p>
<p><a title="http://stilbuero.de/jquery/tabs_3/" href="http://stilbuero.de/jquery/tabs_3/" title="http://stilbuero.de/jquery/tabs_3/">http://stilbuero.de/jquery/tabs_3/</a>
</p>
<h2>幻灯、翻转等(Accordions, Slide and Toggle stuff)</h2>
<p><a href="http://bassistance.de/jquery-plugins/jquery-plugin-accordion/">jQuery Plugin Accordion</a>
.<br />
<a href="http://fmarcia.info/jquery/accordion.html">jQuery Accordion Plugin Horizontal Way</a>
.<br />
<a href="http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html">haccordion - a simple horizontal accordion plugin for jQuery</a>
.<br />
<a href="http://dev.portalzine.de/index?/Horizontal_Accordion--print">Horizontal Accordion by portalzine.de</a>
.<br />
<a href="http://berndmatzner.de/jquery/hoveraccordion/">HoverAccordion</a>
.<br />
<a href="http://fmarcia.info/jquery/accordion.html">Accordion Example from fmarcia.info</a>
.<br />
<a href="http://blog.evaria.com/wp-content/themes/blogvaria/jquery/index.php">jQuery Accordion Example</a>
.<br />
<a href="http://jquery.com/files/demo/dl-done.html">jQuery Demo - Expandable Sidebar Menu</a>
.<br />
<a href="http://www.andreacfm.com/examples/jQpanels/">Sliding Panels for jQuery</a>
.<br />
<a href="http://jquery.andreaseberhard.de/toggleElements/">jQuery ToggleElements</a>
.<br />
<a href="http://www.ndoherty.com/demos/coda-slider/">Coda Slider</a>
.<br />
<a href="http://sorgalla.com/projects/jcarousel/#Examples">jCarousel</a>
.<br />
<a href="http://www.reindel.com/accessible_news_slider/">Accesible News Slider Plugin</a>
.<br />
<a href="http://icant.co.uk/sandbox/jquerycodeview/">Showing and Hiding code Examples</a>
.<br />
<a href="http://gsgd.co.uk/sandbox/jquery/easing/">jQuery Easing Plugin</a>
.<br />
<a href="http://sonspring.com/journal/jquery-portlets">jQuery Portlets</a>
.<br />
<a href="http://jdsharp.us/jQuery/plugins/AutoScroll/">AutoScroll</a>
.<br />
<a href="http://medienfreunde.com/lab/innerfade/">Innerfade</a>
.</p>
<h2>拖放插件(Drag and Drop)</h2>
<p><a href="http://docs.jquery.com/UI/Draggables">UI/Draggables</a>
.<br />
<a href="http://fromvega.com/wordpress/2007/07/14/easydrag-jquery-plugin/">EasyDrag jQuery Plugin</a>
.<br />
<a href="http://sonspring.com/journal/jquery-portlets">jQuery Portlets</a>
.<br />
<a href="http://dev.iceburg.net/jquery/jqDnR/">jqDnR - drag, drop resize</a>
.<br />
<a href="http://interface.eyecon.ro/demos/drag.html">Drag Demos</a>
.</p>
<h2>XML XSL JSON Feeds</h2>
<p><a href="http://www.jongma.org/webtools/jquery/xslt/">XSLT Plugin</a>
.<br />
<a href="http://cgaskell.wordpress.com/2006/11/02/jquery-ajax-call-and-result-xml-parsing/">jQuery Ajax call and result XML parsing</a>
.<br />
<a href="http://jquery.com/plugins/project/xmlObjectifier">xmlObjectifier - Converts XML DOM to JSON</a>
.<br />
<a href="http://jquery.glyphix.com/">jQuery XSL Transform</a>
.<br />
<a href="http://malsup.com/jquery/taconite/">jQuery Taconite - multiple Dom updates</a>
.<br />
<a href="http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin">RSS/ATOM Feed Parser Plugin</a>
.<br />
<a href="http://www.malsup.com/jquery/gfeed/">jQuery Google Feed Plugin</a>
.</p>
<h2>浏览器(Browserstuff)</h2>
<p><a href="http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/">Wresize - IE Resize event Fix Plugin</a>
.<br />
<a href="http://jquery.khurshid.com/ifixpng.php">jQuery ifixpng</a>
.<br />
<a href="http://jquery.andreaseberhard.de/pngFix/">jQuery pngFix</a>
.<br />
<a href="http://www.crismancich.de/jquery/plugins/linkscrubber/">Link Scrubber - removes the dotted line onfocus from links</a>
.<br />
<a href="http://www.matthewjrichards.co.uk/articles/2007/06/25/jquery-perciformes-the-entire-suckerfish-familly-under-one-roof">jQuery Perciformes - the entire suckerfish familly under one roof</a>
.<br />
<a href="http://blog.brandonaaron.net/my-jquery-plugins/background-iframe/">Background Iframe</a>
.<br />
<a href="http://jquery.com/plugins/project/QinIE">QinIE - for proper display of Q tags in IE</a>
.<br />
<a href="http://webrocket.ulmb.com/ability/">jQuery Accessibility Plugin</a>
.<br />
<a href="http://www.ogonek.net/mousewheel/jquery-demo.html">jQuery MouseWheel Plugin</a>
.</p>
<h2>对话框、确认窗口(Alert, Prompt, Confirm Windows)</h2>
<p><a href="http://trentrichardson.com/Impromptu/">jQuery Impromptu</a>
.<br />
<a href="http://nadiaspot.com/jquery/confirm">jQuery Confirm Plugin</a>
.<br />
<a href="http://dev.iceburg.net/jquery/jqModal/">jqModal</a>
.<br />
<a href="http://www.ericmmartin.com/projects/simplemodal/">SimpleModal</a>
.</p>
<h2>CSS</h2>
<p><a href="http://www.kelvinluck.com/article/switch-stylesheets-with-jquery">jQuery Style Switcher</a>
.<br />
<a href="http://andykent.bingodisk.com/bingo/public/jss/">JSS - Javascript StyleSheets</a>
.<br />
<a href="http://flesler.blogspot.com/2007/11/jqueryrule.html">jQuery Rule - creation/manipulation of CSS Rules</a>
.<br />
<a href="http://www.designerkamal.com/jPrintArea/">jPrintArea</a>
.</p>
<h2>DOM、AJAX和其它JQuery插件（DOM, Ajax and other jQuery plugins）</h2>
<p><a href="http://flydom.socianet.com/">FlyDOM</a>
.<br />
<a href="http://brandonaaron.net/docs/dimensions/#getting-started">jQuery Dimenion Plugin</a>
.<br />
<a href="http://happygiraffe.net/blog/articles/2007/09/26/jquery-logging">jQuery Loggin</a>
.<br />
<a href="http://jquery.com/plugins/project/metadata">Metadata - extract metadata from classes, attributes, elements</a>
.<br />
<a href="http://johannburkard.de/blog/programming/%20/inc-a-super-tiny-client-side-include-%20-jquery-plugin.html">Super-tiny Client-Side Include Javascript jQuery Plugin</a>
.<br />
<a href="http://humanized.com/weblog/2007/09/14/undo-made-easy-with-ajax-part-1/">Undo Made Easy with Ajax</a>
.<br />
<a href="http://www.jasons-toolbox.com/JHeartbeat/">JHeartbeat - periodically poll the server</a>
.<br />
<a href="http://www.appelsiini.net/projects/lazyload">Lazy Load Plugin</a>
.<br />
<a href="http://blog.brandonaaron.net/2007/08/19/new-plugin-live-query/">Live Query</a>
.<br />
<a href="http://jquery.offput.ca/every/">jQuery Timers</a>
.<br />
<a href="http://www.joanpiedra.com/jquery/shareit/">jQuery Share it - display social bookmarking icons</a>
.<br />
<a href="http://www.jdempster.com/category/code/jquery/cookiejar/">jQuery serverCookieJar</a>
.<br />
<a href="http://ideamill.synaptrixgroup.com/?p=3">jQuery autoSave</a>
.<br />
<a href="http://www.semicomplete.com/blog/geekery/jquery-interface-puffer.html">jQuery Puffer</a>
.<br />
<a href="http://33rockers.com/jquery/iframe-demo/">jQuery iFrame Plugin</a>
.<br />
<a href="http://www.stilbuero.de/2006/09/17/%20-plugin-for-jquery/">Cookie Plugin for jQuery</a>
.<br />
<a href="http://leftlogic.com/lounge/articles/jquery_spy2">jQuery Spy - awesome plugin</a>
.<br />
<a href="http://www.learningjquery.com/2007/01/effect-delay-trick">Effect Delay Trick</a>
.<br />
<a href="http://jquick.sullof.com/jquick/">jQuick - a quick tag creator for jQuery</a>
.<a href="http://noteslog.com/post/metaobjects-11-released-today/"><br />
Metaobjects</a>
.<br />
<a href="http://www.thunderguy.com/semicolon/2007/08/14/elementready-jquery-plugin/">elementReady</a>
.</p>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/187770#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 21:29:43 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/187770</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/187770</guid>
      </item>
          <item>
        <title>学习prototype之旅一</title>
        <author>dhaigang</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://dhaigang.javaeye.com">dhaigang</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/187760" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/187760</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          prototype.js是什么?<br />万一你没有使用过大名鼎鼎的prototype.js，那么让我来告诉你，prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙，而且兼容标准的类库，能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。<br /><br />如果你最近尝试使用它，你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样，一开始，我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。我想，在我学习完它之后，把我学到的东西分享给大家是件不错的事。 <br /><br />同时，在本文中，我也将提供一个关于这个类库提供的objects,classes,functions,extensions这对东东的非官方参考<br /><br />在阅读这个文档时，熟悉Ruby的开发者将会注意到Ruby的一些内建类和本类库扩展实现之间非常相似。 <br /><br />相关文章<br />Advanced JavaScript guide. <br /><br />一些实用的函数<br />这个类库带有很多预定义的对象和实用函数，这些东东的目的显然是把你从一些重复的打字中解放出来 。 <br /><br />使用$()方法<br />$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写，就像这个DOM方法一样，这个方法返回参数传入的id的那个元素。<br /><br />比起DOM中的方法，这个更胜一筹。你可以传入多个id作为参数然后 $() 返回一个带有所有要求的元素的一个 Array 对象。<br /><br />&lt;HTML><br />&lt;HEAD><br />&lt;TITLE> Test Page &lt;/TITLE><br />&lt;script src="prototype-1.3.1.js">&lt;/script><br />&lt;script><br />function test1()<br />{<br />var d = $('myDiv');<br />alert(d.innerHTML);<br />}<br />function test2()<br />{<br />var divs = $('myDiv','myOtherDiv');<br />for(i=0; i&lt;divs.length; i++)<br />{<br />alert(divs[i].innerHTML);<br />}<br />}<br />&lt;/script><br />&lt;/HEAD><br />&lt;BODY><br />&lt;div id="myDiv"><br />&lt;p>This is a paragraph&lt;/p><br />&lt;/div><br />&lt;div id="myOtherDiv"><br />&lt;p>This is another paragraph&lt;/p><br />&lt;/div><br />&lt;input type="button" value=Test1 onclick="test1();"><br /><br />&lt;input type="button" value=Test2 onclick="test2();"><br /><br />&lt;/BODY><br />&lt;/HTML><br /><br />另外一个好处是，这个函数能传入用string表示的对象ID，也可以传入对象本身，这样，在建立其它能传两种类型的参数的函数时非常有用。<br /><br />使用$F()函数$F()函数是另一个大收欢迎的“快捷键”，它能用于返回任何表单输入控件的值，比如text box,drop-down list。这个方法也能用元素id或元素本身做为参数。<br />&lt;script><br />function test3()<br />{<br />alert(  $F('userName')  );<br />}<br />&lt;/script><br />&lt;input type="text" id="userName" value="Joe Doe"><br /><br />&lt;input type="button" value=Test3 onclick="test3();"><br /><br />使用$A()函数<br />$A()函数能把它接收到的单个的参数转换成一个Array对象。<br /><br />这个方法，结合被本类库扩展了的Array类，能方便的把任何的可枚举列表转换成或拷贝到一个Array对象。一个推荐的用法就是把DOM Node Lists转换成一个普通的Array对象，从而更有效率的进行遍历，请看下面的例子。<br />&lt;script><br />function showOptions(){<br />var someNodeList = $('lstEmployees').getElementsByTagName('option');<br />var nodes = $A(someNodeList);<br />nodes.each(function(node){<br />alert(node.nodeName + ': ' + node.innerHTML);<br />});<br />}<br />&lt;/script><br />&lt;select id="lstEmployees" size="10" ><br />&lt;option value="5">Buchanan, Steven&lt;/option><br />&lt;option value="8">Callahan, Laura&lt;/option><br />&lt;option value="1">Davolio, Nancy&lt;/option><br />&lt;/select><br />&lt;input type="button" value="Show the options" onclick="showOptions();" ><br /><br />使用 $H() 函数<br />$H()函数把一些对象转换成一个可枚举的和联合数组类似的Hash对象。<br />&lt;script><br />function testHash()<br />{<br />//let's create the object<br />var a = {<br />first: 10,<br />second: 20,<br />third: 30<br />};<br />//now transform it into a hash<br />var h = $H(a);<br />alert(h.toQueryString()); //displays: first=10&second=20&third=30<br />}<br />&lt;/script><br /><br />使用$R()函数<br />$R()是new ObjectRange(lowBound,upperBound,excludeBounds)的缩写。<br /><br />跳到ObjectRange 类文档可以看到一个关于此类的完整描述. 此时，我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在Enumerable 对象文档中找到。<br />&lt;script><br />function demoDollar_R(){<br />var range = $R(10, 20, false);<br />range.each(function(value, index){<br />alert(value);<br />});<br />}<br />&lt;/script><br />&lt;input type="button" value="Sample Count" onclick="demoDollar_R();" ><br /><br />使用Try.these()函数<br />Try.these() 方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易， 他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行，返回成功执行的那个方法的返回值。<br /><br />在下面的例子中， xmlNode.text在一些浏览器中好用，但是xmlNode.textContent在另一些浏览器中正常工作。 使用Try.these()方法我们可以得到正常工作的那个方法的返回值。<br />&lt;script><br />function getXmlNodeValue(xmlNode){<br />    return Try.these(<br />        function() {return xmlNode.text;},<br />        function() {return xmlNode.textContent;)<br />        );<br />}<br />&lt;/script><br /><br />Ajax对象<br />上面提到的共通方法非常好，但是面对它吧，它们不是最高级的那类东西。它们是吗？你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。<br /><br />我很肯定你对prototype.js感兴趣的原因很可能是由于它的AJAX能力。所以让我们解释当你需要完成AJAX逻辑的时候，这个包如何让它更容易。<br /><br />Ajax 对象是一个预定义对象，由这个包创建，为了封装和简化编写AJAX 功能涉及的狡猾的代码。 这个对象包含一系列的封装AJAX逻辑的类。我们来看看其中几个类。 <br /><br />使用Ajax.Request类<br />如果你不使用任何的帮助程序包，你很可能编写了整个大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程， 然后解析出响应 然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。<br /><br />为了支持 AJAX 功能。这个包定义了 Ajax.Request 类。<br /><br />假如你有一个应用程序可以通过url http://yoursever/app/get_sales?empID=1234&year=1998与服务器通信。它返回下面这样的XML 响应。<br />&lt;?xml version="1.0" encoding="utf-8" ?><br />&lt;ajax-response><br />&lt;response type="object" id="productDetails"><br />&lt;monthly-sales><br />&lt;employee-sales><br />&lt;employee-id>1234&lt;/employee-id><br />&lt;year-month>1998-01&lt;/year-month><br />&lt;sales>$8,115.36&lt;/sales><br />&lt;/employee-sales><br />&lt;employee-sales><br />&lt;employee-id>1234&lt;/employee-id><br />&lt;year-month>1998-02&lt;/year-month><br />&lt;sales>$11,147.51&lt;/sales><br />&lt;/employee-sales><br />&lt;/monthly-sales><br />&lt;/response><br />&lt;/ajax-response><br /><br />用 Ajax.Request对象和服务器通信并且得到这段XML是非常简单的。下面的例子演示了它是如何完成的。<br />&lt;script><br />function searchSales()<br />{<br />var empID = $F('lstEmployees');<br />var y = $F('lstYears');<br />var url = 'http://yoursever/app/get_sales';<br />var pars = 'empID=' + empID + '&year=' + y;<br /><br />var myAjax = new Ajax.Request(<br />url,<br />{<br />method: 'get',<br />parameters: pars,<br />onComplete: showResponse<br />});<br /><br />}<br />function showResponse(originalRequest)<br />{<br />//put returned XML in the textarea<br />$('result').value = originalRequest.responseText;<br />}<br />&lt;/script><br />&lt;select id="lstEmployees" size="10" onchange="searchSales()"><br />&lt;option value="5">Buchanan, Steven&lt;/option><br />&lt;option value="8">Callahan, Laura&lt;/option><br />&lt;option value="1">Davolio, Nancy&lt;/option><br />&lt;/select><br />&lt;select id="lstYears" size="3" onchange="searchSales()"><br />&lt;option selected="selected" value="1996">1996&lt;/option><br />&lt;option value="1997">1997&lt;/option><br />&lt;option value="1998">1998&lt;/option><br />&lt;/select><br /><br />&lt;textarea id=result cols=60 rows=10 >&lt;/textarea><br /><br />你注意到传入 Ajax.Request构造方法的第二个对象了吗？ 参数{method: 'get', parameters: pars, onComplete: showResponse} 表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method 值为 'get'的属性，另一个属性名为 parameters 包含HTTP请求的查询字符串，和一个onComplete 属性/方法包含函数showResponse。 <br /><br />还有一些其它的属性可以在这个对象里面定义和设置，如 asynchronous，可以为true 或 false 来决定AJAX对服务器的调用是否是异步的（默认值是 true）。<br /><br />这个参数定义AJAX调用的选项。在我们的例子中，在第一个参数通过HTTP GET命令请求那个url，传入了变量 pars包含的查询字符串， Ajax.Request 对象在它完成接收响应的时候将调用showResponse 方法。<br /><br />也许你知道， XMLHttpRequest在HTTP请求期间将报告进度情况。这个进度被描述为四个不同阶段：Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 对象在任何阶段调用自定义方法 ，Complete 是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onXXXXX 属性/方法中提供自定义的方法对象。 就像我们例子中的 onComplete 。你传入的方法将会被用一个参数调用，这个参数是 XMLHttpRequest 对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的HTTP结果代码的 status 属性。<br /><br />还有另外两个有用的选项用来处理结果。我们可以在onSuccess 选项处传入一个方法，当AJAX无误的执行完后调用， 相反的，也可以在onFailure选项处传入一个方法，当服务器端出现错误时调用。正如onXXXXX 选项传入的方法一样，这两个在被调用的时候也传入一个带有AJAX请求的XMLHttpRequest对象。<br /><br />我们的例子没有用任何有趣的方式处理这个 XML响应， 我们只是把这段XML放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息，然后更新页面中的某些元素， 或者甚至可能做某些XSLT转换而在页面中产生一些HTML。<br /><br />在1.4.0版本中，一种新的事件回传外理被引入。如果你有一段代码总是要为一个特殊的事件执行，而不管是哪个AJAX调用引发它，那么你可以使用新的Ajax.Responders对象。<br /><br />假设你想要在一个AJAX调用正在运行时，显示一些提示效果，像一个不断转动的图标之类的，你可以使用两个全局事件Handler来做到，其中一个在第一个调用开始时显示图标，另一个在最后一个调用完成时隐藏图标。看下面的例子。<br />&lt;script><br />var myGlobalHandlers = {<br />onCreate: function(){<br />Element.show('systemWorking');<br />},<br />onComplete: function() {<br />if(Ajax.activeRequestCount == 0){<br />Element.hide('systemWorking');<br />}<br />}<br />};<br />Ajax.Responders.register(myGlobalHandlers);<br />&lt;/script><br />&lt;div id='systemWorking'>&lt;img src='spinner.gif'>Loading...&lt;/div><br /><br />更完全的解释，请参照 Ajax.Request 参考 和 Ajax选项参考。<br /><br /><br />使用Ajax.Updater类<br />如果你的服务器的另一端返回的信息已经是HTML了，那么使用这个程序包中 Ajax.Updater 类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了，例子比我写说明的更清楚。<br />&lt;script><br />function getHTML()<br />{<br />var url = 'http://yourserver/app/getSomeHTML';<br />var pars = 'someParameter=ABC';<br /><br />var myAjax = new Ajax.Updater(<br />'placeholder',<br />url,<br />{<br />method: 'get',<br />parameters: pars<br />});<br /><br />}<br />&lt;/script><br />&lt;input type=button value=GetHtml onclick="getHTML()"><br />&lt;div id="placeholder">&lt;/div><br /><br />你可以看到，这段代码比前面的例子更加简洁，不包括 onComplete 方法，但是在构造方法中传入了一个元素id。 我们来稍稍修改一下代码来描述如何在客户端处理服务器段错误成为可能。<br /><br />我们将加入更多的选项， 指定处理错误的一个方法。这个是用 onFailure 选项来完成的。我们也指定了一个 placeholder 只有在成功请求之后才会被填充。为了完成这个目的我们修改了第一个参数从一个简单的元素id到一个带有两个属性的对象， success (一切OK的时候被用到) 和 failure (有地方出问题的时候被用到) 在下面的例子中没有用到failure属性，而仅仅在 onFailure 处使用了 reportError 方法。<br />&lt;script><br />function getHTML()<br />{<br />var url = 'http://yourserver/app/getSomeHTML';<br />var pars = 'someParameter=ABC';<br /><br /><br /><br />var myAjax = new Ajax.Updater(<br />{success: 'placeholder'},<br />url,<br />{<br />method: 'get',<br />parameters: pars,<br />onFailure: reportError<br />});<br /><br />}<br />function reportError(request)<br />{<br />alert('Sorry. There was an error.');<br />}<br />&lt;/script><br />&lt;input type=button value=GetHtml onclick="getHTML()"><br />&lt;div id="placeholder">&lt;/div><br /><br />如果你的服务器逻辑是连同HTML 标记返回JavaScript 代码， Ajax.Updater对象可以执行那段JavaScript代码。为了使这个对象对待响应为JavaScript，你只需在最后参数的对象构造方法中简单加入evalScripts: true属性。但是值得提醒的是，像这个选项名evalScripts暗示的，这些脚本会被执行，但是它们不会被加入到Page的脚本中。“有什么区别？”，可能你会这样问。我们假定请求地址返回的东东像这样：<br />&lt;script language="javascript" type="text/javascript"><br />function sayHi(){<br />alert('Hi');<br />}<br />&lt;/script><br />&lt;input type=button value="Click Me" onclick="sayHi()"><br /><br />如果你以前这样尝试过，你知道这些脚本不会如你所期望的那样工作，原因是这段脚本会被执行，但像上面这样的脚本执行并不会创建一个名叫sayHi的函数，它什么也不做。如果要创建一个函数，我们应当把代码改成下面这个样子：<br />&lt;script language="javascript" type="text/javascript"><br />sayHi = function(){<br />alert('Hi');<br />};<br />&lt;/script><br />&lt;input type=button value="Click Me" onclick="sayHi()"><br /><br />为什么我们在上面的代码中不使用var关键字来声明这个变量呢（指sayHi ），因为那样做创建出来的函数将只是当前脚本块的一个局部变量（至少在IE中是这样）。不写var关键字，创建出来的对象的作用域就是我们所期望的window。<br /><br />更多相关知识，请参看  Ajax.Updater reference 和options reference. <br /><br />枚举... 噢!噢!<br />你知道，我们都是这样来做循环的，建一个Array，用elements组织它们，再建一个循环结构（例如for,foreach,while)通过index数字来访问每一个element，再用这个element做一些动作。 <br /><br />当你想到这时，你会发现几乎每次写循环代码你都会迟早用到一个Array。那么，如果Array对象能够提供更多的功能给它们的迭代器使用不是很爽吗？确实是这样，事实上很多的编程语言都在它们的Array或其它类似的结构中（如Collections,Lists）提供一些这样的功能。 <br /><br />现在好了，prototype.js了给我们一个 Enumerable对象，它实现了很多和可迭代数据进行交互的窍门。和原有的JS对象相比prototype.js更上一层楼，它对Array 类s扩展了所有枚举要用的函数。 <br /><br />循环, Ruby样式的<br />在标准的javascript中，如果你想把一个array中的所有elements显示出来，你可以像下面代码这样写得很好：<br />&lt;script><br />function showList(){<br />var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];<br />            for(i=0;i&lt;simpsons.length;i++){<br />alert(simpsons[i]);<br />}<br />}<br />&lt;/script><br />&lt;input type="button" value="Show List" onclick="showList();" ><br /><br />使用我们新的最好的朋友，prototype.js，我们可以把它生写成这样<br />function showList(){<br />var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];<br />            simpsons.each( function(familyMember){<br />alert(familyMember);<br />});<br />}<br /><br />你可能会想“非常奇怪的方式...相对旧的，这种语法太怪异了”。哦，在上面的例子，确实什么也没有，在这个简单得要死例子中，也没有改变太多啊，尽管如此，请继续读下去。 <br /><br />在继续下面内容之前，你注意到那个被做为一个参数传递给each函数的函数？我们把它理解成迭代器函数。 <br /><br />Your arrays on steroids<br />就如我们上面提到的，把你的Array中的elements当成相同的类型使用相同的属性和函数是很通用(Common,不知该翻译成通用还是庸俗)的。让我们看看怎么样利用我们新的马力强劲的Arrays的迭代功能吧。 <br /><br />依照标准找到一个element。<br />&lt;script><br />function findEmployeeById(emp_id){<br />var listBox = $('lstEmployees')<br />var options = listBox.getElementsByTagName('option');<br />options = $A(options);<br />var opt = options.find( function(employee){<br />return (employee.value == emp_id);<br />});<br />alert(opt.innerHTML); //displays the employee name<br />}<br />&lt;/script><br />&lt;select id="lstEmployees" size="10" ><br />&lt;option value="5">Buchanan, Steven&lt;/option><br />&lt;option value="8">Callahan, Laura&lt;/option><br />&lt;option value="1">Davolio, Nancy&lt;/option><br />&lt;/select><br />&lt;input type="button" value="Find Laura" onclick="findEmployeeById(8);" ><br /><br />现在我们再下一城，看看如何过滤一个Array中的元素，从每个元素中得到我们想要的成员。<br />&lt;script><br />function showLocalLinks(paragraph){<br />paragraph = $(paragraph);<br />var links = $A(paragraph.getElementsByTagName('a'));<br />//find links that do not start with 'http'<br />var localLinks = links.findAll( function(link){<br />var start = link.href.substring(0,4);<br />return start !='http';<br />});<br />//now the link texts<br />var texts = localLinks.pluck('innerHTML');<br />//get them in a single string<br />var result = texts.inspect();<br />alert(result);<br />}<br />&lt;/script><br />&lt;p id="someText"><br />This &lt;a href="http://othersite.com/page.html">text&lt;/a> has<br />a &lt;a href="#localAnchor">lot&lt;/a> of<br />&lt;a href="#otherAnchor">links&lt;/a>. Some are<br />&lt;a href="http://wherever.com/page.html">external&lt;/a><br />and some are &lt;a href="#someAnchor">local&lt;/a><br />&lt;/p><br />&lt;input type=button value="Find Local Links" onclick="showLocalLinks('someText')"><br /><br />上面的代码仅仅是一点小小的实践让人爱上这种语法。请参看 Enumerable和Array的所有函数
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/187760#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 20:52:46 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/187760</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/187760</guid>
      </item>
          <item>
        <title>在JS中如何动态生成一个DOJO WIDGET组件并插入的页面中</title>
        <author>bojingwen1984</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://bojingwen1984.javaeye.com">bojingwen1984</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/187554" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/187554</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我想在页面中设置一个添加按钮，当单击这个按钮时候，而可以动态地添加一个DOJO WIDGET到当前页面中，例如：&lt;div id="imageTab" dojoType="dijit.layout.ContentPane" href="test.html" title="Image">&lt;/div>。这里面如果用普通的DOM操作无法实现。在网上查找说利用‘dojo.widget.createWidget’方法，但是调试过程中报错“dojo.widget”is null or not object",然后到DOJO的官方网站的API中查找，居然没有这个‘dojo.widget.createWidget’方法，时不时从DOJO1.0之后就没有了，那么请教达人，在JS中如何动态添加一个WIDGET!谢谢先！
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/187554#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 14:56:28 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/187554</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/187554</guid>
      </item>
          <item>
        <title>javaScript DOM特性/方法</title>
        <author>ice-cream</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://ice-cream.javaeye.com">ice-cream</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/187246" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/187246</a>&nbsp;
          发表时间: 2008年04月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>❑ DOM的核心： Node<br />
由于DOM是树形结构，所以一个节点被抽象为对象Node，这是DOM的核心对象：<br />
Node的种类一共有12种，通过Node.nodeType的取值来确定（为1-12），分为：</p>
<pre name="code" class="js">Node.ELEMENT_NODE (1)
Node.ATTRIBUTE_NODE (2)
Node.TEXT_NODE (3) //&lt;![CDATA[ ]]&gt;中括着的纯文本，它没有子节点
Node.CDATA_SECTION_NODE (4) //子节点一定为TextNode
Node.ENTITY_REFERENCE_NODE (5) 
Node.ENTITY_NODE (6) //DTD中的实体定义&lt;!ENTITY foo “foo”&gt;，无子节点
Node.PROCESSING_INSTRUCTION_NODE (7) //PI，无子节点
Node.COMMENT_NODE (8)
Node.DOCUMENT_NODE (9) //最外层的Root element,包括所有其它节点
Node.DOCUMENT_TYPE_NODE (10) //DTD，&lt;!DOCTYPE………..&gt;
Node.DOCUMENT_FRAGMENT_NODE (11)
Node.NOTATION_NODE (12) //DTD中的Nation定义 </pre>
<p> ❑ Node接口包含的特性/方法<br />
节点的属性<br />
nodeName 属性将返回一个字符串，其内容是给定节点的名字。如果节点是元素节点，返回这个元素的名称；如果是属性节点，返回这个属性的名称；如果是文本节点，返回一个内容为#text 的字符串；<br />
<br />
nodeType 属性将返回一个整数，这个数值代表给定节点的类型<br />
nodeValue 属性将返回给定节点的当前值.如果节点是元素节点，返回null；如果是属性节点，返回这个属性的名称；如果是文本节点，返回文本节点的内容；<br />
<br />
ownerDocument 指向这个节点所属的文档<br />
attributes 包哈勒代表一个元素的特性的Attr对象；仅用于Element节点<br />
<br />
childNodes 所有子节点的列表<br />
firstChild 指向在childNodes列表中的第一个节点<br />
lastChild 指向在childNodes列表中的最后一个节点<br />
nextSibling 指向后一个兄弟节点；如果这个节点就是最后一个兄弟节点，那么该值为null<br />
previousSibling 指向前一个兄弟节点；如果这个节点就是第一个兄弟节点，那么该值为null<br />
parentNode 返回一个给定节点的父节点<br />
<br />
❑ hasChildNodes() 当childNodes包含一个或多个节点时，返回真<br />
❑ appendChild(node) 将node添加到childNodes的末尾<br />
❑ removeChild(node) 将node从childNodes中删除<br />
<br />
❑ insertBefore(newnode refnode) 在childNodes中的refnode之前插入newnode</p>
<pre name="code" class="js">var container = document.getElementById(&quot;content&quot;);
var message = document.getElementById(&quot;fineprint&quot;);
var para = document.createElement(&quot;p&quot;);
container.insertBefore(para,message);</pre>
<p>&nbsp;
❑ replaceChild(newnode,oldnode)将childNodes中的oldnode替换成newnode</p>
<pre name="code" class="js">var container = document.getElementById(&quot;content&quot;);
var message = document.getElementById(&quot;fineprint&quot;);
var para = document.createElement(&quot;p&quot;);
container.replaceChild(para,message);</pre>
<p>&nbsp;❑ 获得Node：</p>
<pre name="code" class="js">/* 通过document对象 */
var oHtml = document.documentElement;


/* 得到&lt;head /&gt;和&lt;body /&gt; */
var oHead = oHtml.firstChild;
var oBody = oHtml.lastChild;
/* 可以用这种方式 */
var oHead = oHtml.childNodes[0];
var oBody = oHtml.childNodes[1];
/* 也可以使用方法获取数组的索引值 */
var oHead = oHtml.childNodes.item(0);
var oBody = oHtml.childNodes.item(1);
/* 使用document.body来得到&lt;body /&gt; */
var oBody = document.body;</pre>
<p> ❑ createElement(element)<br />
创建一个指定标签名创建一个新的元素节点，返回值为指向新建元素节点的引用指针。<br />
eg) var para = document.createElement(&quot;p&quot;);<br />
document.body.appendChild(para);</p>
<p>
❑ createTextNode()<br />
创建一个包含着给定文本的新文本节点，返回一个指向新建文本节点的引用指针：<br />
reference = document.createTextNode()<br />
参数为新建文本节点所包含的文本字符串</p>
<pre name="code" class="js">var message = document.createTextNode(&quot;hello world&quot;);
var container = document.createElement(&quot;p&quot;);
container.appendChild(message);
document.body.appendChild(container);</pre>
<p>&nbsp;❑ cloneNode()<br />
reference = node.cloneNode(deep)<br />
为给定节点创建一个副本，参数为 true 或者 false，true 表示同时复制该节点的子节点，false 则不复制任何子节点。</p>
<pre name="code" class="js">var para = document.createElement(&quot;p&quot;);
var message = document.createTextNode(&quot;hello world&quot;);
para.appendChild(message);
document.body.appendChild(para);
var newpara = para.cloneNode(true);
document.body.appendChild(newpara);</pre>
<p><br />
 ❑ 检测节点类型<br />
通过使用nodeType特性检验节点类型：<br />
alert(document.nodeType); //outputs &quot;9&quot;<br />
alert(document.documentElement.nodeType); //outputs &quot;1&quot;<br />
这个例子中，document.nodeType返回9，等于Node.DOCUMENT_NODE；同时document. documentElement.nodeType返回1，等于Node.ELEMENT_NODE。<br />
<br />
也可以用Node常量来匹配这些值：<br />
alert(document.nodeType == Node.DOCUMENT_NODE); //true<br />
alert(document.documentElement.nodeType == Node.ELEMENT_NODE); //true</p>
<p>这段代码可以在Mozilla 1.0+、Opera 7.0+和Safari 1.0+上正常运行。但是IE不支持这些常量，所以这些代码在IE上会产生错误。</p>
<p><br />
❑ 处理特性<br />
即便Node接口已具有attributes方法，且已被所有类型的节点继承，然而，只有Element节点才能有特性。<br />
Element节点的attributes属性其实是NamedNodeMap，它提供一些用于访问和处理其内容的方法：<br />
getNamedItem(name) 返回nodeName属性值等于name的节点；<br />
removeNamedItem(name) 删除nodeName属性值等于name的节点；<br />
setNamedItem(node) 将node添加到列表中，按其nodeName属性进行索引；<br />
item(pos)&nbsp; 像NodeList一样，返回在位置pos的节点；<br />
<br />
请记住这些方法都是返回一个Attr节点，而非特性值。<br />
NamedNodeMap对象也有一个length属性来指示它所包含的节点的数量。<br />
<br />
当NamedNodeMap用于表示特性时，其中每个节点都是Attr节点，它的nodeName属性被设置为特性名称，而nodeValue属性被设置为特性的值。<br />
例如，假设有这样一个元素：<br />
&lt;p id=&quot;p1&quot; style=&quot;color:red&quot;&gt;hello world!&lt;/p&gt;<br />
<br />
假设变量oP包含指向这个元素的一个引用。于是可以这样访问id特性的值：<br />
var sId = oP.attributes.getNamedItem(&quot;id&quot;).nodeValue; //p1<br />
或者<br />
var sId = oP.attributes.item(0).nodeValue;<br />
<br />
还可以通过给nodeValue属性赋新值来改变id特性：<br />
oP.attributes.getNamedItem(&quot;id&quot;).nodeValue = &quot;newId&quot;;<br />
<br />
Attr节点也有一个完全等同于（同时也完全同步于）nodeValue属性的value属性，并且有name属性和nodeName属性保持同步。我们可以随意使用这些属性来修改或变更特性。<br />
<br />
因为这个方法有些累赘，DOM又定义了三个元素方法来帮助访问特性：<br />
getAttribute(name) 等于attributes.getNamedItem(name).value；<br />
setAttribute(name, newvalue) 等于attribute.getNamedItem(name).value = newvalue；<br />
removeAttribute(name) 等于attributes.removeNamedItem(name)<br />
<br />
要获取前面用的&lt;p/&gt;的id特性，只需这样做：<br />
var sId = oP.getAttribute(&quot;id&quot;);<br />
更改ID:<br />
oP.setAttribute(&quot;id&quot;, &quot;newId&quot;);</p>
<p><br />
 ❑ setAttribute()<br />
element.setAttribute(attributeName,attributeValue);<br />
为给定元素节点添加一个新的属性值或是改变它的现有属性<br />
<br />
❑ getAttribute<br />
attributeValue = element.getAttribute(attributeName)<br />
返回一个给定元素的一个给定属性节点的值。<br />
<br />
❑ getElementById()<br />
element = document.getElementById(ID)<br />
寻找一个有着给定 id 属性值的元素，返回一个元素节点</p>
<p>
❑ getElementsByName()<br />
用来获取所有name特性等于指定值的元素：<br />
elements = document.getElementsByName(tagName)<br />
返回一个节点集合。</p>
<p>
❑ getElementsByTagName()<br />
用于寻找有着给定标签名的所有元素：<br />
elements = document.getElementsByTagName(tagName)<br />
返回一个节点集合。</p>
<p>❑ 生成与操作Node <br />
createAttribute(name) ：创建一个名为name的属性节点。<br />
createCDATASection(text) ：创建一个子节点为text的CDATA区。<br />
createComment(text) ：创建一个注释内容为text的注释节点。<br />
createDocumentFragment() ：创建一个文档片断（fragment）节点。<br />
createElement(tagName) ：创建一个名为tagName的元素节点。<br />
createEntityReference(name) ：Creates an entity reference node with the given name。<br />
createProcessingInstruction(target, data) ：Creates a PI node with the given target and data。 <br />
createTextNode(text) ：创建一个包含text的文本节点。 <br />
其中最重要的方法是createElement(),createDocumentFragment(), create TextNode()。</p>
<pre name="code" class="js">/*使用createElement(),createTextNode(),appendChild()动态添加节点*/
function createMessage(){
 var op = document.createElement(&quot;p&quot;);
 var oText = document.createTextNode(&quot;hello world!&quot;);
 op.appendChild(oText);
 document.body.appendChild(op);
}</pre>
<p> ❑ 使用createDocumentFragment()</p>
<pre name="code" class="js">//通常做法
var arrText = ['first', 'second', 'third'];
for(var i=0; i&lt;arrText.length; i++){
	var op = document.createElement('p');
	var oText = document.createTextNode(arrText[i]);
	op.appendChild(oText);
	document.body.appendChild(op);
}

//使用documentFragment
var arrText = ['first', 'second', 'third'];
var oFragment = document.createDocumentFragment();
for(var i=0; i&lt;arrText.length; i++){
	var op = document.createElement('p');
	var oText = document.createTextNode(arrText[i]);
	op.appendChild(oText);
	oFragment.appendChild(op);
}
document.body.appendChild(oFragment);</pre>
<p>&nbsp;
通过DocumentFragment的方式效率更高。</p>
<p>
❑ HTML DOM：<br />
使用DOM的核心方法是针对所有XML的，针对HTML DOM有特殊的方法，如<br />
使用DOM core：oImg.setAttribute(&quot;src&quot;, &quot;picture.gif&quot;);<br />
使用HTML DOM：oImg.src = &quot;picture.jpg&quot;;</p>
<p>&nbsp;</p>
<p>附件是javascript dom 手册，可以方便查阅</p>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/187246#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 27 Apr 2008 12:28:51 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/187246</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/187246</guid>
      </item>
          <item>
        <title>树目录结构数据层的设计问题</title>
        <author>terryang</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://terryang.javaeye.com">terryang</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/187141" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/187141</a>&nbsp;
          发表时间: 2008年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>这两天遇到一个树目录的问题，前台的问题基本上已经确定了，使用dtree，比较不错的一个开源树，可以根据需要添加自己的function。</p>
<p>先说说具体的流程：</p>
<p>&nbsp;&nbsp;&nbsp; 用户点击一个书目录节点，可以展开该目录下的所有文件夹，同时把该文件夹以及所有子文件夹下面的文件在右边list出来。这样的话用数据库就必须有很好的设计思路(网上看到一个，下面会提到)，不然一个递归循环就得等半天，对数据库压力也比较大。但是我是想用xml文件来存取目录树的结构和该目录下文件的id,右边要显示的一些文件的信息还是用数据库来存取。因为xml文件的结构本身就是树型的，存取起来也比较方便.下面说说具体的步骤，xml放入操作可以使用jdom。我用的是dom4j，可能是先入为主吧。</p>
<p>我的xml测试文件log.xml：</p>
<pre name="code" class="xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;gbk&quot;?&gt;

&lt;log&gt;

    &lt;group&gt;		 

		&lt;folder id=&quot;1&quot;&gt; &lt;!--下面会获得该节点的对象--&gt;

			&lt;folder&gt;

			      &lt;fileId&gt;1&lt;/fileId&gt;	

			&lt;/folder&gt;

			&lt;fileId&gt;2&lt;/fileId&gt;  &lt;!---文件的id号--&gt;

			&lt;fileId&gt;3&lt;/fileId&gt;	

		&lt;/folder&gt;	

		&lt;folder id=&quot;2&quot;&gt;

			&lt;folder id=&quot;3&quot;&gt;

			    &lt;!---空文件夹--&gt;

			&lt;/folder&gt;

		&lt;/folder&gt;	

		&lt;fileId&gt;4&lt;/fileId&gt;	

		&lt;fileId&gt;5&lt;/fileId&gt;		

	&lt;/group&gt;

&lt;/log&gt; 

</pre>
&nbsp;
<p>下面将从xml文件中读取出指定文件夹下的所有文件的id以便从数据库中读取文件信息：</p>
<pre name="code" class="java">SAXReader saxReader = new SAXReader();



String fileName=&quot;d:/log.xml&quot;;



try {

	

	 //读入一个xml文件，转化为Document 对象

	Document document = saxReader.read(new File(fileName));



     /**

	*  获得log/group/folder节点内id属性值为1的节点	

	*  你没感觉到这种做法很想数据库的查询操作吗。是不是很神奇呢！

	**/



	Element  e=(Element)document.selectSingleNode(&quot;log/group/folder[@id='1']&quot;);



	//获得该节点下名称为 fileId 节点的<span>迭代器</span>



	

	Iterator  iterator = e.elementIterator(&quot;fileId&quot;);



	//下面就可以获得该文件夹下所有文件的id，然后就是从数据库查询了，我只是做了一个打印的测试。

	while(iterator.hasNext()){



	     System.out.println(((Element)iterator.next()).getText());



      } catch (DocumentException e) {



		e.printStackTrace();



	}</pre>
<p>&nbsp;
至于插入数据的话指定到要插入的位置使用</p>
<pre name="code" class="java">element.setText(&quot;terryang&quot;);



//下面是实现更新文件

XMLWriter writer = new XMLWriter(new FileWriter(new File(&quot;d:/log.xml&quot;)));

writer.write(document);

writer.close();

</pre>
<p>&nbsp;添加，修改，删除，插入的操作差不多，大家可以baidu，google一下。</p>
<p>可以看出，这样就可以很简单的实现节点的添加，修改，删除，插入，查询等操作。</p>
<p>好了，xml存取树节点的方法就是这样，希望大家多多指正。</p>
<p>&nbsp;</p>
<p>下面我要说的是一个很好的数据库设计思路：</p>
<p>给出网址 <a title="树的快速算法实现" href="http://www.java3z.com/cwbwebhome/article/article2/2781.html?id=1306" target="_blank" title="树的快速算法实现">http://www.java3z.com/cwbwebhome/article/article2/2781.html?id=1306</a>
</p>
<p>我就不在这再复制粘贴了！</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/187141#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 26 Apr 2008 20:19:30 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/187141</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/187141</guid>
      </item>
          <item>
        <title>js的一个问题</title>
        <author>terryang</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://terryang.javaeye.com">terryang</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/186336" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/186336</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>问大家一个关于js函数写法的问题：</p>
<p>举一个分页的例子(只是用来测试)</p>
<p>第一种写法：</p>
<pre name="code" class="js">function GoFirstPage()//跳到第一页
{
	Form.pageCur.value = &quot;1&quot;;//设置值，还可以做一些其他操作
	Form.submit();//提交表单，下同
}

function GoPrevPage()//跳到前一页
{
	Form.pageCur.value = Form.pagePre.value;
	Form.submit();
}

function GoNextPage()//跳到下一页
{
	Form.pageCur.value = Form.pageNext.value;
	Form.submit();
}

function GoEndPage()//跳到最后一页
{
	Form.pageCur.value = Form.pageMax.value;
	Form.submit();
}</pre>
<p>&nbsp;第二种写法：</p>
<pre name="code" class="java">function GoToPage(pageNum )

{

	Form.pageCur.value =pageNum； 	

	Form.submit();

 }</pre>
<p>&nbsp;第一种写法的话很直观，但是代码量多。第二种写法代码量少，但别人读起来也许不如第一种那么容易懂。</p>
<p>大家讨论一下那种方法比较可取（个人偏向于第二种），重点是效率问题。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/186336#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 12:45:09 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/186336</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/186336</guid>
      </item>
          <item>
        <title>支持绑定多个函数的onDomReady事件</title>
        <author>jasongreen</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://jasongreen.javaeye.com">jasongreen</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/185520" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/185520</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          onDomReady比on load要更好，在Ext，mootools的框架里都有类似的实现。但有时我们并不需要这两个js框架，不能因为一个onDomReady就引入其他js，太浪费了。所以自己写了一个。<br />在IE6，firefox2上测试通过。<br /><pre name="code" class="javascript">
&lt;script>
(function(){//闭包，保护全局变量
	var fns=[];
	/**
	 * onDomReady
	 */
	window.onDomReady = function(fn) {
		fns.push(fn);
	}
	function runFns(){
		for(var i=0;i&lt;fns.length;i++){
			fns[i]();
		}
	}
	//W3C
	if(document.addEventListener){
		document.addEventListener("DOMContentLoaded", runFns, false);
	}	
	else { //IE
		document.onreadystatechange = function(){	
			if(document.readyState == "interactive")
			{
				runFns();
			}
		}
	}
})();

window.onDomReady(function(){
	alert('init 1');
});
window.onDomReady(function(){
	alert('init 2');
});
window.onDomReady(function(){
	alert('init 3');
});
&lt;/script></pre>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/185520#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Apr 2008 16:29:55 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/185520</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/185520</guid>
      </item>
          <item>
        <title>javascript 变长参数</title>
        <author>jasongreen</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://jasongreen.javaeye.com">jasongreen</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/185223" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/185223</a>&nbsp;
          发表时间: 2008年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          javascript 变长参数例子：<br /><pre name="code" class="javascript">function loadVars(){
	var vars = loadVars.arguments;
	for (var i = 0; i &lt; vars.length; i++){
		alert(vars[i]);
	}
}
loadVars('a','b','c');</pre>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/185223#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Apr 2008 00:47:52 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/185223</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/185223</guid>
      </item>
          <item>
        <title>private static member in javascript</title>
        <author>jasongreen</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://jasongreen.javaeye.com">jasongreen</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/185097" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/185097</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文链接<br /><a href="http://www.litotes.demon.co.uk/js_info/private_static.html" target="_blank">http://www.litotes.demon.co.uk/js_info/private_static.html</a><br />期待简译。<br /><br />有一些代码，整得有些过了，但还是很值得参考。在jct的代码中看到了类似的用法。<br />在js中隐藏变量还是有必要的，否则和其他的js库冲突，就会很麻烦，很难找到bug。<br /><br />贴几段代码，明白人都看得懂。<br /><pre name="code" class="javascript">var MyObject = (function(){
    /*private static (class) member*/
    var counter = 0;
    /*private static method.*/
    function incrementCounter(){
        return counter++;
    };
    /*class constructor.*/
    function constructorFn(id){
        this.id = id;
        var self = this;
        /*call private static (class)
        method and assign the returned
        index to a private instance member.*/
        var index = incrementCounter();
        /*privileged instance method.*/
        this.getIndex = function(){
            return index;
        };
    };
    /*privileged static (class) method
    (a property of the constructor)*/
    constructorFn.getNoOfInsts = function(){
        return counter;
    };
    /*public instance method privaliged at the
    class level*/
    constructorFn.prototype.pubInstMethod = function(){
        ...
    };
    /*return the constructor.*/
    return constructorFn;
})(); //simultaneously define and call (one-off)!

/*public static  member*/
MyObject.pubStatic = "anything"

/*public instance member*/
MyObject.prototype.pubInstVar = 8;</pre><br /><br />再来一段<br /><pre name="code" class="javascript">var global = this;
(function(){
    var classGroupMember = 3;
    function privateToClassGroup(){
        /*this method could be a utilitiy
        for the classes in the group or used
        as an internal object constructor.*/
        ...
    };
    global.MyObject1 = function(){
        var privteStaticMember = 4;
        function privateStaticMethod(){
            ...
        };
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
    global.MyObject2 = function(){
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
    global.MyObject3 = function(){
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
})();  //simultaneously define and call!</pre><br /><br />再来一段：<br /><pre name="code" class="javascript">/*constructor function */
function MyObject(){
    ...
}

MyObject.prototype = (function(){
    /*private static (class) member*/
    var privateStaticProp = "anything";
    /*private static method .*/
    function privateStatic Method = function(){
        ...
    }
    return ({
        /*These functions objects are shared by
        all instances that uses this prototype
        and they have access to the private static
        members within the closure that returns
        this object*/
        publicInstanceMethod:function(){
            ...
        },
        setSomething:function(s){
            privateStaticProp = s;
        }
    });
})();

/*public instance member*/
MyObject.prototype.pubInstVar = 8;</pre>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/185097#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 17:35:20 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/185097</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/185097</guid>
      </item>
          <item>
        <title>html/javascript/css 注释表达式详解</title>
        <author>jasongreen</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://jasongreen.javaeye.com">jasongreen</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/184547" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/184547</a>&nbsp;
          发表时间: 2008年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          浏览器之间的兼容是个问题，而IE的兼容性尤其严重。下面是我搜集的一些处理html/js/css兼容性问题的好方法。<br /><br />html 条件注释<br /><pre name="code" class="html">&lt;html>
&lt;body>
&lt;!--[if IE]>
根据条件判断，这是Internet Explorer&lt;br />
&lt;![endif]-->
&lt;!--[if IE 5]>
根据条件判断，这是Internet Explorer 5&lt;br />
&lt;![endif]-->
&lt;!--[if IE 5.0]>
根据条件判断，这是Internet Explorer 5.0&lt;br />
&lt;![endif]-->
&lt;!--[if IE 5.5]>
根据条件判断，这是Internet Explorer 5.5&lt;br />
&lt;![endif]-->
&lt;!--[if IE 6]>
根据条件判断，这是Internet Explorer 6&lt;br />
&lt;![endif]-->
&lt;!--[if gte IE 5]>
根据条件判断，这是Internet Explorer 5 或者更高&lt;br />
&lt;![endif]-->
&lt;!--[if lt IE 6]>
根据条件判断，这是版小于6的Internet Explorer&lt;br />
&lt;![endif]-->
&lt;!--[if lte IE 5.5]>
根据条件判断，这是Internet Explorer 5.5或更低&lt;br />
&lt;![endif]-->
&lt;/body>
&lt;/html></pre><br /><br />javascript 编译注释<br /><div class="quote_title">引用</div><div class="quote_div">&lt;script type="text/javascript"><br />/*@cc_on<br />   document.write('IE 4+ browser support @cc_on&lt;br>');<br />   /*@if (@_jscript_version >= 5)<br />      document.write("IE Browser that supports JScript 5+&lt;br>");<br />   @elif (@_jscript_version >= 4)<br />      document.write("IE Browser that supports JScript 4+&lt;br>");<br />   @else @*/<br />      document.write("Non IE Browser or lower version IE&lt;br>");<br /> /*@end<br />@*/<br />&lt;/script></div><br /><br />javascript编译常量<br /><a href="http://www.javascriptkit.com/javatutors/conditionalcompile2.shtml" target="_blank">http://www.javascriptkit.com/javatutors/conditionalcompile2.shtml</a><br /><br />css !important.<br />!importan 在firefox，ie7中支持，在ie6中不支持。<br /><div class="quote_title">引用</div><div class="quote_div">&lt;div style="color: red !important; color: blue;"><br />	IE7,firefox中显示为红色文字，IE6中显示为蓝色文字<br />&lt;/div><br /></div><br /><br />ie6支持 * html 前缀 ,ie7 支持 *+html 前缀，firefox不支持。<br />ie支持css expression，在firefox中是不支持的。<br /><div class="quote_title">引用</div><div class="quote_div"><br />#testcss {/*any*/<br />	background-color:red;<br />}<br />* html #testcss {/*ie6*/<br />	background-color:green;<br />}<br />*+html #testcss {/*ie7*/<br />	background-color:yellow;<br />}</div><br /><br /><br />测试文件见附件。
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/184547#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Apr 2008 12:27:05 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/184547</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/184547</guid>
      </item>
          <item>
        <title>初试javascript template language</title>
        <author>jasongreen</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://jasongreen.javaeye.com">jasongreen</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/184493" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/184493</a>&nbsp;
          发表时间: 2008年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如果没有jsp，php，ruby服务器。 但是拥有静态html服务器，怎么样做出一个维护性好的网站呢？答案是javascript 模板<br />我正在尝试用Javascript 模板来制作国际化html文档。<br />访问中文网页用 doc.html?locale=zh<br />访问英文网页用 doc.html?locale=en<br />感觉非常好。<br /><br />这是一个优秀的javascript template引擎。<br /><a href="http://code.google.com/p/trimpath/wiki/JavaScriptTemplates" target="_blank">http://code.google.com/p/trimpath/wiki/JavaScriptTemplates</a><br /><br />国人的jct还不够成熟。但代码非常精炼。<br /><a href="http://www.javaeye.com/topic/179706" target="_blank">http://www.javaeye.com/topic/179706</a><br /><br />to be continued...
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/184493#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Apr 2008 00:18:29 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/184493</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/184493</guid>
      </item>
          <item>
        <title>动画效果打开关闭图层</title>
        <author>ice-cream</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://ice-cream.javaeye.com">ice-cream</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/183359" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/183359</a>&nbsp;
          发表时间: 2008年04月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;html xmlns="http://www.w3.org/1999/xhtml"><br />&lt;head><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><br />&lt;title>move&lt;/title><br />&lt;style type="text/css"><br />body{<br />	font-size:12px;<br />	color:#849BCA;<br />}<br /><br />#btn{<br />	float:left;<br />}<br /><br />#move{	<br />	width:500px;<br />	height:200px;<br />	background:#EDF1F8;	<br />	border: 2px solid #849BCA;<br />	float:left;<br />	overflow:hidden;<br />	position:absolute;<br />	left:80px;<br />	top:50px;<br />	cursor:move;<br />}<br /><br />.content{<br />	padding:10px;<br />}<br />&lt;/style><br />&lt;/head><br />&lt;body><br />&lt;div id="btn"><br />	&lt;input type="button" value="打开" onclick="sw(this,'move');"/><br />&lt;/div>	<br />&lt;div id="move" style="display:none;filter:alpha(opacity=100);opacity:1;"><br />	&lt;div class="content">移动层&lt;/div>	<br />&lt;/div><br />	<br />&lt;script type="text/javascript"><br />var prox;<br />var proy;<br />var proxc;<br />var proyc;<br /><br />function sw(o,id){<br />	if (o.value=="打开"){<br />		o.value="关闭";<br />		show(id)<br />	}<br />	else{<br />		o.value="打开"<br />		close(id)<br />	}<br />}<br /><br />function show(id){/*--打开--*/<br />	clearInterval(prox);<br />	clearInterval(proy);<br />	clearInterval(proxc);<br />	clearInterval(proyc);<br />	var o = document.getElementById(id);<br />	o.style.display = "block";<br />	o.style.width = "1px";<br />	o.style.height = "1px"; <br />	prox = setInterval(function(){openx(o,500)},10);<br />}<br /><br />function openx(o,x){/*--打开x--*/<br />	var cx = parseInt(o.style.width);<br />	if(cx &lt; x){<br />		o.style.width = (cx + Math.ceil((x-cx)/5)) +"px";<br />	}<br />	else{<br />		clearInterval(prox);<br />		proy = setInterval(function(){openy(o,200)},10);<br />	}<br />}<br /><br />function openy(o,y){/*--打开y--*/	<br />	var cy = parseInt(o.style.height);<br />	if(cy &lt; y){<br />		o.style.height = (cy + Math.ceil((y-cy)/5)) +"px";<br />	}<br />	else{<br />		clearInterval(proy);			<br />	}<br />}<br /><br />function close(id){/*--关闭--*/<br />	clearInterval(prox);<br />	clearInterval(proy);<br />	clearInterval(proxc);<br />	clearInterval(proyc);		<br />	var o = document.getElementById(id);<br />	if(o.style.display == "block"){<br />		proyc = setInterval(function(){closey(o)},10);			<br />	}		<br />}<br /><br />function closey(o){/*--打开y--*/	<br />	var cy = parseInt(o.style.height);<br />	if(cy > 0){<br />		o.style.height = (cy - Math.ceil(cy/5)) +"px";<br />	}<br />	else{<br />		clearInterval(proyc);				<br />		proxc = setInterval(function(){closex(o)},10);<br />	}<br />}<br /><br />function closex(o){/*--打开x--*/<br />	var cx = parseInt(o.style.width);<br />	if(cx > 0){<br />		o.style.width = (cx - Math.ceil(cx/5)) +"px";<br />	}<br />	else{<br />		clearInterval(proxc);<br />		o.style.display = "none";<br />	}<br />}	<br />/*-------------------------鼠标拖动---------------------*/	<br />var od = document.getElementById("move");	<br />var dx,dy,mx,my,mouseD;<br />var odrag;<br />var isIE = document.all ? true : false;<br />document.onmousedown = function(e){<br />	var e = e ? e : event;<br />	mouseD = true;			<br />}<br />document.onmouseup = function(){<br />	mouseD = false;<br />	odrag = "";<br />	if(isIE)<br />	{<br />	<br />		od.filters.alpha.opacity = 100;<br />	}<br />	else<br />	{<br />		<br />		od.style.opacity = 1;<br />	}		<br />}<br />	<br />od.onmousedown = function(e){<br />	odrag = this;<br />	var e = e ? e : event;<br />	mx = e.clientX;<br />	my = e.clientY;<br />	od.style.left = od.offsetLeft + "px";<br />	od.style.top = od.offsetTop + "px";<br />	if(isIE){<br />		od.filters.alpha.opacity = 50;<br />	}<br />	else{<br />		od.style.opacity = 0.5;<br />	}<br />}<br />document.onmousemove = function(e){<br />	var e = e ? e : event;	<br />	if(odrag){		<br />		var mrx = e.clientX - mx;<br />		var mry = e.clientY - my;	<br />		od.style.left = parseInt(od.style.left) +mrx + "px";<br />		od.style.top = parseInt(od.style.top) + mry + "px";			<br />		mx = e.clientX;<br />		my = e.clientY;		<br />	}<br />}	<br />&lt;/script><br />&lt;/body><br />&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://hzJavaEyer.group.javaeye.com/group/blog/183359#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Apr 2008 13:45:51 +0800</pubDate>
        <link>http://hzJavaEyer.group.javaeye.com/group/blog/183359</link>
        <guid>http://hzJavaEyer.group.javaeye.com/group/blog/183359</guid>
      </item>
          <item>
        <title>很炫的图片循环效果</title>
        <author>ice-cream</author>
        <description>
          <![CDATA[
          <br/>
          网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
          作者: <a href="http://ice-cream.javaeye.com">ice-cream</a>&nbsp;
                    链接：<a href="http://hzJavaEyer.group.javaeye.com/group/blog/183237" style="color:red;">http://hzJavaEyer.group.javaeye.com/group/blog/183237</a>&nbsp;
          发表时间: 2008年04月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/Strict.dtd&quot;&gt;<br />
<br />
&lt;html lang=&quot;en&quot;&gt;<br />
&lt;head&gt;<br />
&lt;style&gt;<br />
&lt;!--<br />
body{ margin:1% 0 0 1%; font-family:Arial,Verdana,Helvetica,sans-serif;font-size:75%;}<br />
<br />
img{ border:0; }<br />
<br />
a:link, a:visited, a:active{ text-decoration:none;color:#0a84c1;font-size:1em;font-weight:bold; }<br />
<br />
a:hover{ text-decoration:none;color:#f59000;font-size:1em;font-weight:bold; }<br />
<br />
#hotel_display{ background:#fff; width:269px; padding:10px;}<br />
<br />
.title_top{ background:url(http://www.javaeye.com/upload/picture/pic/12025/b5e42408-d9d1-3c50-9cad-b719476e9c4d.gif?1208313629) no-repeat;padding:8px 0 8px 25px; }<br />
<br />
.title_btm{ background:url(http://www.javaeye.com/upload/picture/pic/12023/7f74e0a9-e25d-3a08-beb5-33179fd4f058.gif?1208313628) no-repeat;padding:8px 0 8px 25px;color:#f59000;font-weight:bold; }<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;script type=&quot;text/javascript&quot;&gt;<br />
&lt;!--<br />
var idxCurrentPromo = 0;<br />
var blnRotation = false;<br />
var numOpenPromoHeight = 190;<br />
var numSlideFactor = .25;<br />
var numRotationTime = 5000;<br />
<br />
function initPromos() {<br />
&nbsp;&nbsp;&nbsp; switchPromos(idxCurrentPromo, blnRotation);<br />
}<br />
<br />
function QSinfo(link, strIDs, MoreQS) { <br />
&nbsp;&nbsp;&nbsp; var strHREF = &quot;&quot;;<br />
<br />
&nbsp;&nbsp;&nbsp; if (strIDs &amp;&amp; strIDs != &quot;&quot;)&nbsp;&nbsp;&nbsp; strHREF = strIDs;<br />
&nbsp;&