车辆维修档案管理制度:"DXML" Redux:从 XML 创建动态的 HTML菜单

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 08:27:23

"DXML" Redux:从 XML 创建动态的 HTML 菜单


George Young
Microsoft Corporation

请下载本文的源代码(压缩文件,4.80K)

在上个月的专栏中, 我们讨论了使用 XSL、层叠样式表 (CSS) 和 JScript(R),从 XML 文件中创建动态 HTML(DHTML) 目录 (TOC)。我们从链接列表和相关的标签着手,结果获得了一个有助于站点浏览的可折叠 TOC。

在这个月的专栏中,我们将 XML 数据转换成 DHTML 菜单,就像在 MSDN Online 中所使用的菜单,在这一过程中有望进一步说明 XML 所提供的演示提取功能的优点。

这里的代码不是 MSDN Online 中所使用的实际菜单代码的严格再现。如果需要您提交 HTML 的浏览器不是 Internet Explorer 4.0 或其更新版本,我们将创建低级 HTML 的练习留给您,但所用的技术是一样的。


图 1. DHTML 菜单

如果您正在用 Internet Explorer 4.0 或更新版本阅读这篇文档, 您就可以查看 DHTML 菜单。

我们在这个月的讨论中假设您已经熟悉了上个月的专栏所论及的关于 XML 和 XSL 的基本知识。

在 XML 中保存 TOC

这里又用到了我们保存在 XML 中的站点浏览数据。 因为上个月我们对 XML 进行了详细论述, 所以这里我们只列出文件的清单,然后继续进行讨论。

列表 1:webdev.xml

对象/workshop/author/dhtml/reference/objects.asp属性/workshop/author/dhtml/reference/properties.asp方法/workshop/author/dhtml/reference/methods.asp事件/workshop/author/dhtml/reference/events.asp集合/workshop/author/dhtml/reference/collections.asp属性/workshop/author/css/reference/attributes.asp长度单位/workshop/author/css/reference/lengthunits.asp颜色表/workshop/author/dhtml/reference/colors/colors.asp开发人员指南/xml/guide/default.asp对象/xml/xmldom/scriptref/XMLDOM_Objects.asp开发人员指南/xml/xsl/tutorials/xsl-overview.asp元素/xml/xsl/reference/XSLElements.asp方法/xml/xsl/reference/xslmethods.asp模式语法/xml/xsl/reference/XSLPatternSyntax.asp

使用 XSL 样式表生成菜单的“框架”HTML

DHTML 菜单由两种组件组成:第一种是菜单栏,扩展了页宽度并显示主 TOPICS 标题;第二种是单个菜单本身,当鼠标在给定 TOPICS 标题上方滑动时,它们会自动弹出。我们将在 XSL 样式表中创建这两种组件。

列表 2:menus.xsl

tdMenuBarItem|

生成菜单栏

首先,我们输出一个

,它的唯一目的是将背景颜色横跨整个页面宽度。

  
...

然后,在

内,我们输出一个 ,它的单元格 (
) 将包含 TOPICS 标题。

  ...

内,我们使用 xsl:for-each 为至少包含一个 TOPIC 的每一 TOPICS 元素创建 ...

最后,我们创建以“|”作为内容的

创建好菜单栏后,我们现在将注意力转到单个菜单。

生成单个菜单

由至少带有一个 TOPIC 子元素的 TOPICS 元素表征的每个菜单是一个

。我们赋予每一个
“clsMenu”类和一个由相链接的字符串“divMenu”组成的特有的 ID 以及 TOPICS TYPE 属性,很像以上我们对菜单栏所进行的操作。

  
divMenu...

在每个菜单

内部,我们输出一个空的
,对于后者我们设置为“clsMenuSpacer”类,用于在菜单栏和展开的菜单之间提供空间。

      
...

最后,对于菜单中的每一菜单项,我们输出一个

