[JavaScritp]构建简单的json树形菜单

json结构:

var Menu = [{
            tit:"一级菜单",
            submenu:[{
                tit:"二级菜单",
                url:"",
                func:function(){
                    alert(‘what do you want to do?‘);
                }
            },{
                tit:"二级菜单",
                func:function(){
                    alert(‘do what?‘);
                },
                submenu:[{
                    tit:"三级菜单",
                    url:"",
                    submenu:[{
                        tit:"四级菜单",
                        url:""
                    },{
                        tit:"四级菜单",
                        url:""
                    }]
                },{
                    tit:"三级菜单",
                    url:""
                }]
            }]
        },{
            tit:"一级菜单",
            submenu:[{
                tit:"二级菜单",
                url:""
            },{
                tit:"二级菜单",
                submenu:[{
                    tit:"三级菜单",
                    url:""
                },{
                    tit:"三级菜单",
                    url:""
                }]
            }]
        }];

构建菜单处理函数

/*
     * @构建树形菜单
     * @arrJson:json数据
     * @container:菜单容器
     */
    function menuTree(jsonArr,container,treeId){
        var oText,oUrl;
        var oUl = document.createElement(‘ul‘);
        for(var i = 0 ;i < jsonArr.length; i++){
            var oLi = document.createElement(‘li‘);
            oUrl = jsonArr[i].url || "javascript:void(0)";
            oText = jsonArr[i].tit;
            if(jsonArr[i].submenu){
                 oLi.innerHTML =‘<a href="‘+oUrl+‘">‘+oText+‘</a>‘;
                 menuTree(jsonArr[i].submenu,oLi);//递归构建子菜单
            }else{
                oLi.innerHTML = ‘<a href="‘+oUrl+‘">‘+oText+‘</a>‘;
            }
            //自定义函数
            if(typeof jsonArr[i].func =="function"){
                oLi.getElementsByTagName(‘a‘)[0].func = jsonArr[i].func;
                oLi.getElementsByTagName(‘a‘)[0].onclick=function(){
                    this.func();
                }
            }
            oUl.appendChild(oLi);
        }
        //最外层容器事件委托
        if(treeId){
            document.getElementById(treeId).onclick = function(e){
                var event = e || window.event;
                var target = event.target||event.srcElement;
                var next = target.nextSibling;
                if(target.nodeName.toLowerCase() == "a"){
                    if(next){
                        if(next.style.display=="" || next.style.display=="block"){
                            next.style.display="none";
                        }else{
                            next.style.display="block";
                        }
                    }
                }
            }
        }
        container.appendChild(oUl);
    }

完整demo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>json树形菜单</title>
</head>
<body>
    <h2>构建json树形菜单</h2>
    <div class="tree" id="tree"></div>
    <script type="text/javascript">
    window.onload = function(){
        var Menu = [{
            tit:"一级菜单",
            submenu:[{
                tit:"二级菜单",
                url:"",
                func:function(){
                    alert(‘what do you want to do?‘);
                }
            },{
                tit:"二级菜单",
                func:function(){
                    alert(‘do what?‘);
                },
                submenu:[{
                    tit:"三级菜单",
                    url:"",
                    submenu:[{
                        tit:"四级菜单",
                        url:""
                    },{
                        tit:"四级菜单",
                        url:""
                    }]
                },{
                    tit:"三级菜单",
                    url:""
                }]
            }]
        },{
            tit:"一级菜单",
            submenu:[{
                tit:"二级菜单",
                url:""
            },{
                tit:"二级菜单",
                submenu:[{
                    tit:"三级菜单",
                    url:""
                },{
                    tit:"三级菜单",
                    url:""
                }]
            }]
        }];
    //构建菜单
     menuTree(Menu,document.getElementById(‘tree‘),‘tree‘);
    }

    /*
     * @构建树形菜单
     * @arrJson:json数据
     * @container:菜单容器
     */
    function menuTree(jsonArr,container,treeId){
        var oText,oUrl;
        var oUl = document.createElement(‘ul‘);
        for(var i = 0 ;i < jsonArr.length; i++){
            var oLi = document.createElement(‘li‘);
            oUrl = jsonArr[i].url || "javascript:void(0)";
            oText = jsonArr[i].tit;
            if(jsonArr[i].submenu){
                 oLi.innerHTML =‘<a href="‘+oUrl+‘">‘+oText+‘</a>‘;
                 menuTree(jsonArr[i].submenu,oLi);//递归构建子菜单
            }else{
                oLi.innerHTML = ‘<a href="‘+oUrl+‘">‘+oText+‘</a>‘;
            }
            //自定义函数
            if(typeof jsonArr[i].func =="function"){
                oLi.getElementsByTagName(‘a‘)[0].func = jsonArr[i].func;
                oLi.getElementsByTagName(‘a‘)[0].onclick=function(){
                    this.func();
                }
            }
            oUl.appendChild(oLi);
        }
        //最外层容器事件委托
        if(treeId){
            document.getElementById(treeId).onclick = function(e){
                var event = e || window.event;
                var target = event.target||event.srcElement;
                var next = target.nextSibling;
                if(target.nodeName.toLowerCase() == "a"){
                    if(next){
                        if(next.style.display=="" || next.style.display=="block"){
                            next.style.display="none";
                        }else{
                            next.style.display="block";
                        }
                    }
                }
            }
        }
        container.appendChild(oUl);
    }
    </script>
