`
qingfengxia
  • 浏览: 89337 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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> 
 
分享到:
评论

相关推荐

    java操纵xml文件的读写,并根据xml生成树型菜单

    本文将详细介绍如何使用Java进行XML文件的读写操作,并基于读取到的数据生成树型菜单,以方便用户浏览和操作。 #### 二、关键概念解释 1. **XML文件**: 一种结构化数据存储的语言,用于标记电子文档。 2. **DOM ...

    ajax动态生成树型菜单

    在本项目中,我们将探讨如何使用Ajax、Struts2框架以及Dojo库来动态地从数据库中获取数据并生成树型菜单。这个功能常见于网站的导航系统,允许用户以层级结构浏览和操作数据。 首先,`Ajax`(Asynchronous ...

    c#实现对XML(OPML)文档动态生成树型菜单及对相应节点的操作维护

    本篇文章将深入探讨如何使用C#来处理OPML文档,实现动态生成树型菜单以及对相应节点的操作维护。 首先,要处理OPML文档,我们需要了解其基本结构。OPML文档由一系列的、和元素组成。其中包含文档元信息,则包含了...

    XML树型菜单

    在本场景中,"XML树型菜单"指的是利用XML数据结构来构建可交互的、层次化的菜单系统。这样的菜单系统具有良好的可扩展性和自定义性,能够根据XML文档中的结构自动构建出树状的导航菜单。 1. **XML基础**: - XML是...

    AJAX+XML实现的树型菜单

    这个“AJAX+XML实现的树型菜单”示例是AJAX技术的一个经典应用,主要用于提升用户体验,通过异步加载数据来构建交互式的树状导航结构。 首先,我们要理解AJAX的基本工作原理。它通过JavaScript创建XMLHttpRequest...

    不用递归实现的无限级树型菜单

    总的来说,这个解决方案通过非递归的迭代方法实现了快速加载的无限级树型菜单,避免了递归可能导致的问题,同时利用XML作为数据交换格式,便于前端和后端的分离。通过合理地组织代码和利用JavaScript库,实现了高效...

    树型菜单集合

    通过解析XML文档,我们可以动态生成树型菜单,使菜单的结构和内容能够灵活地更新和扩展。 JavaScript,作为一种客户端脚本语言,常常被用于实现网页上的交互功能,包括动态创建和操作DOM(Document Object Model)...

    JS树型菜单的控件

    5. **递归**:由于树型菜单的层级特性,通常需要使用递归函数来生成菜单结构。递归函数会遍历每个节点,并对每个子节点调用自身,直到所有子节点都被处理。 6. **状态管理**:为了记住每个节点的展开状态,需要一个...

    非常酷的各种树型菜单

    在这个项目中,JavaScript被用来生成和操作树型菜单。它可以通过DOM(文档对象模型)来动态改变HTML元素,实现菜单的展开、折叠、选中等操作。JavaScript还能处理用户的点击事件,使菜单响应用户的交互。 XML(可...

    JSP+Ajax无刷新树型菜单数据库版

    在本项目中,JSP主要负责生成和展示树型菜单的结构,以及处理与Ajax交互的逻辑。 其次,**Ajax(Asynchronous JavaScript and XML)** 是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。通过异步发送...

    Javascript树型菜单

    8. **数据结构与交互**:在实际实现中,树型菜单的数据结构可能是JSON对象或XML,其中包含节点信息(如ID、文本、子节点数组等)。JavaScript代码负责解析这些数据并构建DOM元素,同时监听事件以响应用户的展开、...

    js+jsp+java+mysql 实现树型菜单

    总的来说,这个项目涉及前端和后端的紧密协作,利用JavaScript的交互性,jsp的动态内容生成,Java的业务逻辑处理,以及MySQL的数据持久化,共同构建了一个可扩展、灵活的树型菜单系统。这样的实现方式既能够充分利用...

    php ajax树型菜单 Tree菜单实例.rar

    在网页设计中,树型菜单是一种常见的用户界面元素,它能有效地组织和展示层次结构的信息。"php ajax树型菜单 Tree菜单实例" 提供了一种使用PHP和AJAX技术实现的动态树形菜单解决方案,特别适合于内容管理系统(CMS)...

    js_树型菜单

    在网页中实现树型菜单,JavaScript扮演了至关重要的角色。树型菜单是一种常见的用户界面元素,它以层级结构展示数据,允许用户通过展开和折叠节点来探索和操作信息。这种菜单常见于网站导航、文件管理系统以及各种...

    无限级可刷新Js树型菜单

    在网页设计中,树型菜单是一种常见的导航结构,它以层级方式展示信息,帮助用户快速理解和导航复杂的网站内容。本文将深入探讨“无限级可刷新Js树型菜单”的相关知识。 首先,无限级树型菜单意味着菜单可以包含任意...

    JSP+Ajax 无刷新树型菜单数据库版

    【JSP+Ajax 无刷新树型菜单数据库版】是一个技术实现方案,它结合了Java Server Pages(JSP)和Asynchronous JavaScript and XML(Ajax)技术,用于创建一个动态、无需页面整体刷新的树型菜单。这个解决方案的核心是...

    ASP.NET树型菜单生成实例.rar

    ASP.NET树型菜单生成是一个常见的Web开发需求,用于构建网站导航或展示层级关系的数据。在这个实例中,"ASP.NET树型菜单生成实例.rar" 文件提供了一个由刘旭和康厚文编写的解决方案,该方案利用ASP.NET 3.0框架,并...

    j2ee+JSP树型菜单组件tigra_menu

    在IT行业中,构建用户友好的Web应用程序是至关重要的,而树型菜单组件是实现这一目标的有效工具之一。本文将深入探讨“j2ee+JSP树型菜单组件tigra_menu”,并围绕其核心概念、功能及应用进行详细介绍。 首先,我们...

    基于ajax的一个无限树型菜单

    本文将深入探讨如何利用Ajax实现一个无限树型菜单,以及相关的核心知识点。 一、Ajax基础 Ajax的核心是通过JavaScript与服务器进行异步通信,它主要包括以下组件: 1. XMLHttpRequest对象:负责与服务器建立HTTP...

Global site tag (gtag.js) - Google Analytics