javascript操作xml生成树形菜单
2010-03-19 10:54
567 查看
实现效果是这样的: 读取XML文档; 采用递归生成无限级的树形菜单; 能够响应鼠标事件,展开与拆叠子级菜单; 首先是生成一个XML文档,我用的是XML Spy的编辑器; <?xml version="1.0" encoding="utf-8"?> <menu> <menu name="明星名人"> <menu name="华人明星" url=""> <menu name="大陆新秀" url=""> <menu name="周笔畅" url="http://post.baidu.com/f?kw=%D6%DC%B1%CA%B3%A9" target="_blank"/> <menu name="周笔畅" url="http://post.baidu.com/f?kw=%D6%DC%B1%CA%B3%A9" target="_blank"/> <menu name="周笔畅" url="http://post.baidu.com/f?kw=%D6%DC%B1%CA%B3%A9" target="_blank"/> </menu> <menu name="香港" url=""> <menu name="成龙" url="http://post.baidu.com/f?kw=%B3%C9%C1%FA" target="_blank"/> </menu> </menu> <menu name="日韩明星" url="Admin_Dep.aspx"> <menu name="金喜善" url="http://post.baidu.com/f?kw=%BD%F0%CF%B2%C9%C6" target="_blank"/> <menu name="金喜善" url="http://post.baidu.com/f?kw=%BD%F0%CF%B2%C9%C6" target="_blank"/> </menu> <menu name="欧美明星" url="#"/> </menu> <menu name="娱乐"> <menu name="快乐男声" url="#" target="_blank"> <menu name="陈楚生" url="http://post.baidu.com/f?kw=%B3%C2%B3%FE%C9%FA" target="_blank"/> <menu name="苏醒" url="http://post.baidu.com/f?kw=%CB%D5%D0%D1"/> </menu> </menu> <menu name="体育"> <menu name="体育俱乐部" url="#"/> </menu> <menu name="军事"> <menu name="战斗机" url="#"/> </menu> </menu> 保存文件名为menu.xml 在HTML中,Javascript代码如下: //建立XMLdom对象,并载入xml,xmlFilePath为xml的文本路径 function CreateXMLDoc(xmlFilePath) { if(window.ActiveXObject) { //获得操作的xml文件的对象 var msXMLdom = new ActiveXObject('Microsoft.XMLDOM'); msXMLdom.async = false; msXMLdom.load(xmlFilePath); return msXMLdom; } else { var oXmlHttp = new XMLHttpRequest() ; oXmlHttp.open( "GET", xmlFilePath, false ) ; oXmlHttp.send(null) ; return oXmlHttp.responseXML; } } //创建对象 var xmlDoc; xmlDoc=CreateXMLDoc("menu.xml"); var rootNode=xmlDoc.lastChild; 然后写一个生成树的函数: //返回树形结构的HTML代码,参数node为节点名,level为当前节点相对于根节点的深度值 function BuilderTree(nodeName,level) { //子菜单项,缩进的像素数 var indent=10; var temp=""; level=level==null ? 0 : level; var nodes=nodeName.childNodes; for(var i=0;i<nodes.length;i++) { //当该节点没下级节点时 if(nodes[i].childNodes.length<1) { //当前菜单的名称 temp+="<div style='margin-left:"+level*indent+"px;cursor:hand;''>"; temp+="<b>-</b> "; //是否打开新窗口 var target=nodes[i].getAttribute("target")==null ? "" : "target='"+nodes[i].getAttribute("target")+"'"; temp+="<a href='"+nodes[i].getAttribute("url")+"' "+target+">"+nodes[i].getAttribute("name")+"</a>"; temp+="</div>"; continue; } //当前菜单的名称 temp+="<div style='margin-left:"+level*indent+"px;cursor:hand;' onclick='show(this)'>"; temp+="<b>+</b> <b>"+nodes[i].getAttribute("name")+"</b>"; temp+="</div>"; //当前菜单的下级内容 temp+="<div style='margin-left:"+indent+"px;cursor:hand;display:none'>"; temp+=BuilderTree(nodes[i],level+1); temp+="</div>"; } return temp; } 在上面的代码中,用到了递归来实现遍历XML中的所有数据; 然后,为了实现鼠标事件,再写一个方法; show函数如下: //操作某个节点的下一节点nextSibling是否显示; function show(obj) { //当前节点的下一节点 var nextNode=obj.nextSibling; //当前节点的头部符号节点,就是菜单项前面+、-号 var subNode=obj.firstChild.firstChild; if(nextNode.nodeType==1) { with(eval(nextNode)) { if(style.display=="") { style.display="none"; subNode.nodeValue="+"; }else { style.display=""; subNode.nodeValue="-"; } } } } 因为每个菜单所属的子级内容与它自身并不在一个div中,这里仅传了this就是自身,为了操作它仅随后面的一个div,用到了nextSibling方法;并用 var subNode=obj.firstChild.firstChild;找到每个菜单头部的加减号用于展开或拆叠时显示; 看完上面这些,最终是要输出的,在HTML页面的body中,写入: <div id="TreeMenu"></div> 然后head中,写入 <script type="text/javascript" language="javascript" defer="defer"> //将处理过的XML数据,插入到页面的相应位置 var d=document.getElementById("TreeMenu"); d.innerHTML=BuilderTree(rootNode); </script> 这样就OK了。 源文件: http://www.cnblogs.com/Files/2hill/TreeMenu.rar 附一个《javascript操作xml生成下拉菜单》 http://hi.baidu.com/2hill/blog/item/1c234a952fb53f0c7bf4809c.html |
相关文章推荐
- javascript操作xml生成树形菜单
- javascript操作xml生成树形菜单
- 采用JavaScript+XML实现具有树形菜单功能的论坛侧边导航栏
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- javascript动态生成树形菜单的方法
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 动态生成javascript树形菜单
- JavaScript动态生成树形菜单创建表格
- javascript动态生成树形菜单的方法
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- javascript解析XML生成树形结构
- javascript解析XML生成树形结构
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- JavaScript生成树形菜单(递归算法)
- C# 中读取xml 并 生成菜单项 树形菜单
- javascript解析XML生成树形结构(兼容Firefox,IE9)
- javascript、CSS、XML动太生成树菜单
- 简单的XML文件操作(xml文件生成,节点追加、遍历、修改、删除)
- 11个Javascript树形菜单
- javascript操作xml(增删改查)例子代码hta版