XML生成树型菜单

XML生成树型菜单

Xml代码 复制代码
  1. <!--   
  2.   
  3. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  4. *    作 者:  我本有心     
  5. =    QQ:     381584252     
  6. *     E-Mail: hztgcl1986@163.com    
  7. =     转载请注明出处及作者!     
  8. *     版权所有,侵权必究!!!     
  9. =     
  10. *    http://www.8848so.com,人物搜索,8848So         
  11. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  12. -->    
  13. <?xml version='1.0' encoding='utf-8'?>    
  14. <menu>    
  15. <rootLevel id='2'>    
  16. <selfName>美国</selfName>    
  17. </rootLevel>    
  18. <rootLevel id='1'>    
  19. <selfName>中国</selfName>    
  20. <level id='4'>    
  21. <selfName>河南</selfName>    
  22. <parentID>1</parentID>    
  23. </level>    
  24. <level id='3'>    
  25. <selfName>山东</selfName>    
  26. <parentID>1</parentID>    
  27. <level id='6'>    
  28. <selfName>菏泽</selfName>    
  29. <parentID>3</parentID>    
  30. <level id='8'>    
  31. <selfName>曹县</selfName>    
  32. <parentID>6</parentID>    
  33. </level>    
  34. <level id='7'>    
  35. <selfName>东明</selfName>    
  36. <parentID>6</parentID>    
  37. </level>    
  38. </level>    
  39. <level id='5'>    
  40. <selfName>济南</selfName>    
  41. <parentID>3</parentID>    
  42. </level>    
  43. </level>    
  44. </rootLevel>    
  45. </menu>    
<!-- 

= * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *    
*    作 者:  我本有心   
=    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 树型菜单
Html代码 复制代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    
  2. <html xmlns="http://www.w3.org/1999/xhtml">    
  3. <head>    
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />    
  5. <title>JavaScript + XML树型菜单</title>    
  6. <style type="text/css">    
  7. li.plus     
  8. {     
  9.     list-style-type:none;     
  10.     list-style-image:url(Images/Plus.png); /*展开时图片,如"+"*/     
  11.     cursor:hand;     
  12. }     
  13.     
  14. li.minus     
  15. {     
  16.     list-style-type:none;     
  17.     list-style-image:url(Images/Minus.png); /*折叠时图片,如"-"*/     
  18.     cursor:hand;     
  19. }     
  20.     
  21. li.item     
  22. {     
  23.     list-style-type:none;     
  24.     list-style-image:url(Images/Item.png); /*无子项目时图片*/     
  25.     cursor:hand;     
  26. }     
  27. </style>    
  28. </head>    
  29.     
  30. <body>    
  31. <ul id="tree">    
  32.     <li>树</li>    
  33. </ul>    
  34. <!--    
  35. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  36. *    作 者:  我本有心     
  37. =    QQ:     381584252     
  38. *     E-Mail: hztgcl1986@163.com    
  39. =     转载请注明出处及作者!     
  40. *     版权所有,侵权必究!!!     
  41. =     
  42. *    http://www.8848so.com,人物搜索,8848So         
  43. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  44. -->    
  45. <script language="javascript" type="text/javascript">    
  46. treeMenu("tree"); //树     
  47.     
  48. function createXMLDom() //创建XMLDOM对象函数,跨浏览器解决方案     
  49. {     
  50.     var xmlDom;     
  51.          
  52.     if (window.ActiveXObject) //IE     
  53.     {     
  54.         xmlDom = new ActiveXObject("Microsoft.XMLDOM");     
  55.         xmlDom.async = false;     
  56.         xmlDom.load("/XML/InfoClass.xml");     
  57.         if (xmlDom.parseError.errorCode != 0)     
  58.         {     
  59.             window.alert("XML文件加载错误. errorCode:" + xmlDom.parseError.errorCode + " reason:" + xmlDom.parseError.reason);     
  60.             return false;     
  61.         }     
  62.         else     
  63.         {return xmlDom;}     
  64.     }     
  65.     else if (document.implementation && document.implementation.createDocument) //FireFox     
  66.     {     
  67.         xmlDom = document.implementation.createDocument("","",null);     
  68.         xmlDom.async = false;     
  69.         xmlDom.load("/XML/InfoClass.xml");     
  70.         return xmlDom;     
  71.     }     
  72.     else     
  73.     {     
  74.         window.alert("不支持XMLDOM对象");     
  75.         return false;     
  76.     }     
  77. }     
  78.     
  79. function treeMenu(ulID)     
  80. {     
  81.     var xmlDom = createXMLDom(); //创建XMLDOM对象     
  82.     var menu = xmlDom.documentElement; //xml文档根节点     
  83.     var rootLevels = menu.getElementsByTagName("rootLevel"); //一级分类集合     
  84.              
  85.     var ul = document.getElementById(ulID);     
  86.     for (var i=0;i<rootLevels.length;i++) //循环显示一级分类     
  87.     {     
  88.         var selfID = rootLevels[i].getAttribute("id");     
  89.         var selfName = rootLevels[i].getElementsByTagName("selfName")[0].firstChild.nodeValue;     
  90.         var li = document.createElement("li");     
  91.         li.innerHTML = selfName;     
  92.         li.id = selfID;     
  93.                  
  94.         var levels = rootLevels[i].getElementsByTagName("level"); //集合     
  95.         if (levels.length > 0) //有子类     
  96.         {     
  97.             li.className = "plus";     
  98.             li.onclick = function () {liClick(this,this.id,xmlDom);} //单击事件     
  99.         }     
  100.         else //无子类     
  101.         {     
  102.             li.className = "item";     
  103.         }     
  104.         ul.appendChild(li);     
  105.     }     
  106. }     
  107.     
  108. function liClick(li,id,xmlDom,event)     
  109. {     
  110.     var childUL = li.getElementsByTagName("ul"); //ul集合     
  111.          
  112.     if (childUL.length > 0)//折叠     
  113.     {closeChild(li,childUL);}     
  114.     else //展开     
  115.     {openChild(li,id,xmlDom);}     
  116.          
  117.     cancelBuble(event); //plus停止事件冒泡     
  118. }     
  119.     
  120. function openChild(li,id,xmlDom) //展开函数     
  121. {     
  122.     li.className = "minus"; //折叠图标     
  123.          
  124.     var levels = xmlDom.documentElement.getElementsByTagName("level"); //level集合     
  125.     var ul = document.createElement("ul");     
  126.     for (var m=0;m<levels.length;m++)     
  127.     {     
  128.         var selfID = levels[m].getAttribute("id");     
  129.         var selfName = levels[m].getElementsByTagName("selfName")[0].firstChild.nodeValue;     
  130.         var parentID = levels[m].getElementsByTagName("parentID")[0].firstChild.nodeValue;     
  131.              
  132.         if (id == parentID) //属于id子类     
  133.         {     
  134.             var ulli = document.createElement("li");     
  135.             ulli.innerHTML = selfName;     
  136.             ulli.id = selfID;     
  137.                  
  138.             var childLevels = levels[m].getElementsByTagName("level"); //集合     
  139.             if (childLevels.length > 0) //有子类     
  140.             {     
  141.                 ulli.className = "plus";     
  142.                      
  143.                 /*停止事件冒泡,跨浏览器解决方案 Start*/     
  144.                 if (window.ActiveXObject) //IE     
  145.                 {ulli.onclick = function () {liClick(this,this.id,xmlDom,event);}} //单击事件     
  146.                 else //FireFox     
  147.                 {ulli.onclick = function (event) {liClick(this,this.id,xmlDom,event);}} //单击     
  148.                 /*停止事件冒泡,跨浏览器解决方案 End*/     
  149.             }     
  150.             else //无子类     
  151.             {     
  152.                 ulli.className = "item";     
  153.                      
  154.                 /*停止事件冒泡,跨浏览器解决方案 Start*/     
  155.                 if (window.ActiveXObject) //IE     
  156.                 {ulli.onclick = function () {cancelBuble(event);}} //item停止事件冒泡     
  157.                 else //FireFox     
  158.                 {ulli.onclick = function (event) {cancelBuble(event);}} //item停止事件冒泡     
  159.                 /*停止事件冒泡,跨浏览器解决方案 End*/     
  160.             }     
  161.                  
  162.             ul.appendChild(ulli);     
  163.         }     
  164.              
  165.     }     
  166.          
  167.     li.appendChild(ul);     
  168. }     
  169.     
  170. function closeChild(li,childUL) //折叠函数     
  171. {     
  172.     li.className = "plus"; //展开图标     
  173.          
  174.     for (var j=0;j<childUL.length;j++) //循环删除ul,ul可能有子ul、li孙ul、li     
  175.     {childUL[j].parentNode.removeChild(childUL[j]);}     
  176. }     
  177.     
  178. function cancelBuble(domEvent) //停止事件冒泡函数,跨浏览器解决方案     
  179. {     
  180.     if (window.ActiveXObject) //IE     
  181.     {domEvent.cancelBubble = true;}     
  182.     else //FireFox     
  183.     {domEvent.stopPropagation();}     
  184. }     
  185. </script>    
  186. </body>    
  187. </html>  
