xml 代码
- <!--
- = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *
- * 作 者: 我本有心
- = QQ: 381584252
- * E-Mail: hztgcl1986@163.com
- = 转载请注明出处及作者!
- * 版权所有,侵权必究!!!
- =
- * http://www.8848so.com,人物搜索,8848So
- = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *
- -->
- <?xml version='1.0' encoding='utf-8'?>
- <menu>
- <rootLevel id='2'>
- <selfName>美国</selfName>
- </rootLevel>
- <rootLevel id='1'>
- <selfName>中国</selfName>
- <level id='4'>
- <selfName>河南</selfName>
- <parentID>1</parentID>
- </level>
- <level id='3'>
- <selfName>山东</selfName>
- <parentID>1</parentID>
- <level id='6'>
- <selfName>菏泽</selfName>
- <parentID>3</parentID>
- <level id='8'>
- <selfName>曹县</selfName>
- <parentID>6</parentID>
- </level>
- <level id='7'>
- <selfName>东明</selfName>
- <parentID>6</parentID>
- </level>
- </level>
- <level id='5'>
- <selfName>济南</selfName>
- <parentID>3</parentID>
- </level>
- </level>
- </rootLevel>
- </menu>
javascript 树型菜单
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>JavaScript + XML树型菜单</title>
- <style type="text/css">
- li.plus
- {
- list-style-type:none;
- list-style-image:url(Images/Plus.png); /*展开时图片,如"+"*/
- cursor:hand;
- }
- li.minus
- {
- list-style-type:none;
- list-style-image:url(Images/Minus.png); /*折叠时图片,如"-"*/
- cursor:hand;
- }
- li.item
- {
- list-style-type:none;
- list-style-image:url(Images/Item.png); /*无子项目时图片*/
- cursor:hand;
- }
- </style>
- </head>
- <body>
- <ul id="tree">
- <li>树</li>
- </ul>
- <!--
- = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *
- * 作 者: 我本有心
- = QQ: 381584252
- * E-Mail: hztgcl1986@163.com
- = 转载请注明出处及作者!
- * 版权所有,侵权必究!!!
- =
- * http://www.8848so.com,人物搜索,8848So
- = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *
- -->
- <script language="javascript" type="text/javascript">
- treeMenu("tree"); //树
- function createXMLDom() //创建XMLDOM对象函数,跨浏览器解决方案
- {
- var xmlDom;
- if (window.ActiveXObject) //IE
- {
- xmlDom = new ActiveXObject("Microsoft.XMLDOM");
- xmlDom.async = false;
- xmlDom.load("/XML/InfoClass.xml");
- if (xmlDom.parseError.errorCode != 0)
- {
- window.alert("XML文件加载错误. errorCode:" + xmlDom.parseError.errorCode + " reason:" + xmlDom.parseError.reason);
- return false;
- }
- else
- {return xmlDom;}
- }
- else if (document.implementation && document.implementation.createDocument) //FireFox
- {
- xmlDom = document.implementation.createDocument("","",null);
- xmlDom.async = false;
- xmlDom.load("/XML/InfoClass.xml");
- return xmlDom;
- }
- else
- {
- window.alert("不支持XMLDOM对象");
- return false;
- }
- }
- function treeMenu(ulID)
- {
- var xmlDom = createXMLDom(); //创建XMLDOM对象
- var menu = xmlDom.documentElement; //xml文档根节点
- var rootLevels = menu.getElementsByTagName("rootLevel"); //一级分类集合
- var ul = document.getElementById(ulID);
- for (var i=0;i<rootLevels.length;i++) //循环显示一级分类
- {
- var selfID = rootLevels[i].getAttribute("id");
- var selfName = rootLevels[i].getElementsByTagName("selfName")[0].firstChild.nodeValue;
- var li = document.createElement("li");
- li.innerHTML = selfName;
- li.id = selfID;
- var levels = rootLevels[i].getElementsByTagName("level"); //集合
- if (levels.length > 0) //有子类
- {
- li.className = "plus";
- li.onclick = function () {liClick(this,this.id,xmlDom);} //单击事件
- }
- else //无子类
- {
- li.className = "item";
- }
- ul.appendChild(li);
- }
- }
- function liClick(li,id,xmlDom,event)
- {
- var childUL = li.getElementsByTagName("ul"); //ul集合
- if (childUL.length > 0)//折叠
- {closeChild(li,childUL);}
- else //展开
- {openChild(li,id,xmlDom);}
- cancelBuble(event); //plus停止事件冒泡
- }
- function openChild(li,id,xmlDom) //展开函数
- {
- li.className = "minus"; //折叠图标
- var levels = xmlDom.documentElement.getElementsByTagName("level"); //level集合
- var ul = document.createElement("ul");
- for (var m=0;m<levels.length;m++)
- {
- var selfID = levels[m].getAttribute("id");
- var selfName = levels[m].getElementsByTagName("selfName")[0].firstChild.nodeValue;
- var parentID = levels[m].getElementsByTagName("parentID")[0].firstChild.nodeValue;
- if (id == parentID) //属于id子类
- {
- var ulli = document.createElement("li");
- ulli.innerHTML = selfName;
- ulli.id = selfID;
- var childLevels = levels[m].getElementsByTagName("level"); //集合
- if (childLevels.length > 0) //有子类
- {
- ulli.className = "plus";
- /*停止事件冒泡,跨浏览器解决方案 Start*/
- if (window.ActiveXObject) //IE
- {ulli.onclick = function () {liClick(this,this.id,xmlDom,event);}} //单击事件
- else //FireFox
- {ulli.onclick = function (event) {liClick(this,this.id,xmlDom,event);}} //单击
- /*停止事件冒泡,跨浏览器解决方案 End*/
- }
- else //无子类
- {
- ulli.className = "item";
- /*停止事件冒泡,跨浏览器解决方案 Start*/
- if (window.ActiveXObject) //IE
- {ulli.onclick = function () {cancelBuble(event);}} //item停止事件冒泡
- else //FireFox
- {ulli.onclick = function (event) {cancelBuble(event);}} //item停止事件冒泡
- /*停止事件冒泡,跨浏览器解决方案 End*/
- }
- ul.appendChild(ulli);
- }
- }
- li.appendChild(ul);
- }
- function closeChild(li,childUL) //折叠函数
- {
- li.className = "plus"; //展开图标
- for (var j=0;j<childUL.length;j++) //循环删除ul,ul可能有子ul、li孙ul、li
- {childUL[j].parentNode.removeChild(childUL[j]);}
- }
- function cancelBuble(domEvent) //停止事件冒泡函数,跨浏览器解决方案
- {
- if (window.ActiveXObject) //IE
- {domEvent.cancelBubble = true;}
- else //FireFox
- {domEvent.stopPropagation();}
- }
- </script>
- </body>
- </html>