<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>AvengerBevis</title>
    <description></description>
    <link>http://avengerbevis.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>Google 中文译名及产品服务大全</title>
        <author>AvengerBevis</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://avengerbevis.javaeye.com">AvengerBevis</a>&nbsp;
                    链接：<a href="http://avengerbevis.javaeye.com/blog/69680" style="color:red;">http://avengerbevis.javaeye.com/blog/69680</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Google中文译名大全 及产品服务大全<br />
<br />
<br />
Google 谷哥<br />
Gmail 谷妹<br />
Google Adsense 谷哥矮她三尺<br />
Gtalk 谷淘<br />
Froogle 腹股沟<br />
Google Local 谷哥老抠<br />
Google Reader 谷利得<br />
Google Video 谷味豆<br />
Google Desktop 谷桌<br />
Google Toolbar 谷拖把<br />
Google Earth 谷哥儿死<br />
Google Mars 谷哥马死<br />
Google News 谷哥牛死<br />
Google Maps 谷哥麦死<br />
Google Catalogs 谷哥看他老哥死<br />
Google Images 谷哥姨妹急死<br />
Google Groups 谷哥姑婆死<br />
Google SMS 谷哥死没死<br />
Google Labs 谷哥赖不死<br />
Google Alerts 谷哥啊乐死<br />
<br />
<br />
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/intl/zh-CN/add_url.html" target="_blank"><strong><font size="3" face="Arial">Add to Google</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个提供网页信息的站点，主要的功能是把自己的主页介绍给Google让他收录，而时间上较长，起码一两个月才会被Google收录，但是一旦收了你的主页，知名度会更快地上升。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.blogger.com/" target="_blank"><strong><font size="3" face="Arial">Blogger</font></strong></a></p>
<p><font size="3" face="Arial">　　Google提供的Blog服务，现在已经有中文版本了，大家可以上去安个家，把地址写到本文评论让大家去浏览。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.froogle.com/" target="_blank"><strong><font size="3" face="Arial">Froogle</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个专业的引擎，可以输入你想要购买的东西，然后得到符合关键词的结果出来，可以比较一下各个购物网站不同的价格，挑选最合适的地方进行购买。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://mail.google.com/" target="_blank"><strong><font size="3" face="Arial">Gmail</font></strong></a></p>
<p><font size="3" face="Arial">　　Gmail是是Google提供的当前最流行的免费邮件服务，提供了超过2GB的储存空间。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/adsense" target="_blank"><strong><font size="3" face="Arial">Google AdSense</font></strong></a></p>
<p><font size="3" face="Arial">　 　Google提供的广告服务，你是否遇到有不知来源的IP经常恶意点击你的广告，而你无法知道IP所以无法禁止，你是否想知道你的广告在哪个或者哪些页 面点击率最高，而又不受渠道数量的限制，它主要针对Google Adsense的规则，在不违反规则的前提下为用户提供及时详细的广告点击统计信息。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://adwords.google.com/" target="_blank"><strong><font size="3" face="Arial">Google AdWords</font></strong></a></p>
<p><font size="3" face="Arial">　　Google提供给商家的特殊广告站点，只要有人点击这里就会按一定规则向商家收费，算是网络上的分类广告。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/alerts" target="_blank"><strong><font size="3" face="Arial">Google Alerts</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个新闻定制站点，可以通过邮箱定制你需要的内容，然后得到相关的讯息。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/analytics" target="_blank"><strong><font size="3" face="Arial">Google Analytics</font></strong></a></p>
<p><font size="3" face="Arial">　　Google推出的免费提供的网站统计服务，只需要简单注册，即可帮助站长分析自己的站点情况，而且里面的内容非常详细，不光小网站有用，大网站更是可以作为一个参考的指标。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://answers.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Answers</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的问答站点，可以回答你很多不知道的问题，类似的还有百度出的百度知道，现在这个站点开始进入收费模式，你可以悬赏进行问题答案的购买。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://base.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Base</font></strong></a></p>
<p><font size="3" face="Arial">　　这个服务相对于Google其它服务的专业化，或许显得比较杂乱，里面也是可以让我们提交不同的信息给Google，让它出现在Google的搜索里面。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://blogsearch.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Blog Search</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个针对Google博客的搜索服务，专门收集其中的海量信息。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.lusin.cn/blog/" target="_blank"><strong><font size="3" face="Arial">Google Book Search</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的书籍搜索服务，其实也是Google引擎的一个小延伸而已，不过在这里搜索到的结果比较专业和集中。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://catalogs.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Catalogs</font></strong></a></p>
<p><font size="3" face="Arial">　　Google做的邮购搜索服务，对于国人来说好象用处并不是特别地大。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://code.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Code</font></strong></a></p>
<p><font size="3" face="Arial">　　Google用来推广及发展开源软件的一个服务，一个适合程序员的源代码公开站点</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://toolbar.google.com/dc/offerdc.html" target="_blank"><strong><font size="3" face="Arial">Google Compute</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的网格计算，可以将一些超大规模的计算量分散到全球不同国家地区的电脑上，以尽快得到结果，这是些有益全球的计算，希望有电脑的朋友都参加。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://desktop.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Desktop</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个放置在桌面上的工具条，在这个工具条里可提供新闻，天气，Email等小程序，了解最新的信息。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://dir.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Directory</font></strong></a></p>
<p><font size="3" face="Arial">　　Goolge制作的超大型人工分类目录，让网页根据重要性来排列。目录搜索服务可满足那些想要浏览某特定主题下相关信息的用户。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://earth.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Earth</font></strong></a></p>
<p><font size="3" face="Arial">　　这项服务提供了地球上大部分地区的卫星图片查询，尤其是大城市的图片更加地多，让你如宇航员一般身临其境，足不出户也可了解世界各地。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://groups.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Groups</font></strong></a></p>
<p><font size="3" face="Arial">　　Google提供的群组服务。利用它你可以创建邮件列表、阅读新闻或者是和志同道合的用户分享你感兴趣的东西。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/ig" target="_blank"><strong><font size="3" face="Arial">Google Homepage</font></strong></a></p>
<p><font size="3" face="Arial">　　是Google提供的主页服务，你可以定制它，它提供了天气、新闻、占卜等各种各样的服务。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://images.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Image Search</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的图片搜索，几乎是Google最早的服务了，这是它的图片搜索页面，相信大家都用过吧，图片搜索的精确度还是不错的。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://labs.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Labs</font></strong></a></p>
<p><font size="3" face="Arial">　　Google实验室的一些服务链接，从这里可以看到它们又有什么天才的发明。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://local.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Local</font></strong></a></p>
<p><font size="3" face="Arial">　　Google本地搜索，通过这一服务，用户可以使用关键字搜索在特定的城市查找某一类型的公司，并在电子地图上显示这些公司的具体位置。这项服务现在有了</font><a href="http://bendi.google.com/" target="_blank"><font size="3" face="Arial">中国版本</font></a><font size="3" face="Arial">。 </font></p>
<p><font size="3" face="Arial">　　</font><a href="http://maps.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Maps</font></strong></a></p>
<p><font size="3" face="Arial">　　Google地图搜索服务，让你浏览到世界各地的地图、公路等信息，比较上面提到的卫星地图来说，比较传统。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://mobile.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Mobile</font></strong></a></p>
<p><font size="3" face="Arial">　　Google手机上网用户的服务，只要手机能连上这外网站，即可象用PC一样搜索图片、关键字等信息。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/movies" target="_blank"><strong><font size="3" face="Arial">Google Movie Showtimes</font></strong></a></p>
<p><font size="3" face="Arial">　　Google提供的电影上映时间搜索服务，只要输入一个地方的邮政编码或地址，就可以搜索到当地的电影院及电影的上映时间。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://news.google.com/" target="_blank"><strong><font size="3" face="Arial">Google News</font></strong></a></p>
<p><font size="3" face="Arial">　　Google新闻站点，将最新的新闻呈现在大家的眼前，上面的所有新闻都是由Google特定的电脑自动聚合的。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://pages.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Page</font></strong></a></p>
<p><font size="3" face="Arial">　　Google推出的免费个人主页服务，用户可以在这里获得一个100M大小的免费主页空间。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://reader.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Reader</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的在线RSS阅读器，Reader依靠RSS和Atom技术，可帮助用户及时获得信息，用户不必自己检查更新喜欢的站点，Google Reader可以帮你。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://labs.google.com/ridefinder" target="_blank"><strong><font size="3" face="Arial">Google Ridefinder</font></strong></a></p>
<p><font size="3" face="Arial">　　美国12个城市的公交车和出租车的相关搜索。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://scholar.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Scholar</font></strong></a></p>
<p><font size="3" face="Arial">　　学术文章搜索引擎，高年级学生的必备，尤其一些经常需要撰写一些论文的朋友。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://toolbar.google.com/firefox/extensions/sendtophone/index.html" target="_blank"><strong><font size="3" face="Arial">Google Send to Phone</font></strong></a></p>
<p><font size="3" face="Arial">　　利用网络发送手机短信的服务，感觉上没什么特别。</font></p>
<p><font size="3" face="Arial">　　</font><a href="https://www.google.com/webmasters/sitemaps/" target="_blank"><strong><font size="3" face="Arial">Google Sitemap</font></strong></a></p>
<p><font size="3" face="Arial">　 　Google的Sitemaps计划，旨在对网站信息搜索进行加速，增强索引能力。Google称：&ldquo;这种协作搜索系统将进一步提高覆盖和刷新速度，使 用户使用Google索此功能实现最优化。&rdquo;Google呼吁网站管理员在网站服务器中放置Sitemaps格式的文件。这样，Google的搜索引擎就 可以看到那些网页在网站内，那些网页内容被修改了。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://sms.google.com/" target="_blank"><strong><font size="3" face="Arial">Google SMS</font></strong></a></p>
<p><font size="3" face="Arial">　　GOOGLE SMS服务，是通过SMS查找特定信息的一项技术。它可以提供驾车服务，在无线产品中支持SMS。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.google.com/webhp?complete=1&amp;hl=en" target="_blank"><strong><font size="3" face="Arial">Google Suggest</font></strong></a></p>
<p><font size="3" face="Arial">　　这是一个猜测你意图的测试站，当用户关键词搜索框中输入文字时，下拉清单将显示候补搜索单词或短语一览。还将显示找到的各单词或短语的网页数。从候补中选择单词或短语便可搜索。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://talk.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Talk</font></strong></a></p>
<p><font size="3" face="Arial">　　Google推出的即时在线聊天工具，当时挺火爆的，业内很多人都说能跟各大即时聊天工具一拼，可是现在没多少个人用了，影响较低。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://toolbar.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Toolbar</font></strong></a></p>
<p><font size="3" face="Arial">　　Google的搜索工具条，上面有很多实用功能，搜索、拦截弹出窗口、查看网页PR值等等一大堆。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://video.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Video</font></strong></a></p>
<p><font size="3" face="Arial">　　这又是一个新的尝试，Google推出的视频搜索内容丰富，不过国内用户好象会受到一定的限制。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://webaccelerator.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Web Accelerator</font></strong></a></p>
<p><font size="3" face="Arial">　　可以加速网页的载入，尤其是对付一些我们网络访问较慢的外国网站更是好用</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://web.google.com/" target="_blank"><strong><font size="3" face="Arial">Google Web Search</font></strong></a></p>
<p><font size="3" face="Arial">　　Google网站默认的搜索服务。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://www.hello.com/" target="_blank"><strong><font size="3" face="Arial">Hello</font></strong></a></p>
<p><font size="3" face="Arial">　　Hello即时聊天工具，是一个极小的即时通信客户端，它和Google的看图软件Picasa一起工作，能让你和亲人好友分享图片。</font></p>
<p><font size="3" face="Arial">　　</font><a href="http://picasa.google.com/" target="_blank"><strong><font size="3" face="Arial">Picasa</font></strong></a></p>
<p><font size="3" face="Arial">　　超强的图片管理显示的软件，得益于其高效的图片管理模式，我们可将电脑里所有的图片都让它归类，分析。它现在已是免费软件，大家可以让ACDSee下岗了。</font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://avengerbevis.javaeye.com/blog/69680#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Apr 2007 15:52:03 +0800</pubDate>
        <link>http://avengerbevis.javaeye.com/blog/69680</link>
        <guid>http://avengerbevis.javaeye.com/blog/69680</guid>
      </item>
          <item>
        <title>Spring中文开发手册下载</title>
        <author>AvengerBevis</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://avengerbevis.javaeye.com">AvengerBevis</a>&nbsp;
                    链接：<a href="http://avengerbevis.javaeye.com/blog/69601" style="color:red;">http://avengerbevis.javaeye.com/blog/69601</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table cellspacing="0" border="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td width="100%"><span class="postdetails"></span></td>
            <td nowrap="nowrap" valign="top"><a href="http://spring.jactiongroup.net/posting.php?mode=quote&amp;p=6829"><br />
            </a>   </td>
        </tr>
        <tr>
            <td colspan="2"><hr />
            </td>
        </tr>
        <tr>
            <td colspan="2"><span class="postbody"><img src="http://www.jactiongroup.net/image/spring2-logo.png" border="0" alt="" /> <br />
            <br />
            <span style="font-size: 14px; line-height: normal;"> <br />
            Spring中文参考手册得到Spring Framework开发团队的直接授权和大力的支持，其目的是在中文世界推广优秀的开源技术。本次翻译活动由满江红开放技术研究组织(<a href="http://www.redsaga.com/" class="postlink" target="_blank">http://www.redsaga.com</a>)和Spring中文论坛(<a href="http://spring.jactiongroup.net%29/" class="postlink" target="_blank">http://spring.jactiongroup.net)</a> 共同发起、组织，本着来源于开源世界，回馈开源社区的想法，在接近11周的时间内，超过30位志愿者进行了翻译及审核工作，成品文档超过500页，由此成 为目前最大的开源项目中文文档翻译计划之一。我们在此郑重宣布，本次翻译遵循原Spring Framework的授权协议，即Apache 2.0协议。在完整保留全部文本包括本版权页，并不违反Apache 2.0协议的前提下，允许和鼓励任何人进行全文转载及推广。我们在此宣布所有参与人员放弃除署名权外的一切权利。 <br />
            <br />
            我们在此感谢以下组织人员的参与：JavaEye(http://www.javaeye.com)、(Beijing Java User Group，http://www..org)、Openfans(http://www.openfans.net)和Nirvana Studio(http://www.nirvanastudio.org)。此次项目的顺利完成体现了中文开源世界强大的协作能力，如此庞大的项目不是 一两个组织可以独立完成的，就像Spring本身一样，涵盖了Java技术的方方面面。因为各个组织在独自领域的专注，才能让此项目顺利完成。有理由相 信，中文开源世界的强大必将在不久的将来展现出更广阔的空间，为推动中国的软件发展提供出不可或缺的力量源泉。<br />
            <br />
            -------------------------<br />
            致歉 ：ＣＨＭ格式的　忘记检查了　文件损坏了　不能显示　向下载了ＣＨＭ格式的朋友道个欠　现已删除 清下载PDF格式文件<br />
            </span></span></td>
        </tr>
    </tbody>
</table>
          <br/><br/>
          <span style="color:red;">
            <a href="http://avengerbevis.javaeye.com/blog/69601#comments" style="color:red;">已有 <strong>6</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' 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>Tue, 10 Apr 2007 11:29:10 +0800</pubDate>
        <link>http://avengerbevis.javaeye.com/blog/69601</link>
        <guid>http://avengerbevis.javaeye.com/blog/69601</guid>
      </item>
          <item>
        <title>developer Works 最受欢迎的 Ajax 文章和教程 Ajax Top 10</title>
        <author>AvengerBevis</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://avengerbevis.javaeye.com">AvengerBevis</a>&nbsp;
                    链接：<a href="http://avengerbevis.javaeye.com/blog/69539" style="color:red;">http://avengerbevis.javaeye.com/blog/69539</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table cellspacing="0" border="0" cellpadding="0" width="100%">
    <tbody>
        <tr valign="top">
            <td>
            <p><em>2006 年 developerWorks 最受欢迎的 Ajax 文章和教程 </em></p>
            </td>
            <td width="150"><img src="http://www.ibm.com/i/c.gif" height="18" alt="" width="150" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" border="0" cellpadding="0" width="100%">
    <tbody>
        <tr valign="top">
            <td width="10"><img src="http://www.ibm.com/i/c.gif" height="1" alt="" width="10" /></td>
            <td width="100%">
            <table cellspacing="0" border="0" cellpadding="0" width="100%">
                <tbody>
                    <tr>
                        <td width="160"><img src="http://www.ibm.com/i/c.gif" border="0" height="17" alt="" width="160" /></td>
                        <td align="right" valign="middle" width="100%"><span>2007 年 2 月&nbsp;&nbsp;</span></td>
                    </tr>
                    <tr>
                        <td colspan="2"><img src="http://www.ibm.com/i/v14/rules/dblue_rule.gif" height="3" alt="" width="100%" /></td>
                    </tr>
                </tbody>
            </table>
            <table cellspacing="0" border="0" cellpadding="0" width="100%">
                <tbody>
                    <tr valign="top">
                        <td width="150"> <a href="http://www.ibm.com/developerworks/cn/java/web/index.html?ca=j-t10" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"><img src="http://www-128.ibm.com/i/t-wa-f-ajax.jpg" border="0" alt="掌握 Ajax 系列" /></a> </td>
                        <td width="10"><img src="http://www.ibm.com/i/c.gif" height="1" alt="" width="10" /></td>
                        <td width="100%"> <img src="http://www.ibm.com/i/c.gif" border="0" height="8" alt="" width="270" /><br />
                        <a href="http://www.ibm.com/developerworks/cn/java/web/index.html?ca=j-t10" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">掌握 Ajax 系列</a><br />
                        本系列当之无愧成为了 developerWorks 2006 年最受欢迎的 Ajax 技术文档。从最基本的 Ajax 概念开始，本系列文章逐渐揭开了 Ajax 技术神秘的面纱。通过该系列，您可以了解到 Ajax 技术几乎所有的关键概念和技术，帮助您从入门走向精通<wbr></wbr>。本系列仍然在继续，请关注我们的更新。 &nbsp;&nbsp;<a href="http://www.ibm.com/developerworks/cn/java/web/index.html?ca=j-t10" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">更多&nbsp;&gt;</a> </td>
                        <td width="3"><img src="http://www.ibm.com/i/c.gif" height="1" alt="" width="3" /></td>
                    </tr>
                    <tr>
                        <td colspan="4"><img src="http://www.ibm.com/i/c.gif" height="16" alt="" width="10" /></td>
                    </tr>
                </tbody>
            </table>
            <table cellspacing="0" border="0" cellpadding="1" width="100%">
                <tbody>
                    <tr>
                        <td colspan="2" width="100%"><a name="111538fa1be77323_16"></a>&nbsp;&nbsp;Ajax TOP 10</td>
                        <td height="1" width="7"><img src="http://www.ibm.com/i/c.gif" height="1" alt="" width="7" /></td>
                    </tr>
                </tbody>
            </table>
            <table cellspacing="0" border="0" cellpadding="0" width="100%">
                <tbody>
                    <tr valign="top">
                        <td><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                    </tr>
                    <tr valign="top">
                        <td width="100%">
                        <table cellspacing="0" border="0" cellpadding="0">
                            <tbody>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw_c.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;1、<a href="http://www.ibm.com/developerworks/cn/web/wa-ajaxintro/" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">掌握 Ajax 系列 </a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;2、<a href="http://www.ibm.com/developerworks/cn/java/j-ajax/" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">面向 Java 开发人员的 Ajax 系列 </a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw_c.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;3、<a href="http://www.ibm.com/developerworks/cn/web/wa-ajaxarch/index.html" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"> Ajax 和 REST，第 1 部分：Ajax/REST 架构风格对于融入式 Web 应用程序的优点</a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;4、<a href="http://www.ibm.com/developerworks/cn/opensource/os-php-rad1/index.html" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"> 结合 Ajax 进行 PHP 开发</a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;5、<a href="http://www.ibm.com/developerworks/cn/views/java/tutorials.jsp?cv_doc_id=102956" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"> 使用 Ajax 构建应用程序：学习用 Ajax 构建支持实时验证的 Web 应用程序</a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;6、<a href="http://www.ibm.com/developerworks/cn/java/j-cb12056/" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">跨越边界：Ajax on Rails </a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;7、<a href="http://www.ibm.com/developerworks/cn/web/wa-ajaxtop1/index.html" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"> 审视 Ajax，第 1 部分: 透过华而不实的广告看本质</a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;8、<a href="http://www.ibm.com/developerworks/cn/views/java/tutorials.jsp?cv_doc_id=108200" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank"> Java 应用开发源动力：利用免费软件轻松开发轻量级 Ajax 应用（更新）</a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">&nbsp;9、<a href="http://www.ibm.com/developerworks/cn/webservices/ws-wsajax/" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">使用 Ajax 调用SOAP Web 服务 </a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                                <tr valign="top">
                                    <td width="18"><img src="http://www.ibm.com/i/v14/icons/fw.gif" height="16" hspace="2" alt="" width="16" /></td>
                                    <td width="100%">10、<a href="http://www.ibm.com/developerworks/cn/xml/x-ajaxrss/index.html" onclick="return top.js.OpenExtLink(window,event,this)" target="_blank">Ajax RSS 阅读器 </a></td>
                                </tr>
                                <tr valign="top">
                                    <td colspan="2"><img src="http://www.ibm.com/i/c.gif" height="6" alt="" width="8" /></td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
          <br/><br/>
          <span style="color:red;">
            <a href="http://avengerbevis.javaeye.com/blog/69539#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</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/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Apr 2007 10:36:47 +0800</pubDate>
        <link>http://avengerbevis.javaeye.com/blog/69539</link>
        <guid>http://avengerbevis.javaeye.com/blog/69539</guid>
      </item>
          <item>
        <title>使用DOM技术操纵文档</title>
        <author>AvengerBevis</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://avengerbevis.javaeye.com">AvengerBevis</a>&nbsp;
                    链接：<a href="http://avengerbevis.javaeye.com/blog/69536" style="color:red;">http://avengerbevis.javaeye.com/blog/69536</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>[资料]JS使用DOM技术操纵文档&nbsp;--&nbsp;创亿无限|创意无限|创意|&nbsp;--&nbsp;编程爱好者BLOG&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class=""><span>我们知道，如果使用DHTML对象模型对文档的内容进行操纵，就必须了解相关文档元素的特殊属性和方法。因为文档的元素有很多种，相应的属性和方法也就非常多，为了实现一个功能，开发人员不得不查询许多资料。但是有了DOM技术，一切变得简单起来，那些操纵文档内容的属性和方法具备了元素无关性（element-independent）特点，这使得我们能够按照相同的步骤操纵文档内容。毋庸置疑，DOM技术为开发人员在对象层次上操纵文档提供了最便捷的手段。&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>本文就为你全面介绍在JavaScript中如何使用DOM属性和方法操纵文档内容。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>使用data、nodeValue和src属性&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>DOM提供了<span class="number">2</span><span>个属性用于修改文本节点的内容，它们是data和nodeVaule。</span><span class="number">2</span><span>个属性实现的功能相同，语法是：object.data=</span><span class="string">&quot;new</span>&nbsp;</span></li>
    <li class=""><span><span class="string">value&quot;</span><span>或者object.nodeVaule=</span><span class="string">&quot;new</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">value&quot;</span><span>，其中object代表页面中的文本项节点。如果修改图形文件的内容，语法是：object.src=../../</span><span class="string">&quot;new</span>&nbsp;</span></li>
    <li class=""><span><span class="string">value&quot;</span><span>，其中object表示页面中的img标记节点。来看看下面的例子：&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>This&nbsp;is&nbsp;the&nbsp;document&nbsp;body&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;ID&nbsp;=&nbsp;<span class="string">&quot;p1Node&quot;</span><span>＞This&nbsp;is&nbsp;paragraph&nbsp;</span><span class="number">1</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;ID&nbsp;=&nbsp;<span class="string">&quot;p2Node&quot;</span><span>＞This&nbsp;is&nbsp;paragraph&nbsp;</span><span class="number">2</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;ID&nbsp;=&nbsp;<span class="string">&quot;p3Node&quot;</span><span>＞This&nbsp;is&nbsp;paragraph&nbsp;</span><span class="number">3</span><span>.&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜IMG&nbsp;ID&nbsp;=&nbsp;<span class="string">&quot;imgNode&quot;</span><span>&nbsp;SRC=</span><span class="string">&quot;myexam.gif&quot;</span><span>＞This&nbsp;text&nbsp;follows&nbsp;the&nbsp;image&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TABLE&nbsp;ID=<span class="string">&quot;tableNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TR＞＜TD&nbsp;BGCOLOR=yellow＞This&nbsp;is&nbsp;row&nbsp;<span class="number">1</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞＜TD&nbsp;&nbsp;</span></span></li>
    <li class=""><span>BGCOLOR=orange＞This&nbsp;is&nbsp;row&nbsp;<span class="number">1</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜TR＞＜TD&nbsp;BGCOLOR=red＞This&nbsp;is&nbsp;row&nbsp;<span class="number">2</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞＜TD&nbsp;BGCOLOR=magenta＞This&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>is&nbsp;row&nbsp;<span class="number">2</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TR＞＜TD&nbsp;BGCOLOR=lightgreen＞This&nbsp;is&nbsp;row&nbsp;<span class="number">3</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞＜TD&nbsp;&nbsp;</span></span></li>
    <li class=""><span>BGCOLOR=beige＞This&nbsp;is&nbsp;row&nbsp;<span class="number">3</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜/TABLE＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜/P＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜P&nbsp;ID&nbsp;=&nbsp;<span class="string">&quot;p4Node&quot;</span><span>＞This&nbsp;is&nbsp;paragraph&nbsp;</span><span class="number">4</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜!--&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>alert(&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;页面初始状态&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\n\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;bodyNode.firstChild.nodeValue&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.firstChild.nodeValue&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;bodyNode.firstChild.data&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.firstChild.data&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>bodyNode.firstChild.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;the&nbsp;new&nbsp;document&nbsp;body,&nbsp;set&nbsp;by</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">the&nbsp;nodeValue&nbsp;property&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>p3Node.childNodes[<span class="number">1</span><span>].src&nbsp;=&nbsp;</span><span class="string">&quot;myexam2.gif&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;对页面内容进行修改后&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\n\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;bodyNode.firstChild.nodeValue&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.firstChild.nodeValue&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;bodyNode.firstChild.data&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.firstChild.data&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;p3Node.childNodes[1].src&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;p3Node.childNodes[</span><span class="number">1</span><span>].src&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上述代码首先显示页面的初始内容以及节点p1Node的相关属性值，然后对节点bodyNode的第<span class="number">1</span><span>个孩子节点的nodeValue属性进行赋值修改其文本内容，对节点p3Node的第</span><span class="number">2</span><span>个孩子节点（也就是了img标记）的src属性进行赋值修改图形的内容。点击这里运行这个实例。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class=""><span>使用createElement方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>createElement方法的功能是在文档中创建一个孤立HTML标记节点。孤立节点既没有孩子节点也没有双亲节点，而且与文档中的现存节点也互不关联。被创建的孤立HTML标记节点的唯一信息就是它代表的HTML标记，比如＜&nbsp;&nbsp;</span></li>
    <li class=""><span>P＞、＜&nbsp;FONT＞和＜&nbsp;TABLE＞。CreateElement的语法为document.createElement(HTMLTag)，HTMLTag表示要创建的HTML标记，返回值是创建的孤立HTML标记节点。来看看下面的例子：&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜!--&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tableObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TABLE&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TBODY&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>trObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TR&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tdObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TD&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;对页面内容进行修改后&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;bodyNode.firstChild&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.firstChild&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;tableObj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;tableObj.nodeName&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;tbodyObj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;tbodyObj.nodeName&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;trObj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;trObj.nodeName&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;tdObj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;tdObj.nodeName&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;tableObj&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;tableObj&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/SCRIPT＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/BODY＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>上述代码在文档中创建了<span class="number">4</span><span>个孤立HTML标记节点tableObj、tbodyObj、trObj和tdObj，它们就象太空中</span><span class="number">4</span><span>颗人造卫星一样，彼此间以及和文档中的现有节点间都互不关联。创建孤立节点的目的不是为了让它真正孤立，随后我们会介绍如何将创建的孤立节点彼此相连，并添加到文档的DOM&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Tree结构中。点击这里运行这个实例。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>使用createTextNode方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>createTextNode方法的功能与creatElement方法几乎相同，唯一不同的就是它是在文档中创建一个孤立文本项节点，这个孤立节点的唯一信息就是它所代表的字符串值。createTextNode的语法为document.&nbsp;&nbsp;</span></li>
    <li class=""><span>createTextNode&nbsp;(string)，string表示要创建的文本项内容，返回值是创建的孤立文本项节点。来看看下面的例子：&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜!--&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row1cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row1cell2Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;2&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell2Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;2&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell2Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;2&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>alert(&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;对页面内容进行修改后&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;row1cell1Obj.firstchild&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;row1cell1Obj.firstChild&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="string">&quot;row1cell1Obj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;row1cell1Obj&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上述代码在文档中创建了<span class="number">6</span><span>个孤立文本项节点，它们表示一个</span><span class="number">3</span><span>行</span><span class="number">2</span><span>列大小Table的单元格内容。点击这里运行这个实例。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class=""><span>使用cloneNode方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>cloneNode方法的功能是通过克隆（也就是复制）文档中一个现存节点的方式创建文档的一个孤立节点。根据被克隆节点的类型，新创建的孤立节点或者是HTML标记节点，或者是包含字符串信息的文本项节点。cloneNode的语法为oldNode.createNode(<span class="keyword">false</span><span>)或者oldNode.createNode(</span><span class="keyword">true</span><span>)，oldNode表示被克隆的节点，返回值是新创建的节点，</span><span class="keyword">false</span><span>表示仅仅克隆oldNode，</span><span class="keyword">true</span><span>表示克隆oldNode并包含其下属节点。来看看下面的例子：&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜!--&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tableObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TABLE&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TBODY&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TR&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj&nbsp;=&nbsp;tr1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj&nbsp;=&nbsp;tr1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TD&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode(<span class="keyword">false</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;对页面内容进行修改后&quot;</span><span>&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;row1cell2Obj.firstChild&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;row1cell2Obj.firstChild+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;row1cell2Obj&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;row1cell2Obj&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;row3cell2Obj.nodeValue&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;row3cell2Obj.nodeValue&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="string">&quot;tr3td2Obj.nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;tr3td2Obj.nodeName&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上述代码中值得注意的是对文本项节点的处理方式：&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="number">1</span><span>、首先，使用语句row1cell1Obj&nbsp;=&nbsp;document.createTextNode(</span><span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">1&quot;</span><span>)创建单元格（</span><span class="number">1</span><span>，</span><span class="number">1</span><span>）所在节点；&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="number">2</span><span>、然后使用语句row1cell1Obj.cloneNode(</span><span class="keyword">false</span><span>)分别创建其他单元格节点；&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="number">3</span><span>、最后，使用语句node.nodeValue&nbsp;=&nbsp;string分别为不同单元格赋值。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>点击这里运行这个实例。&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class="alt"><span>使用appendChild方法&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>appendChild方法的功能是在<span class="number">2</span><span>个节点间建立起父子关系，如果作为父亲的节点已经具有了孩子节点，那么新添加的孩子节点被追加为最后一个孩子，也就是lastChild。appendChild的语法是fatherObj.appendChild(childObj)，返回值是被追加的孩子节点。来看看下面的例子：&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜!--&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tableObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TABLE&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TBODY&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TR&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TD&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>returnValue&nbsp;=&nbsp;tableObj.appendChild(tbodyObj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj.appendChild(tr1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj.appendChild(tr2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj.appendChild(tr3Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj.appendChild(tr1td1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj.appendChild(tr1td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj.appendChild(tr2td1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj.appendChild(tr2td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj.appendChild(tr3td1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj.appendChild(tr3td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj.appendChild(row1cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td2Obj.appendChild(row1cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj.appendChild(row2cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td2Obj.appendChild(row2cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj.appendChild(row3cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td2Obj.appendChild(row3cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>bodyNode.appendChild(tableObj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;对页面内容进行修改后&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上面的代码演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点，然后使用appendChild将这些节点进行连接形成一个Table，最后通过语句bodyNode.appendChild(tableObj)将Table装载进文档中。点击这里运行这个实例&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class=""><span>使用applyElement方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>applyElement方法的功能是将一个节点与它的孩子节点和父亲节点脱离，然后将另外一个节点连接到这个节点，最终使它们成为父子关系。applyElement的语法是childObj.applyElement(fatherObj)，返回值是被连接的孩子节点。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>我们注意到，applyElement和appendChild实现的目的基本相同，都是在<span class="number">2</span><span>个节点间建立父子关系，但有</span><span class="number">2</span><span>个区别：&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="number">1</span><span>、applyElement方法只能操纵HTML标记节点，不能处理文本项节点。appendNode则能处理</span><span class="number">2</span><span>种节点。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="number">2</span><span>、appendNode对</span><span class="number">2</span><span>个节点的连接方式是从父到子，applyElement则是从子到父。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>来看看下面的例子：&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜!--&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tableObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TABLE&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TBODY&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TR&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TD&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row1cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row2cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>row3cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj.appendChild(row1cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td2Obj.appendChild(row1cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj.appendChild(row2cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td2Obj.appendChild(row2cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj.appendChild(row3cell1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td2Obj.appendChild(row3cell2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1td1Obj.applyElement(tr1Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj.appendChild(tr1td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2td1Obj.applyElement(tr2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr2Obj.appendChild(tr2td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3td1Obj.applyElement(tr3Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr3Obj.appendChild(tr3td2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tr1Obj.applyElement(tbodyObj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj.appendChild(tr2Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>tbodyObj.appendChild(tr3Obj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>returnValue&nbsp;=&nbsp;tbodyObj.applyElement(tableObj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>bodyNode.appendChild(tableObj);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>alert(<span class="string">&quot;对页面内容进行修改后&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>上面的代码同样演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点，然后混合使用applyElement和appendChild将这些节点进行连接形成一个Table，最后通过语句bodyNode.appendChild(tableObj)将Table装载进文档中。点击这里运行这个实例。&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>JavaScript高级应用：使用DOM技术操纵文档&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;使用insertBefore方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>insertBefore方法的功能和appendChild相似，都是将一个孩子节点连接到一个父亲节点，但insertBefore方法允许我们指定孩子节点的位置。insertBefore的语法是fatherObj.insertBefore(childObj,&nbsp;&nbsp;</span></li>
    <li class=""><span>brotherObj)，返回值是被连接的孩子节点。执行后，childObj的位置在brotherObj之前。来看看下面的例子：&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜HTML＞＜HEAD＞＜TITLE＞&nbsp;DOM&nbsp;Demo&nbsp;＜/title＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜BODY&nbsp;ID=<span class="string">&quot;bodyNode&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜SCRIPT&nbsp;LANGUAGE=<span class="string">&quot;JavaScript&quot;</span><span>＞&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜!--&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>alert(<span class="string">&quot;页面初始状态&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tableObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TABLE&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tbodyObj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TBODY&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TR&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3Obj&nbsp;=&nbsp;tr1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1td1Obj&nbsp;=&nbsp;document.createElement(<span class="string">&quot;TD&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3td1Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3td2Obj&nbsp;=&nbsp;tr1td1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row1cell1Obj&nbsp;=&nbsp;document.createTextNode(<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;1&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row1cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell1Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell2Obj&nbsp;=&nbsp;row1cell1Obj.cloneNode();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row1cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;1,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row2cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;2,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell1Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;1&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>row3cell2Obj.nodeValue&nbsp;=&nbsp;<span class="string">&quot;This&nbsp;is&nbsp;row&nbsp;3,&nbsp;cell&nbsp;2&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>returnValue&nbsp;=&nbsp;tableObj.insertBefore(tbodyObj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tbodyObj.insertBefore(tr3Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tbodyObj.insertBefore(tr2Obj,&nbsp;tr3Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tbodyObj.insertBefore(tr1Obj,&nbsp;tr2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1Obj.insertBefore(tr1td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1Obj.insertBefore(tr1td1Obj,&nbsp;tr1td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2Obj.insertBefore(tr2td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2Obj.insertBefore(tr2td1Obj,&nbsp;tr2td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3Obj.insertBefore(tr3td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3Obj.insertBefore(tr3td1Obj,&nbsp;tr3td2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1td2Obj.insertBefore(row1cell2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr1td1Obj.insertBefore(row1cell1Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2td2Obj.insertBefore(row2cell2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr2td1Obj.insertBefore(row2cell1Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3td2Obj.insertBefore(row3cell2Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>tr3td1Obj.insertBefore(row3cell1Obj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>bodyNode.insertBefore(tableObj);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="comment">//&nbsp;--＞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>＜/SCRIPT＞＜/BODY＞＜/HTML＞&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>上面的代码又一次演示了一个Table的动态创建过程。首先创建Table的各个行、列以及单元格的节点，然后混合使用insertBefore将这些节点进行连接形成一个Table，最后通过语句bodyNode.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>insertBefore&nbsp;(tableObj)将Table装载进文档中。可以看到，如果省略掉第<span class="number">2</span><span>个参数brotherObj采用fatherObj.insertBefore(childObj)方式，那么一定是在要连入的父亲节点还没有孩子节点的情况下，这时，就和appendNode方法的功能完全一样了。点击这里运行这个实例。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>使用removeNode方法&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>removeNode方法的功能是删除一个节点，语法为node.removeNode（<span class="keyword">false</span><span>）或者node.removeNode（</span><span class="keyword">true</span><span>），返回值是被删除的节点。removeNode（</span><span class="keyword">false</span><span>）表示仅仅删除指定节点，然后这个节点的原孩子节点提升为原双亲节点的孩子节点。removeNode（</span><span class="keyword">true</span><span>）表示删除指定节点及其所有下属节点。被删除的节点成为了孤立节点，不再具有有孩子节点和双亲节点。来看看下面的例子：&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜HTML＞＜HEAD＞＜TITLE＞DOM&nbsp;Demo＜/TITLE＞＜/HEAD＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜BODY&nbsp;id=bodyNode＞This&nbsp;is&nbsp;the&nbsp;document&nbsp;body&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;id=p1Node＞This&nbsp;is&nbsp;paragraph&nbsp;<span class="number">1</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;id=p2Node＞This&nbsp;is&nbsp;paragraph&nbsp;<span class="number">2</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;id=p3Node＞This&nbsp;is&nbsp;paragraph&nbsp;<span class="number">3</span><span>.&nbsp;＜IMG&nbsp;id=imgNode&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>src=<span class="string">&quot;myexam.gif&quot;</span><span>＞This&nbsp;text&nbsp;follows&nbsp;the&nbsp;image&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TABLE&nbsp;id=tableNode＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TBODY＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TR＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=yellow＞This&nbsp;is&nbsp;row&nbsp;<span class="number">1</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=orange＞This&nbsp;is&nbsp;row&nbsp;<span class="number">1</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TR＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=red＞This&nbsp;is&nbsp;row&nbsp;<span class="number">2</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=magenta＞This&nbsp;is&nbsp;row&nbsp;<span class="number">2</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TR＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=lightgreen＞This&nbsp;is&nbsp;row&nbsp;<span class="number">3</span><span>,&nbsp;cell&nbsp;</span><span class="number">1</span><span>＜/TD＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜TD&nbsp;bgColor=beige＞This&nbsp;is&nbsp;row&nbsp;<span class="number">3</span><span>,&nbsp;cell&nbsp;</span><span class="number">2</span><span>＜/TD＞＜/TR＞＜/TBODY＞＜/TABLE＞＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜P&nbsp;id=p4Node＞This&nbsp;is&nbsp;paragraph&nbsp;<span class="number">4</span><span>.＜/P＞&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜SCRIPT&nbsp;language=JavaScript＞&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>＜!--&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>var&nbsp;msg&nbsp;=&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>function&nbsp;printChildren()&nbsp;{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>childCount&nbsp;=&nbsp;bodyNode.childNodes.length;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>msg&nbsp;+=&nbsp;<span class="string">&quot;bodyNode.childNodes.length&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;bodyNode.childNodes.length&nbsp;+&nbsp;</span><span class="string">&quot;\n&quot;</span><span>&nbsp;;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>(var&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;＜&nbsp;childCount;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>msg&nbsp;+=&nbsp;<span class="string">&quot;bodyNode.childNodes[i].nodeName&nbsp;=&nbsp;&quot;</span><span>&nbsp;+&nbsp;&nbsp;</span></span></li>
    <li class=""><span>bodyNode.childNodes[i].nodeName&nbsp;+&nbsp;<span class="string">&quot;\n&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>alert(msg);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
 </ol></div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://avengerbevis.javaeye.com/blog/69536#comments" style="color:red;">已有 <strong>5</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/138' 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>Tue, 10 Apr 2007 10:29:39 +0800</pubDate>
        <link>http://avengerbevis.javaeye.com/blog/69536</link>
        <guid>http://avengerbevis.javaeye.com/blog/69536</guid>
      </item>
          <item>
        <title>Velocity手册</title>
        <author>AvengerBevis</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://avengerbevis.javaeye.com">AvengerBevis</a>&nbsp;
                    链接：<a href="http://avengerbevis.javaeye.com/blog/69529" style="color:red;">http://avengerbevis.javaeye.com/blog/69529</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          创建人：王艺<br />
<br />
Velocity是什么？<br />
Velocity是一个基于java的模板引擎（template engine）。它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。<br />
当Velocity 应用于web开发时，界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点，也就是说，页面设计人员可以只关注页面的显示效 果，而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来，这样为web站点的长期维护提供了便利，同时也 为我们在JSP和PHP之外又提供了一种可选的方案。<br />
Velocity的能力远不止web站点开发这个领域，例如，它可以从模板 （template）产生SQL和PostScript、XML，它也可以被当作一个独立工具来产生源代码和报告，或者作为其他系统的集成组件使用。 Velocity也可以为Turbine web开发架构提供模板服务（template service）。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。<br />
<br />
Velocity能为我们作什么？<br />
The Mud Store Example<br />
假 设你是一家专门出售Mud的在线商店的页面设计人员，让我们暂且称它为&quot;在线MUD商店&quot;。你们的业务很旺，客户下了各种类型和数量的mud订单。他们都 是通过输入用户名和密码后才登陆到你的网站，登陆后就允许他们查看订单并购买更多的mud。现在，一种非常流行的mud正在打折销售。另外有一些客户规律 性的购买另外一种也在打折但是不是很流行的Bright Red Mud，由于购买的人并不多所以它被安置在页面的边缘。所有用户的信息都是被跟踪并存放于数据库中的，所以某天有一个问题可能会冒出来：为什么不使用 velocity来使用户更好的浏览他们感兴趣的商品呢？<br />
Velocity使得web页面的客户化工作非常容易。作为一个web site的设计人员，你希望每个用户登陆时都拥有自己的页面。<br />
你会见了一些公司内的软件工程师，你发现他们每个人都同意客户应该拥有具有个性化的信息。那让我们把软件工程师应该作的事情发在一边，看一看你应该作些什么吧。<br />
你可能在页面内嵌套如下的VTL声明：<br />
<br />
<br />
Hello $customer.Name!<br />
<br />
#foreach( $mud in $nudsOnSpecial )<br />
#if ( $customer.hasPurchased( $mud ) )<br />
<br />
#end<br />
#end<br />
$flogger.getPromo( $mud )<br />
<br />
<br />
Velocity Template Language(VTL):AN introduction<br />
VTL意味着提供最简单、最容易并且最整洁的方式合并页面动态内容。<br />
VTL 使用references来在web site内嵌套动态内容，一个变量就是一种类型的reference。变量是某种类型的refreence，它可以指向java代码中的定义，或者从当前 页面内定义的VTL statement得到值。下面是一个VTL statement的例子，它可以被嵌套到HTML代码中：<br />
&nbsp; #set ( $a = &quot;Velocity&quot; )<br />
和 所有的VTL statement一样，这个statement以＃字符开始并且包含一个directive：set。当一个在线用户请求你的页面时，Velocity Templating Engine将查询整个页面以便发现所有＃字符，然后确定哪些是VTL statement，哪些不需要VTL作任何事情。<br />
＃字符后紧跟一个directive：set时，这个set directive使用一个表达式（使用括号封闭）――一个方程式分配一个值给变量。变量被列在左边，而它的值被列在右边，最后他们之间使用＝号分割。<br />
在上面的例子中，变量是$a，而它的值是Velocity。和其他的references一样以$字符开始，而值总是以双引号封闭。Velocity中仅有String可以被赋值给变量。<br />
记住以下的规则：<br />
使用$字符开始的references用于得到什么；使用#字符开始的directives用于作些什么。<br />
Hello Velocity World!<br />
一旦某个变量被分配了一个值，那么你就可以在HTML文件的任何地方引用它。在下面的例子中，一个值被分配给$foo变量，并在其后被引用。<br />
<br />
<br />
#set ( $foo = &quot;Velocity&quot; )<br />
Hello $foo World!<br />
<br />
<br />
上面的实现结果是在页面上打印&quot;Hello Velocity World！&quot;<br />
为了使包含VTL directives的statement更具有可读性，我们鼓励你在新行开始每个VTL statement，尽管你不是必须这么作。Set directive将在后面详细描述。<br />
注释<br />
单行注释：<br />
&nbsp; ## This is a single line comment.<br />
多行注释：<br />
&nbsp; #*<br />
&nbsp;&nbsp; Thus begins a multi-line comment. Online visitors won't<br />
&nbsp;&nbsp; see this text because the Velocity Templating Engine will<br />
ignore it.<br />
&nbsp; *#<br />
文档格式：<br />
&nbsp; #**<br />
&nbsp;&nbsp; This is a VTL comment block and<br />
&nbsp;&nbsp; may be used to store such information<br />
as the document author and versioning<br />
&nbsp;&nbsp; information:<br />
&nbsp;&nbsp; @version 5<br />
&nbsp;&nbsp; @author<br />
&nbsp; *#<br />
<br />
References<br />
在VTL 中有三种类型的references：变量(variables)、属性(properties)、方法(methods)。作为一个使用VTL的页面设 计者，你和你的工程师必须就references的名称达成共识，以便你可以在你的template中使用它们。<br />
Everything coming to and from a reference被作为一个String对象处理。如果有一个对象$foo是一个Integer对象，那么Velocity将调用它的toString()方法将这个对象转型为String类型。<br />
&nbsp; 变量<br />
&nbsp; 格式要求同java。<br />
&nbsp; 属性<br />
&nbsp; 例子：<br />
&nbsp;&nbsp;&nbsp; $customer.Address<br />
&nbsp;&nbsp;&nbsp; $purchase.Total<br />
$customer.Address 有两种含义。它可以表示：查找hashtable对象customer中以Address为关键字的值；也可以表示调用customer对象的 getAddress()方法。当你的页面被请求时，Velocity将确定以上两种方式选用那种，然后返回适当的值。<br />
方法<br />
一个方法就是被定义在java中的一段代码，并且它有完成某些有用工作的能力，例如一个执行计算和判断条件是否成立、满足等。方法是一个由$开始并跟随VTL标识符组成的References，一般还包括一个VTL方法体。例如：<br />
&nbsp; $customer.getAddress()<br />
&nbsp; $purchase.getTotal()<br />
&nbsp; $page.setTitle( &quot;My Home Page&quot; )<br />
&nbsp; $person.setAttributes( [&quot;Strange&quot;, &quot;Weird&quot;, &quot;Excited&quot;] )<br />
前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺想上面的属性$customer.Address 和 $purchase.Total。如果你觉得他们之间有某种联系的话，那你是正确的。<br />
VTL属性可以作为VTL方法的缩写。$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。如果可能的话使用属性的方式是比较合理的。属性和方法的不同点在于你能够给一个方法指定一个参数列表。<br />
正式reference标记<br />
reference的正是格式如下：<br />
&nbsp; ${mudSlinger}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量<br />
&nbsp; ${customer.Address}&nbsp;&nbsp;&nbsp; 属性<br />
&nbsp; ${purchase.getTotal()}&nbsp;&nbsp;&nbsp; 方法<br />
非正是格式更见常用，但是有时还是使用正是格式比较适合。例如：你希望通过一个变量$vice来动态的组织一个字符串。<br />
&nbsp; Jack is a $vicemaniac.<br />
本来变量是$vice现在却变成了$vicemaniac，这样Veloctiy就不知道您到底要什么了。所以，应该使用正是格式书写<br />
&nbsp; Jack is a ${vice}maniac<br />
现在Velocity知道变量是$vice而不是$vicemaniac。<br />
Quiet reference notation<br />
例如：<br />
&nbsp; <br />
当页面的form被初始加载时，变量$email还没有值，这时你肯定是希望它能够显示一个blank text来代替输出&quot;$email&quot;这样的字段。那么使用quiet reference notation就比较合适。<br />
&nbsp; <br />
这样文本框的初始值就不会是email而是空值了。<br />
正式和quiet格式的reference notation也可一同使用，像下面这样：<br />
&nbsp; <br />
Getting literal<br />
Velocity使用特殊字符$和#来帮助它工作，所以如果要在template里使用这些特殊字符要格外小心。本节将讨论$字符。<br />
&nbsp; 货币字符<br />
在VTL中使用$2.5这样的货币标识是没有问题得的，VTL不会将它错认为是一个reference，因为VTL中的reference总是以一个大写或者小写的字母开始。<br />
Escaping valid VTL reference<br />
VTL中使用&quot;\&quot;作为逃逸符。<br />
例如：<br />
&nbsp; #set( $email = &quot;foo&quot; )<br />
&nbsp; $email<br />
&nbsp; \$email<br />
&nbsp; \\$email<br />
&nbsp; \\\$email<br />
将render为：<br />
&nbsp; foo<br />
&nbsp; $email<br />
&nbsp; \foo<br />
&nbsp; \\$email<br />
如果email变量没有被定义则<br />
&nbsp; $email<br />
&nbsp; \$email<br />
&nbsp; \\$email<br />
&nbsp; \\\$email<br />
将被render为：<br />
&nbsp; $email<br />
&nbsp; \$email<br />
&nbsp; \\$email<br />
&nbsp; \\\$email<br />
注意：VTL中未被定义的变量将被认为是一个字符串，所以以下例子：<br />
&nbsp; #set( $foo = &quot;gibbous&quot; )<br />
&nbsp; $moon = $foo<br />
的输出结果是：<br />
$moon = gibbous<br />
Case substitution<br />
现在你已经对reference比较熟悉了，你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员的使用。例如：<br />
&nbsp; $foo<br />
&nbsp; $foo.getBar()<br />
&nbsp; ## is the same as<br />
&nbsp; $foo.Bar<br />
<br />
&nbsp; $data.getUser(&quot;jon&quot;)<br />
&nbsp; ## is the same as<br />
&nbsp; $data.User(&quot;jon&quot;)<br />
<br />
&nbsp; $data.getRequest().getServerName()<br />
&nbsp; # is the same as<br />
&nbsp; $data.Request.ServerName<br />
&nbsp; ## is the same as<br />
&nbsp; ${data.Request.ServerName}<br />
但是，注意VTL中不会将reference解释为对象的实例变量。例如：$foo.Name将被解释为Foo对象的getName（）方法，而不是Foo对象的Name实例变量。<br />
Directives<br />
Reference允许设计者使用动态的内容，而directive使得你可以应用java代码来控制你的显示逻辑，从而达到你所期望的显示效果。<br />
&nbsp; #set<br />
&nbsp; #set directive被用于设置一个reference的值。例如：<br />
&nbsp;&nbsp;&nbsp; #set ( $primate = &quot;monkey&quot; )<br />
&nbsp;&nbsp;&nbsp; #set ( $customer.Behavior = $primate )<br />
赋值左侧的（LHS）必须是一个变量或者属性reference。右侧（RHS）可以是以下类型中一种：<br />
l&nbsp; 变量reference<br />
l&nbsp; String literal<br />
l&nbsp; 属性reference<br />
l&nbsp; 方法reference<br />
l&nbsp; number literal<br />
l&nbsp; ArrayList<br />
下面是应用各种类型的RHS的例子：<br />
&nbsp; ＃set ( $monkey = $bill ) ##变量reference<br />
&nbsp; ＃set ( $monkey.Friend = &quot;monica&quot; ) ##String literal<br />
&nbsp; ＃set ( $monkey.Blame = $whitehouse.Leak )##属性reference<br />
&nbsp; ＃set ( $monkey.Plan = $spindoctor.weave($web) )##方法reference<br />
&nbsp; ＃set ( $monkey.Number = 123 )##Number literal<br />
&nbsp; ＃set ( $monkey.Say = [&quot;Not&quot;, $my, &quot;fault&quot;] )##ArrayList<br />
注意：最后一个例子的取值方法为：$monkey.Say.get(0)<br />
RHS也可以是一个简单的算术表达式：<br />
&nbsp; #set ( $value = $foo + 1 )<br />
&nbsp; #set ( $value = $bar -1 )<br />
#set ( $value = $foo * $bar )<br />
#set ( $value = $foo / $bar )<br />
如果你的RHS是一个null，VTL的处理将比较特殊：它将指向一个已经存在的reference，这对初学者来讲可能是比较费解的。例如：<br />
&nbsp; #set ( $resut = $query.criteria(&quot;name&quot;) )<br />
&nbsp; The result of the first query is $result<br />
<br />
&nbsp; #set ( $resut = $query.criteria(&quot;address&quot;) )<br />
&nbsp; The result of the second query is $result<br />
如果$query.criteria(&quot;name&quot;)返回一个&quot;bill&quot;，而$query.criteria(&quot;address&quot;)返回的是null，则显示的结果如下：<br />
&nbsp; The result of the first query is bill<br />
&nbsp; The result of the first query is bill<br />
看看下面的例子：<br />
&nbsp; #set( $criteria = [&quot;name&quot;, &quot;address&quot;] )<br />
#foreach( $criterion in $criteria )<br />
#set( $result = $query.criteria($criterion) )<br />
&nbsp; #if( $result )<br />
&nbsp; Query was successful<br />
&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
#end<br />
在 上面的例子中，程序将不能智能的根据$result的值决定查询是否成功。在$result被#set后（added to the context），它不能被设置回null（removed from the context）。打印的结果将显示两次查询结果都成功了，但是实际上有一个查询是失败的。<br />
为了解决以上问题我们可以通过预先定义的方式：<br />
&nbsp; #set( $criteria = [&quot;name&quot;, &quot;address&quot;] )<br />
&nbsp; #foreach( $criterion in $criteria )<br />
&nbsp;&nbsp;&nbsp; #set( $result = false )<br />
&nbsp;&nbsp;&nbsp; #set( $result = $query.criteria( $criterion ) )<br />
&nbsp;&nbsp;&nbsp; #if( $result )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query was successful<br />
&nbsp;&nbsp;&nbsp; #end<br />
&nbsp; #end<br />
&nbsp; String Literals<br />
&nbsp; 当你使用#set directive，String literal封闭在一对双引号内。<br />
&nbsp;&nbsp;&nbsp; #set ( $directoryRoot = &quot;www&quot; )<br />
&nbsp;&nbsp;&nbsp; #set ( $templateName = &quot;index.vm&quot; )<br />
&nbsp;&nbsp;&nbsp; #set ( $template = &quot;$directoryRoot/$tempateName&quot; )<br />
&nbsp;&nbsp;&nbsp; $template<br />
&nbsp; 上面这段代码的输出结果为：www/index.vm<br />
&nbsp; 但是，当string literal被封装在单引号内时，它将不被解析：<br />
&nbsp;&nbsp;&nbsp; #set ( $foo = &quot;bar&quot; )<br />
&nbsp;&nbsp;&nbsp; $foo<br />
&nbsp;&nbsp;&nbsp; #set ( $blargh = '$foo' )<br />
&nbsp; 结果：<br />
&nbsp;&nbsp;&nbsp; bar<br />
&nbsp;&nbsp;&nbsp; $foo<br />
&nbsp; 上面这个特性可以通过修改velocity.properties文件的stringliterals.interpolate = false的值来改变上面的特性是否有效。<br />
条件语句<br />
&nbsp; if/elseif/else<br />
当一个web页面被生成时使用Velocity的#if directrive，如果条件成立的话可以在页面内嵌入文字。例如：<br />
&nbsp; #if ( $foo )<br />
&nbsp;&nbsp;&nbsp; Velocity!<br />
&nbsp; #end<br />
上例中的条件语句将在以下两种条件下成立：<br />
l&nbsp; $foo是一个boolean型的变量，且它的值为true<br />
l&nbsp; $foo变量的值不为null<br />
这里需要注意一点：Velocity context仅仅能够包含对象，所以当我们说&quot;boolean&quot;时实际上代表的时一个Boolean对象。即便某个方法返回的是一个boolean值，Velocity也会利用内省机制将它转换为一个Boolean的相同值。<br />
如果条件成立，那么#if和#end之间的内容将被显示。<br />
#elseif和#else元素可以同#if一同使用。例如：<br />
&nbsp; #if( $foo ＜ 10 )<br />
&nbsp;&nbsp;&nbsp;&nbsp; Go North<br />
&nbsp; #elseif( $foo == 10 )<br />
&nbsp;&nbsp;&nbsp;&nbsp; Go East<br />
&nbsp; #elseif( $foo == 6 )<br />
&nbsp;&nbsp;&nbsp;&nbsp; Go South<br />
&nbsp; #else<br />
&nbsp;&nbsp;&nbsp;&nbsp; Go West<br />
&nbsp; #end<br />
注意这里的Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false，但是与java不同它使用&quot;＝＝&quot;来比较两个值，而且velocity要求等号两边的值类型相同。<br />
关系、逻辑运算符<br />
Velocity中使用等号操作符判断两个变量的关系。例如：<br />
#set ( $foo = &quot;deoxyribonucleic acid&quot; )<br />
#set ( $bar = &quot;ribonucleic acid&quot; )<br />
#if ( $foo == $foo )<br />
&nbsp; In this case it's clear they aren't equivalent.So&hellip;<br />
#else<br />
&nbsp; They are not equivalent and this will be the output.<br />
#end<br />
<br />
Velocity有AND、OR和NOT逻辑运算符。下面是一些例子：<br />
&nbsp; ## logical AND<br />
&nbsp; #if( $foo &amp;&amp; $bar )<br />
&nbsp;&nbsp;&nbsp;&nbsp; This AND that<br />
&nbsp; #end<br />
<br />
&nbsp; ## logical OR<br />
&nbsp; #if ( $foo || $bar )<br />
&nbsp;&nbsp;&nbsp; This OR That<br />
&nbsp; #end<br />
<br />
&nbsp; ##logical NOT<br />
&nbsp; #if ( !$foo )<br />
&nbsp;&nbsp;&nbsp;&nbsp; NOT that<br />
&nbsp; #end<br />
循环<br />
&nbsp; Foreach循环<br />
&nbsp; 例子：<br />
&nbsp;&nbsp; &nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #foreach ( $product in $allProducts )<br />
&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $product<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
<br />
<br />
&nbsp; 每次循环$allProducts中的一个值都会赋给$product变量。<br />
$allProducts 可以是一个Vector、Hashtable或者Array。分配给$product的值是一个java对象，并且可以通过变量被引用。例如：如果$ product是一个java的Product类，并且这个产品的名字可以通过调用他的getName（）方法得到。<br />
现在我们假设$allProducts是一个Hashtable，如果你希望得到它的key应该像下面这样：<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #foreach ( $key in $allProducts.keySet() )<br />
&nbsp;&nbsp;&nbsp; * Key: $key -＞ Value: $allProducts.get($key)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #end<br />
<br />
<br />
<br />
Velocity还特别提供了得到循环次数的方法，以便你可以像下面这样作：<br />
<br />
#foreach ( $customer in $customerList )<br />
<br />
#end<br />
$velocityCount&nbsp;&nbsp; &nbsp;＞$customer.Name<br />
<br />
$velocityCount 变量的名字是Velocity默认的名字，你也可以通过修改velocity.properties文件来改变它。默认情况下，计数从&quot;1&quot;开始，但是你 可以在velocity.properties设置它是从&quot;1&quot;还是从&quot;0&quot;开始。下面就是文件中的配置：<br />
&nbsp; # Default name of loop counter<br />
&nbsp; # variable reference<br />
&nbsp; directive.foreach.counter.name = velocityCount<br />
<br />
&nbsp; # Default starting value of the loop<br />
&nbsp; # counter variable reference<br />
&nbsp; directive.foreach.counter.initial.value = 1<br />
<br />
include<br />
#include script element允许模板设计者引入本地文件。被引入文件的内容将不会通过模板引擎被render。为了安全的原因，被引入的本地文件只能在TEMPLATE_ROOT目录下。<br />
&nbsp; #inclued ( &quot;one.txt&quot; )<br />
如果您需要引入多个文件，可以用逗号分隔就行：<br />
&nbsp; #include ( &quot;one.gif&quot;, &quot;two.txt&quot;, &quot;three.htm&quot; )<br />
在括号内可以是文件名，但是更多的时候是使用变量的：<br />
&nbsp; #inclue ( &quot;greetings.txt&quot;, $seasonalstock )<br />
<br />
parse<br />
#parse script element允许模板设计者一个包含VTL的本地文件。Velocity将解析其中的VTL并render模板。<br />
&nbsp; #parse( &quot;me.vm&quot; )<br />
就像#include，#parse接受一个变量而不是一个模板。任何由#parse指向的模板都必须包含在TEMPLATE_ROOT目录下。与#include不同的是，#parse只能指定单个对象。<br />
你可以通过修改velocity.properties文件的parse_direcive.maxdepth的值来控制一个template可以包含的最多#parse的个数――默认值是10。#parse是可以递归调用的，例如： 如果dofoo.vm包含如下行：<br />
&nbsp; Count down.<br />
&nbsp; #set ( $count = 8 )<br />
&nbsp; #parse ( &quot;parsefoo.vm&quot; )<br />
&nbsp; All done with dofoo.vm!<br />
那么在parsefoo.vm模板中，你可以包含如下VTL：<br />
&nbsp; $count<br />
&nbsp; #set ( $count = $count &ndash; 1 )<br />
&nbsp; #if ( $count ＞ 0 )<br />
&nbsp;&nbsp;&nbsp; #parse( &quot;parsefoo.vm&quot; )<br />
&nbsp; #else<br />
&nbsp;&nbsp;&nbsp; All done with parsefoo.vm!<br />
&nbsp; #end<br />
的显示结果为：<br />
&nbsp; Count down.<br />
&nbsp; 8<br />
&nbsp; 7<br />
&nbsp; 6<br />
&nbsp; 5<br />
&nbsp; 4<br />
&nbsp; 3<br />
&nbsp; 2<br />
&nbsp; 1<br />
&nbsp; 0<br />
&nbsp; All done with parsefoo.vm!<br />
All done with dofoo.vm!<br />
<br />
Stop<br />
#stop script element允许模板设计者停止执行模板引擎并返回。把它应用于debug是很有帮助的。<br />
&nbsp; #stop<br />
<br />
Velocimacros<br />
#macro script element允许模板设计者定义一段可重用的VTL template。例如：<br />
&nbsp; #macro ( d )<br />
&nbsp; <br />
&nbsp; #end<br />
在上面的例子中Velocimacro被定义为d，然后你就可以在任何VTL directive中以如下方式调用它：<br />
&nbsp; #d()<br />
当你的template被调用时，Velocity将用替换为#d()。<br />
每个Velocimacro可以拥有任意数量的参数――甚至0个参数，虽然定义时可以随意设置参数数量，但是调用这个Velocimacro时必须指定正确的参数。下面是一个拥有两个参数的Velocimacro，一个参数是color另一个参数是array：<br />
&nbsp; #macro ( tablerows $color $somelist )<br />
&nbsp; #foreach ( $something in $somelist )<br />
&nbsp;&nbsp;&nbsp; $something＜/tr＞<br />
&nbsp; #end<br />
&nbsp; #end<br />
调用#tablerows Velocimacro：<br />
&nbsp; #set ( $greatlakes = [ &quot;Superior&quot;, &quot;Michigan&quot;, &quot;Huron&quot;, &quot;Erie&quot;, &quot;Ontario&quot; ] )<br />
&nbsp; #set ( $color = &quot;blue&quot; )<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; #tablerows( $color $greatlakes )<br />
&nbsp; <br />
<br />
经过以上的调用将产生如下的显示结果：<br />
&nbsp; <br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp; <br />
Superior<br />
Michigan<br />
Huron<br />
Erie<br />
Ontario<br />
<br />
Velocimacros 可以在Velocity模板内实现行内定义（inline），也就意味着同一个web site内的其他Velocity模板不可以获得Velocimacros的定义。定义一个可以被所有模板共享的Velocimacro显然是有很多好处 的：它减少了在一大堆模板中重复定义的数量、节省了工作时间、减少了出错的几率、保证了单点修改。<br />
上面定义的#tablerows( $color $list )Velocimacro被定义在一个Velocimacros模板库(在velocity.properties中定义)里，所以这个macro可以在 任何规范的模板中被调用。它可以被多次应用并且可以应用于不同的目的。例如下面的调用：<br />
&nbsp; #set ( $parts = [ &quot;volva&quot;, &quot;stipe&quot;, &quot;annulus&quot;, &quot;gills&quot;, &quot;pileus&quot; ] )<br />
&nbsp; #set ( $cellbgcol = &quot;#CC00FF&quot; )<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; #tablerows( $cellbgcol $parts )<br />
&nbsp; <br />
<br />
上面VTL将产生如下的输出：<br />
&nbsp; <br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp; <br />
volva<br />
stipe<br />
annulus<br />
gills<br />
pileus<br />
<br />
&nbsp; Velocimacro arguments<br />
&nbsp; Velocimacro可以使用以下任何元素作为参数：<br />
l&nbsp; Reference：任何以$开头的reference<br />
l&nbsp; String literal：<br />
l&nbsp; Number literal：<br />
l&nbsp; IntegerRange：[1&hellip;.3]或者[$foo&hellip;.$bar]<br />
l&nbsp; 对象数组：[&quot;a&quot;,&quot;b&quot;,&quot;c&quot;]<br />
l&nbsp; boolean值：true、false<br />
当 将一个reference作为参数传递给Velocimacro时，请注意reference作为参数时是以名字的形式传递的。这就意味着参数的值在每次 Velocimacro内执行时才会被产生。这个特性使得你可以将一个方法调用作为参数传递给Velocimacro，而每次Velocimacro执行 时都是通过这个方法调用产生不同的值来执行的。例如：<br />
&nbsp; #macro ( callme $a )<br />
&nbsp;&nbsp;&nbsp; $a $a $a<br />
&nbsp; #end<br />
&nbsp; #callme( $foo.bar() )<br />
执行的结果是：reference $foo的bar（）方法被执行了三次。<br />
如果你不需要这样的特性可以通过以下方法：<br />
&nbsp; #set ( $myval = $foo.bar() )<br />
&nbsp; #callme ( $myval )<br />
<br />
Velocimacro properties<br />
Velocity.properties文件中的某几行能够使Velocimacros的实现更加灵活。注意更多的内容可以看Developer Guide。<br />
Velocity.properties文件中的velocimacro.libraary：一个以逗号分隔的模板库列表。默认情况下，velocity查找唯一的一个库：VM_global_library.vm。你可以通过配置这个属性来指定自己的模板库。<br />
Velocity.properties 文件中的velocimacro.permissions.allow.inline属性：有两个可选的值true或者false，通过它可以确定 Velocimacros是否可以被定义在regular template内。默认值是ture――允许设计者在他们自己的模板中定义Velocimacros。<br />
Velocity.properties文件中的<br />
velocimacro.permissions.allow.inline.replace.global 属性有两个可