javascript - 如何从 json 文件创建菜单

标签 javascript jquery html css json

<分区>

我有一个任务是从 json 对象创建一个水平菜单。我的 json 文件是

var data = [
{

    "menu":[
        {
            "MenuId":1,
            "MenuName":"Home",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":1,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":2,
            "MenuName":"New Transaction",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":2,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":3,
            "MenuName":"Portfolio",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":3,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":4,
            "MenuName":"Analytics",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":4,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":5,
            "MenuName":"Instructions",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":5,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":6,
            "MenuName":"Data Upload",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":6,
            "ModuleId":null,
            "Menus":{
            }
        },
        {
            "MenuId":7,
            "MenuName":"Administration",
            "MenuLink":null,
            "Action":null,
            "Controller":null,
            "ParentID":null,
            "SortOrder":7,
            "ModuleId":null,
            "Menus":[
                {
                    "MenuId":8,
                    "MenuName":"Masters",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":7,
                    "SortOrder":1,
                    "ModuleId":null,
                    "Menus":[
                        {
                            "MenuId":10,
                            "MenuName":"Currency",
                            "MenuLink":"/Currencies/Index",
                            "Action":"Index",
                            "Controller":"Currencies",
                            "ParentID":8,
                            "SortOrder":1,
                            "ModuleId":null,
                            "Menus":{
                            }
                        },
                        {
                            "MenuId":11,
                            "MenuName":"Country",
                            "MenuLink":"/Countries/Index",
                            "Action":"Index",
                            "Controller":"Countries",
                            "ParentID":8,
                            "SortOrder":2,
                            "ModuleId":null,
                            "Menus":{
                            }
                        }
                    ]
                },
                {
                    "MenuId":9,
                    "MenuName":"User Management",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":7,
                    "SortOrder":2,
                    "ModuleId":null,
                    "Menus":{
                    }
                }
            ]
        }
    ]

}
];

我如何从这个 json 文件创建水平菜单?请帮我也为这个 json 数据编写 javascript。我在这里创建了一个例子 http://jsfiddle.net/s4DeS/

最佳答案

举个简单的例子:http://jsfiddle.net/XecTZ/

        var data = [{
            "menu":[
                {
                    "MenuId":1,
                    "MenuName":"Home",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":1,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":2,
                    "MenuName":"New Transaction",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":2,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":3,
                    "MenuName":"Portfolio",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":3,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":4,
                    "MenuName":"Analytics",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":4,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":5,
                    "MenuName":"Instructions",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":5,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":6,
                    "MenuName":"Data Upload",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":6,
                    "ModuleId":null,
                    "Menus":{
                    }
                },
                {
                    "MenuId":7,
                    "MenuName":"Administration",
                    "MenuLink":null,
                    "Action":null,
                    "Controller":null,
                    "ParentID":null,
                    "SortOrder":7,
                    "ModuleId":null,
                    "Menus":[
                        {
                            "MenuId":8,
                            "MenuName":"Masters",
                            "MenuLink":null,
                            "Action":null,
                            "Controller":null,
                            "ParentID":7,
                            "SortOrder":1,
                            "ModuleId":null,
                            "Menus":[
                                {
                                    "MenuId":10,
                                    "MenuName":"Currency",
                                    "MenuLink":"/Currencies/Index",
                                    "Action":"Index",
                                    "Controller":"Currencies",
                                    "ParentID":8,
                                    "SortOrder":1,
                                    "ModuleId":null,
                                    "Menus":{
                                    }
                                },
                                {
                                    "MenuId":11,
                                    "MenuName":"Country",
                                    "MenuLink":"/Countries/Index",
                                    "Action":"Index",
                                    "Controller":"Countries",
                                    "ParentID":8,
                                    "SortOrder":2,
                                    "ModuleId":null,
                                    "Menus":{
                                    }
                                }
                            ]
                        },
                        {
                            "MenuId":9,
                            "MenuName":"User Management",
                            "MenuLink":null,
                            "Action":null,
                            "Controller":null,
                            "ParentID":7,
                            "SortOrder":2,
                            "ModuleId":null,
                            "Menus":{
                            }
                        }
                    ]
                }
            ]
        }
        ];

        for(var i = 0, j = data[0].menu.length; i<j; i++) {
            var root_menu = data[0].menu[i];
            if(root_menu.hasOwnProperty("MenuId")) {
                $("#menu").append("<li>" + root_menu.MenuName + "</li>");
                if(root_menu.hasOwnProperty("Menus") && root_menu.Menus.length > 0) {
                    $("#menu").append("<li><ul id='menu_" + root_menu.MenuId + "'>");
                    for(var n = 0, m = root_menu.Menus.length; n<m; n++) {
                        var sub_menu = root_menu.Menus[n];
                        if(sub_menu.hasOwnProperty("MenuId")) {
                            $("#menu_" + root_menu.MenuId).append("<li>" + sub_menu.MenuName + "</li>");

/* e.t.c but DONT REPEAT YOURSELF */
/* but if there is 50 levels- what a u going to do? */
/* look at recursive way */

                        }
                    }
                    $("#menu").append("</li></ul>");
                }
            }
        }

如果您需要,您必须添加 1、2、3 级菜单,但最佳实践(DRY)是编写递归函数。

关于javascript - 如何从 json 文件创建菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088544/

上一篇:css - 另一个 css 垂直对齐

下一篇:IE 中的 HTML、CSS 问题

相关文章:

javascript - 需要同时在MAP上按多边形绘制美国各县

javascript - jquery 对话框小部件不保留父级

java - 使用 Jsoup Scala 解析 HTML 表

javascript - 无法制作粘性导航栏

javascript - 在 Ember 1.13.0 中获取 ('model' .addObjects() 时出错

php - 从 mysql 查询中显示 bool 值引导表复选框列

html - 选择具有容器的 div 的第一个子项

javascript - 即使在 $scope 变量更新数据后 UI 也不会更新

javascript - through2 和 Node.js 中的原生 Transform 流有什么区别?

javascript - Ajax、jQuery、Django。这是如何设置的?