,每一个都带有指向独立的 TOPIC 的链接。我们利用 TOPIC 的 HREF 子元素创建 ,并将 TOPIC 的 元素用作链接的 innerText。</p><pre class="clsCode"> <xsl:for-each select="TOPIC"><DIV><A><xsl:attribute name="HREF">http://msdn.microsoft.com<xsl:value-of select="URL" /></xsl:attribute><xsl:value-of select="TITLE" /></A></DIV></xsl:for-each></pre><p>以上是 DHTML 菜单的框架 HTML,我们现在将添加菜单的外观和感觉。</p><h2>使用脚本弹出(和退出)菜单</h2><p>我们的 menus.js 脚本包含打开和关闭菜单的两个函数,为 <strong>onmouseover()</strong> 和 <strong>onmouseout()</strong> 事件提供了两个文档级的事件处理程序函数,并为跟踪当前所打开的菜单(如果存在的话)提供了一个“全局”变量。</p><p><strong>eOpenMenu</strong> 初始化时设为空,并且被指定一个指针,在相关菜单打开时指向菜单的 <DIV>。</p><pre class="clsCode">var eOpenMenu = null;</pre><p>由我们的 <strong>document.onmouseouver()</strong> 事件处理程序调用 <strong>OpenMenu()</strong>,后者在调用时将获取两个参数:sourceElement 和一个指向要显示的 <DIV> 的指针。 菜单 <DIV> 在水平和垂直两个方向上相对于 sourceElement 进行定位,并且其可见性样式属性设为“可见”。<strong>eOpenMenu</strong> 变量成为指向这一 <DIV> 的指针。</p><pre class="clsCode">function OpenMenu(eSrc,eMenu){eMenu.style.left = eSrc.offsetLeft + divMenuBar.offsetLeft;eMenu.style.top = divMenuBar.offsetHeight + divMenuBar.offsetTop;eMenu.style.visibility = "visible";eOpenMenu = eMenu;}</pre><p><strong>CloseMenu()</strong>, 同样由 <strong>document.onmouseover()</strong> 调用,将获取一个指向要关闭的菜单 <DIV> 的引用。该函数通过将 <strong>eOpenMenu</strong> 设置为空,将 <DIV> 的可见性设为“隐藏”,并删除对 <DIV> 的全局引用。</p><pre class="clsCode">function CloseMenu(eMenu){eMenu.style.visibility = "hidden";eOpenMenu = null;}</pre><p><strong>document.onmouseover()</strong> 事件处理程序是发生操作的地方。它负责确定鼠标滑过的元素,并决定要进行的操作。</p><p>如果鼠标滑过的是“clsMenuItem”类元素(表示其中的一个菜单栏标题),我们为其设置了一个突出显示的颜色。我们通过生成 ID 来确认相关的菜单是否存在。如果所打开的菜单不是与当前标题相关的菜单,我们将关闭该菜单,再打开相关菜单。</p><p>否则,如果我们没有用鼠标滑过菜单栏标题,我们将检查以下三个条件,以确认是否应该关闭菜单:有一个菜单已经打开;打开的菜单中没有包含我们的 sourceElement;菜单栏也没有包含我们的 sourceElement。</p><pre class="clsCode">function document.onmouseover(){var eSrc = window.event.srcElement;if ("clsMenuBarItem" == eSrc.className){eSrc.style.color = "moccasin";var eMenu = document.all[eSrc.id.replace("tdMenuBarItem","divMenu")];if (eOpenMenu && eOpenMenu != eMenu){CloseMenu(eOpenMenu);}if (eMenu){OpenMenu(eSrc,eMenu);}}else if (eOpenMenu && !eOpenMenu.contains(eSrc) && !divMenuBar.contains(eSrc)){CloseMenu(eOpenMenu);}}</pre><p><strong>document.onmouseout()</strong> 事件处理程序只是负责在鼠标退出后,将菜单项标题的字体颜色重置为默认色。</p><pre class="clsCode">function document.onmouseout(){var eSrc = window.event.srcElement;if ("clsMenuBarItem" == eSrc.className){eSrc.style.color = "";}}</pre><h2>使用 CSS 在菜单弹出前隐藏菜单</h2><p>最后,我们将讲一讲 CSS 文件。我们使用 CSS,通过设置背景颜色和不同的字体和文字属性,设置 <DIV> 和 <TABLE> 的格式,使其看上去像菜单。初始化时,所有菜单 <DIV>(DIV.clsMenu) 的可见性属性均设置为“隐藏”,这样,只有我们在脚本中进行了显式操作,它们才会出现在页中。</p><h4>列表 3:list.css</h4><pre class="clsCode">DIV#divMenuBar { background-color:#6699CC; }TABLE#tblMenuBar TD {font-size:60%; color:white; padding:0px 5px 0px 5px; cursor:default;}TABLE#tblMenuBar TD.clsMenuBarItem { font-weight:bold; cursor:hand; }DIV.clsMenu {font-size:90%; background-color:#6699CC;position:absolute; visibility:hidden; width:130px;padding:5px 5px 5px 8px; border-top:1 white solid;}DIV.clsMenu A { text-decoration:none; color:white; font-weight:bold; }DIV.clsMenu A:hover { color:moccasin; }</pre><p>这就是我们针对“DXML”菜单所讲述的内容。如果您还没有进行下载的话,请一定要下载本文的源代码,并进行测试。下个月,我们将开发更多的动态 HTML 窗口组件,以供您的 Web 应用程序使用。<h2>详细信息</h2><p>如果要详细了解由 XML 创建 DHTML 的方法或 XML 其他有趣的用途,请访问 MSDN Online Web Workshop(英文) 的 XML(英文) 部分,最好能重点查看这份范例中突出显示的链接。并且一定要阅读我的同事 Charlie Heinemann 在 MSDN Online Voices 上定期推出的 Extreme XML 专栏。</p><p>有关创建 DHTML 菜单的详细信息,请参阅 Web Workshop 上有关这一主题的以下两篇文章:“Build a Pop-up Menu Using Dynamic HTML and JavaScript: Part II ”以及“A Tour of the Code -- NavBar: Dynamic Menu Generation”。</p><p><em><strong>George Young</strong> 是 Microsoft 的 Windows 站点的开发主管,以前曾在 Site Builder Network 站点从事开发工作。在他有空时,喜欢用 Windows 媒体播放器收听墨西哥广播电台的节目,也常开着他的宝贝卡迪车往返于新奥尔良和华盛顿之间的 Redmond。<em><p><h4>已存档的代码角(Code Corner) 专栏</h4></em></em></div> <div class="list-group"> <a href="/article/jnrxpx" class="list-group-item">"DXML" Redux:从 XML 创建动态的 HTML菜单</a> <a href="/article/jozvax" class="list-group-item">掌握XML系列(四)---创建格式良好的XML文档</a> <a href="/article/jrbvkd" class="list-group-item">VB 用API创建动态菜单示例(含子菜单且能响应事件)</a> <a href="/article/jozvai" class="list-group-item">掌握XML系列(三)---创建格式良好的饿XML文档 续编</a> <a href="/article/jolynr" class="list-group-item">HTML操作XML数据岛,数据绑定</a> <a href="/article/jqctzd" class="list-group-item">动态HTML ---DHTML</a> <a href="/article/jpgyvz" class="list-group-item">xml的createNode方法</a> <a href="/article/jmuksw" class="list-group-item">jQuery+CSS 打造动态下滑菜单效果</a> <a href="/article/jpusag" class="list-group-item">jQuery+CSS实现动态滑动菜单导航</a> <a href="/article/jnnmil" class="list-group-item">web.xml的配置1</a> <a href="/article/jlvuez" class="list-group-item">学习笔记——如何创建HTML表格</a> <a href="/article/jlvwgj" class="list-group-item">学习笔记——如何创建HTML表格 1</a> <a href="/article/jppuqa" class="list-group-item">关于下发《全市创建工作动态督查监管制度》的通知</a> <a href="/article/jrcwxo" class="list-group-item">mapx动态创建图层:Mapx添加永久图层的方法 疯狂代码!</a> <a href="/article/jnsoub" class="list-group-item">动态创建视图时候 AfxCheckDialogTemplate执行出错</a> <a href="/article/jrnxxp" class="list-group-item">用数据有效性创建动态下拉列表</a> <a href="/article/jlpbdt" class="list-group-item">营养师的家宴菜单</a> <a href="/article/jlpcaa" class="list-group-item">营养师的家宴菜单</a> <a href="/article/jmahqz" class="list-group-item">冬末春初的食补菜单</a> <a href="/article/jnliyp" class="list-group-item">血的食疗菜单</a> <a href="/article/jnmytm" class="list-group-item">女人的营养菜单</a> <a href="/article/jpmllc" class="list-group-item">补血的食疗菜单</a> <a href="/article/jppodo" class="list-group-item">菜单居中的方法</a> <a href="/article/jqojpi" class="list-group-item">单反相机菜单的调节</a> </div> </div> </div> </div> </div> </div> <footer id="footer" class="footer hidden-print"> <div class="container"> <div class="panel panel-default"> <div class="panel-heading">相关问题</div> <div class="panel-body"> <a class="btn btn-default" href="/article/jripkh" title="家不是讲理的地方,家是讲爱的地方">家不是讲理的地方,家是讲爱的地方</a> <a class="btn btn-default" href="/article/jripki" title="西方国家有人落水后会发生什么?">西方国家有人落水后会发生什么?</a> <a class="btn btn-default" href="/article/jripkj" title="极品纯音乐300首">极品纯音乐300首</a> <a class="btn btn-default" href="/article/jripkk" title="毛泽东读书笔记解析(早期篇节选)">毛泽东读书笔记解析(早期篇节选)</a> <a class="btn btn-default" href="/article/jripkl" title="股市倍增术(第03章)">股市倍增术(第03章)</a> <a class="btn btn-default" href="/article/jripkm" title="武曲在十二宮男女命詳述">武曲在十二宮男女命詳述</a> <a class="btn btn-default" href="/article/jripkn" title="中国三大舰队主要装备及作战实力状况">中国三大舰队主要装备及作战实力状况</a> <a class="btn btn-default" href="/article/jripko" title="朱镕基的简历,看过之后才知道什么叫震撼">朱镕基的简历,看过之后才知道什么叫震撼</a> <a class="btn btn-default" href="/article/jripkp" title="简单也是一种美!【精美图文】">简单也是一种美!【精美图文】</a> <a class="btn btn-default" href="/article/jripkq" title="前汉演义">前汉演义</a> <a class="btn btn-default" href="/article/jripkr" title="满清八旗图鉴〔组图〕">满清八旗图鉴〔组图〕</a> <a class="btn btn-default" href="/article/jripks" title="漂亮到可做素材的风景">漂亮到可做素材的风景</a> <a class="btn btn-default" href="/article/jripkt" title="单身男月收入4000元 如何实现3年内买车买房2011年10月14日 07:44">单身男月收入4000元 如何实现3年内买车买房2011年10月14日 07:44</a> <a class="btn btn-default" href="/article/jripku" title="震撼人生的101篇散文">震撼人生的101篇散文</a> <a class="btn btn-default" href="/article/jripkv" title="与其强求环境,不如改变自己!">与其强求环境,不如改变自己!</a> <a class="btn btn-default" href="/article/jripkw" title="非常详细精华的资料:孩子生病了怎么办?包含腹泻,感冒,发烧,咳嗽,不吃饭等等">非常详细精华的资料:孩子生病了怎么办?包含腹泻,感冒,发烧,咳嗽,不吃饭等等</a> <a class="btn btn-default" href="/article/jripkx" title="鸡血石原石">鸡血石原石</a> <a class="btn btn-default" href="/article/jripky" title="孜然鸡心的做法">孜然鸡心的做法</a> <a class="btn btn-default" href="/article/jripkz" title="变更和追加被执行人问题之探讨">变更和追加被执行人问题之探讨</a> <a class="btn btn-default" href="/article/jripla" title="家庭养花的资料大全">家庭养花的资料大全</a> <a class="btn btn-default" href="/article/jriplb" title="中国行政区域改革,看你马上属于哪个省?!">中国行政区域改革,看你马上属于哪个省?!</a> <a class="btn btn-default" href="/article/jriplc" title="中国历史上的二十四大发明">中国历史上的二十四大发明</a> <a class="btn btn-default" href="/article/jripld" title="英语学习规律大揭秘">英语学习规律大揭秘</a> <a class="btn btn-default" href="/article/jriple" title="8.如何帮助学生改善学习方法">8.如何帮助学生改善学习方法</a> <a class="btn btn-default" href="/article/jriplf" title="不倒翁原理">不倒翁原理</a> <a class="btn btn-default" href="/article/jriplg" title="领悟毛泽东五大成功秘诀">领悟毛泽东五大成功秘诀</a> <a class="btn btn-default" href="/article/jriplh" title="中国官员级别知多少">中国官员级别知多少</a> <a class="btn btn-default" href="/article/jripli" title="被妖魔化的女强人">被妖魔化的女强人</a> <a class="btn btn-default" href="/article/jriplj" title="蔬菜水果也疯狂--普天同庆 (图片)">蔬菜水果也疯狂--普天同庆 (图片)</a> <a class="btn btn-default" href="/article/jriplk" title="心理学高校排行">心理学高校排行</a> <a class="btn btn-default" href="/article/jripll" title="影响你财务风险的27个问题">影响你财务风险的27个问题</a> </div> </div></div> <div class="copy-right"> <p>九乡新闻网,客观、专业、权威的知识性互动百科全书。</p></div> </footer> <div class="copy-right"> <div class="container"> <div class="col-md-12"> <a href="https://www.q-5.net/" target="_blank">最新新闻</a> <a href="https://www.wacths.com/" target="_blank">沃茨手表网</a> <a href="https://www.csdndoc.com/" target="_blank">CSDN程序文档</a> <a href="https://www.cmjoy.com/" target="_blank">上海旅游网</a> <a href="https://www.smbaike.com/" target="_blank">神马百科</a> <a href="https://www.familylifemag.com/" target="_blank">程序博客</a> <a href="https://www.xjpta.cn/" target="_blank">香蕉皮作业帮</a> <a href="https://www.cidugushi.com/" target="_blank">景德镇新闻网</a> <a href="https://www.uyuyao.com/" target="_blank">余姚信息网</a> <a href="https://www.zuoyewang.cc/" target="_blank">作业帮作业网</a> <a href="https://www.wenda8.com/" target="_blank">互助问答吧</a> <a href="https://www.16lo.com/" target="_blank">16楼社区</a> <a href="https://www.zyebang.com/">解题作业帮</a><a href="https://www.6210k.com/">艺术百科</a><a href="http://www.ld5.top/">亮点网</a><a href="http://www.smbaike.com/">神马百科</a> <a href="https://www.smwenxue.com/">神马文学网</a> <a href="https://www.zuoye5.com/">拍题作业网</a> <a href="https://www.uczhidao.com/">UC知道</a> <a href="https://www.52sanwen.top/">我爱散文网</a> <a href="https://www.bfwang.top/">北方网</a> <a href="https://www.kexue5.top/">科学网</a> <a href="https://www.wenku1.top/">第一文库网</a> <a href="https://www.wszyw.top/">微思作业网</a> <a href="https://www.wz51.top/">我要文章网</a> <a href="https://www.dsp33.cn/">都市新闻网</a><a href="https://www.xofi.com.cn/">西欧教育</a><a href="https://www.xs2xf.cn/">西山新闻网</a><a href="https://www.holoes.com.cn/">好楼房产信息网</a> <a href="https://www.9x1x.cn/">九乡新闻网</a><a href="https://www.vnql.com.cn/">农企信息网</a><a href="https://www.xnvm.com.cn/">仙女们写真照片</a><a href="https://www.lumta.com.cn/">音乐简谱网</a><a href="https://www.miliya.com.cn/">米粒芽</a><a href="https://www.xuexiaodaquan.net/">学校大全网</a><a href="https://www.wz95.cn/">95后网站</a><a href="https://www.ranatlanta.cn/">汝南网</a><a href="https://www.opuo.com.cn/">欧普网</a><a href="https://www.7c4.com.cn/">宝宝故事网</a> <a href="https://www.pp6a.cn/">神马品牌网</a> <a href="https://www.hzxzt.com.cn/">杭州交通信息网/"></a> <a href="https://www.hzsgz.com.cn/">杭州市高中教育平台</a> <a href="https://www.crrcn.cn/">查人人中国名人网</a> <a href="https://www.amzr.com.cn/">爱美之人</a> <a href="https://www.scmpx.com.cn/">上车买票</a> <a href="https://www.azxt.com.cn/">安卓系统之家</a> <a href="https://www.520sdw.cn/">中科新闻网</a> <a href="https://www.218zy.cn/">科学院研究所</a> <a href="https://www.ekowh.cn/">高考快车</a> <a href="https://www.520gsw.cn/">高考志愿帮</a> <a href="https://www.madbar.cn/">大学志愿大全</a> <a href="https://www.oisogo.cn/">高校问答</a> <a href="https://www.togowu.cn/">高考问答</a> <a href="https://www.mdeusa.cn/">中考百科</a> <a href="https://www.520bzw.cn/">大学知道</a> <a href="https://www.9uwang.cn/">久游网</a> </div></div></div> </body> </html>
,为它指定“clsMenuBarItem”类。这样我们就能够识别每一个标题,并将其与菜单相关联,我们使用xsl:attribute/A> 赋予 以字符串“tdMenuMarItem”表征的 ID,我们使用 xsl:value-of 将 TOPICS 元素的 TYPE 属性与其相链接。例如,我们的 XML 元素 将获取以“tdMenuBarItemCSS”作为 ID 的

  
tdMenuBarItem,从而添加一条竖线分隔每一标题。我们通过与 XSL context()end()方法一同使用 xsl:if,以检查当前的 TOPICS 元素是否是最后一个元素,从而避免在最后一个 TOPICS 元素中添加竖线。
    
|