</body>
</html>

时间: 2024-08-05 22:55:15

[JavaScritp]构建简单的json树形菜单的相关文章

树形菜单

简单的一个树形菜单 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>树形菜单</title> <style> body { font: 12px/20px 宋体; } img { vertical-align: center; border: none; } a { text-decorati

利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)

一.问题研究的背景和意义 目前在Web应用程序开发领域,Ext JS框架已经逐渐被广泛使用,它是富客户端开发中出类拔萃的框架之一.在Ext的UI控件中,树形控件无疑是最为常用的控件之一,它用来实现树形结构的菜单.TreeNode用来实现静态的树形菜单,AsyncTreeNode用来实现动态的异步加载树形菜单,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形菜单节点.动态生成树有两种思路:一种是一次性生成全部树节点,另一种是逐级加载树节点(利用AJAX,每次点击节点时查询下

使用zTree插件构建树形菜单

zTree下载:https://github.com/zTree/zTree_v3 目录: 就我看来,zTree较为实用的有以下几点: zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 支持 JSON 数据 支持静态 和 Ajax 异步加载节点数据 支持任意更换皮肤 / 自定义图标 支持极其灵活的 checkbox 或 radio 选择功能 提供多种事件响应回调 灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可

Java构建树形菜单

构建树形菜单 效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> ch

jquery,tree无限级树形菜单+简单实用案例

jquery,tree无限级树形菜单+简单实用案例 我在项目中用到产品类别的树形.各种地方都要用. 我就封装起来,方便以后调用. 记录下来,希望给新手们提供帮助.要记得导入jquery.js  tree.js 哦 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri=&quo

ExtJS4.2 根据数据库记录构建树形菜单

背景:最近用ExtJS4.2做一个系统,需要在前端展示资源菜单,为树形结构,该树形结构是从数据库动态加载的. ExtJS的树形结构大致有两种情况: 1.静态树形结构,此处不多说,看API就能简单明白: 2.动态加载,ExtJS的特性是根据父节点ID来查询子节点,从而动态更新树形菜单,这里有一个缺陷,或许是我孤陋寡闻不知道,那就是无法根据数据库节点信息自动构建成为一棵树,记得zTree插件就有这个功能. 那么,我希望能够根据数据库树节点信息自动的构建成一棵树,就需要自己去写个小算法在后台拼接成Ex

EasyUI+zTree实现简单的树形菜单切换

使用easyui_ztree实现简单的树形菜单切换效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!--导入juery核心配置文件--> <script type="text/javascript" src="../js/jquery-1.8.3.js"></script> <!--导入eas

为您的Web项目构建一个简单的JSON控制器

摘要:无论您的项目使用的是哪种数据库后端,JavaScript Object Notation (JSON) 控制器都能简化您的开发工作.本文将带领您建立一个能够增强您的下一个开发项目的非常基础的 JSON 控制器. 您的下一个 PHP/MySQL 项目可能与您最近完成的十几个项目类似:建立一个 MySQL 数据库,创建包含 HTML 的 PHP 视图,根据需要添加 JavaScript 代码和 CSS 文件,连接到数据库,从数据库提取内容来填充视图,等等.如果您熟悉 web 开发,您一定知道分

在AJAX里 使用【 JSON 】 返回数据类型 实现简单的下拉菜单数据

在AJAX里 使用JSON返回数据类型 实现简单的下拉菜单数据 <!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> &l