Xml代码 复制代码
  1. <!--   
  2.   
  3. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  4. *    作 者:  我本有心     
  5. =    QQ:     381584252     
  6. *     E-Mail: hztgcl1986@163.com    
  7. =     转载请注明出处及作者!     
  8. *     版权所有,侵权必究!!!     
  9. =     
  10. *    http://www.8848so.com,人物搜索,8848So         
  11. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  12. -->    
  13. <?xml version='1.0' encoding='utf-8'?>    
  14. <menu>    
  15. <rootLevel id='2'>    
  16. <selfName>美国</selfName>    
  17. </rootLevel>    
  18. <rootLevel id='1'>    
  19. <selfName>中国</selfName>    
  20. <level id='4'>    
  21. <selfName>河南</selfName>    
  22. <parentID>1</parentID>    
  23. </level>    
  24. <level id='3'>    
  25. <selfName>山东</selfName>    
  26. <parentID>1</parentID>    
  27. <level id='6'>    
  28. <selfName>菏泽</selfName>    
  29. <parentID>3</parentID>    
  30. <level id='8'>    
  31. <selfName>曹县</selfName>    
  32. <parentID>6</parentID>    
  33. </level>    
  34. <level id='7'>    
  35. <selfName>东明</selfName>    
  36. <parentID>6</parentID>    
  37. </level>    
  38. </level>    
  39. <level id='5'>    
  40. <selfName>济南</selfName>    
  41. <parentID>3</parentID>    
  42. </level>    
  43. </level>    
  44. </rootLevel>    
  45. </menu>    
<!-- 

= * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *    
*    作 者:  我本有心   
=    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 树型菜单
Html代码 复制代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    
  2. <html xmlns="http://www.w3.org/1999/xhtml">    
  3. <head>    
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />    
  5. <title>JavaScript + XML树型菜单</title>    
  6. <style type="text/css">    
  7. li.plus     
  8. {     
  9.     list-style-type:none;     
  10.     list-style-image:url(Images/Plus.png); /*展开时图片,如"+"*/     
  11.     cursor:hand;     
  12. }     
  13.     
  14. li.minus     
  15. {     
  16.     list-style-type:none;     
  17.     list-style-image:url(Images/Minus.png); /*折叠时图片,如"-"*/     
  18.     cursor:hand;     
  19. }     
  20.     
  21. li.item     
  22. {     
  23.     list-style-type:none;     
  24.     list-style-image:url(Images/Item.png); /*无子项目时图片*/     
  25.     cursor:hand;     
  26. }     
  27. </style>    
  28. </head>    
  29.     
  30. <body>    
  31. <ul id="tree">    
  32.     <li>树</li>    
  33. </ul>    
  34. <!--    
  35. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  36. *    作 者:  我本有心     
  37. =    QQ:     381584252     
  38. *     E-Mail: hztgcl1986@163.com    
  39. =     转载请注明出处及作者!     
  40. *     版权所有,侵权必究!!!     
  41. =     
  42. *    http://www.8848so.com,人物搜索,8848So         
  43. = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = * = = *      
  44. -->    
  45. <script language="javascript" type="text/javascript">    
  46. treeMenu("tree"); //树     
  47.     
  48. function createXMLDom() //创建XMLDOM对象函数,跨浏览器解决方案     
  49. {     
  50.     var xmlDom;     
  51.          
  52.     if (window.ActiveXObject) //IE     
  53.     {     
  54.         xmlDom = new ActiveXObject("Microsoft.XMLDOM");     
  55.         xmlDom.async = false;     
  56.         xmlDom.load("/XML/InfoClass.xml");     
  57.         if (xmlDom.parseError.errorCode != 0)     
  58.         {     
  59.             window.alert("XML文件加载错误. errorCode:" + xmlDom.parseError.errorCode + " reason:" + xmlDom.parseError.reason);     
  60.             return false;     
  61.         }     
  62.         else     
  63.         {return xmlDom;}     
  64.     }     
  65.     else if (document.implementation && document.implementation.createDocument) //FireFox     
  66.     {     
  67.         xmlDom = document.implementation.createDocument("","",null);     
  68.         xmlDom.async = false;     
  69.         xmlDom.load("/XML/InfoClass.xml");     
  70.         return xmlDom;     
  71.     }     
  72.     else     
  73.     {     
  74.         window.alert("不支持XMLDOM对象");     
  75.         return false;     
  76.     }     
  77. }     
  78.     
  79. function treeMenu(ulID)     
  80. {     
  81.     var xmlDom = createXMLDom(); //创建XMLDOM对象     
  82.     var menu = xmlDom.documentElement; //xml文档根节点     
  83.     var rootLevels = menu.getElementsByTagName("rootLevel"); //一级分类集合     
  84.              
  85.     var ul = document.getElementById(ulID);     
  86.     for (var i=0;i<rootLevels.length;i++) //循环显示一级分类     
  87.     {     
  88.         var selfID = rootLevels[i].getAttribute("id");     
  89.         var selfName = rootLevels[i].getElementsByTagName("selfName")[0].firstChild.nodeValue;     
  90.         var li = document.createElement("li");     
  91.         li.innerHTML = selfName;     
  92.         li.id = selfID;     
  93.                  
  94.         var levels = rootLevels[i].getElementsByTagName("level"); //集合     
  95.         if (levels.length > 0) //有子类     
  96.         {     
  97.             li.className = "plus";     
  98.             li.onclick = function () {liClick(this,this.id,xmlDom);} //单击事件     
  99.         }     
  100.         else //无子类     
  101.         {     
  102.             li.className = "item";     
  103.         }     
  104.         ul.appendChild(li);     
  105.     }     
  106. }     
  107.     
  108. function liClick(li,id,xmlDom,event)     
  109. {     
  110.     var childUL = li.getElementsByTagName("ul"); //ul集合     
  111.          
  112.     if (childUL.length > 0)//折叠     
  113.     {closeChild(li,childUL);}     
  114.     else //展开     
  115.     {openChild(li,id,xmlDom);}     
  116.          
  117.     cancelBuble(event); //plus停止事件冒泡     
  118. }     
  119.     
  120. function openChild(li,id,xmlDom) //展开函数     
  121. {     
  122.     li.className = "minus"; //折叠图标     
  123.          
  124.     var levels = xmlDom.documentElement.getElementsByTagName("level"); //level集合     
  125.     var ul = document.createElement("ul");     
  126.     for (var m=0;m<levels.length;m++)     
  127.     {     
  128.         var selfID = levels[m].getAttribute("id");     
  129.         var selfName = levels[m].getElementsByTagName("selfName")[0].firstChild.nodeValue;     
  130.         var parentID = levels[m].getElementsByTagName("parentID")[0].firstChild.nodeValue;     
  131.              
  132.         if (id == parentID) //属于id子类     
  133.         {     
  134.             var ulli = document.createElement("li");     
  135.             ulli.innerHTML = selfName;     
  136.             ulli.id = selfID;     
  137.                  
  138.             var childLevels = levels[m].getElementsByTagName("level"); //集合     
  139.             if (childLevels.length > 0) //有子类     
  140.             {     
  141.                 ulli.className = "plus";     
  142.                      
  143.                 /*停止事件冒泡,跨浏览器解决方案 Start*/     
  144.                 if (window.ActiveXObject) //IE     
  145.                 {ulli.onclick = function () {liClick(this,this.id,xmlDom,event);}} //单击事件     
  146.                 else //FireFox     
  147.                 {ulli.onclick = function (event) {liClick(this,this.id,xmlDom,event);}} //单击     
  148.                 /*停止事件冒泡,跨浏览器解决方案 End*/     
  149.             }     
  150.             else //无子类     
  151.             {     
  152.                 ulli.className = "item";     
  153.                      
  154.                 /*停止事件冒泡,跨浏览器解决方案 Start*/     
  155.                 if (window.ActiveXObject) //IE     
  156.                 {ulli.onclick = function () {cancelBuble(event);}} //item停止事件冒泡     
  157.                 else //FireFox     
  158.                 {ulli.onclick = function (event) {cancelBuble(event);}} //item停止事件冒泡     
  159.                 /*停止事件冒泡,跨浏览器解决方案 End*/     
  160.             }     
  161.                  
  162.             ul.appendChild(ulli);     
  163.         }     
  164.              
  165.     }     
  166.          
  167.     li.appendChild(ul);     
  168. }     
  169.     
  170. function closeChild(li,childUL) //折叠函数     
  171. {     
  172.     li.className = "plus"; //展开图标     
  173.          
  174.     for (var j=0;j<childUL.length;j++) //循环删除ul,ul可能有子ul、li孙ul、li     
  175.     {childUL[j].parentNode.removeChild(childUL[j]);}     
  176. }     
  177.     
  178. function cancelBuble(domEvent) //停止事件冒泡函数,跨浏览器解决方案     
  179. {     
  180.     if (window.ActiveXObject) //IE     
  181.     {domEvent.cancelBubble = true;}     
  182.     else //FireFox     
  183.     {domEvent.stopPropagation();}     
  184. }     
  185. </script>    
  186. </body>    
  187. </html>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值