使用Jquery+bootstrap无限级菜单树

无限级菜单树的实现

项目地址:https://github.com/EnTaroAdunZ/MenuTree.git

效果

从数据库提取出来的原始数据

前台代码需要的数据

{
    "code": 100,
    "extend": {
        "children": [
            {
                "children": [
                    {
                        "children": [
                            {
                                "children": [],
                                "id": "4",
                                "parentId": "2",
                                "text": "用户管理" },
                            {
                                "children": [],
                                "id": "5",
                                "parentId": "2",
                                "text": "角色管理" },
                            {
                                "children": [ { "children": [], "id": "7", "parentId": "6", "text": "权限增加" }, { "children": [], "id": "8", "parentId": "6", "text": "权限删除" } ],
                                "id": "6",
                                "parentId": "2",
                                "text": "权限管理" }
                        ],
                        "id": "2",
                        "parentId": "1",
                        "text": "权限系统"
                    },
                    {
                        "children": [
                            {
                                "children": [],
                                "id": "9",
                                "parentId": "3",
                                "text": "轮播图管理" },
                            {
                                "children": [],
                                "id": "10",
                                "parentId": "3",
                                "text": "商品管理" }
                        ],
                        "id": "3",
                        "parentId": "1",
                        "text": "内容管理"
                    }
                ],
                "id": "1",
                "parentId": "1",
                "text": "主菜单"
            }
        ]
    },
    "msg": "操作成功"
}
后台转换过程
BuildTree类
public class BuildTree {
    public static <T> List<Tree<T>> build(List<Tree<T>> nodes) {

        if (nodes == null) {
            return null;
        }
        List<Tree<T>> topNodes = new ArrayList<>();

        for (Tree<T> children : nodes) {

            String pid = children.getParentId();
            if (pid.equals(children.getId() ) || "0".equals(pid)) {
                topNodes.add(children);
                continue;
            }
            for (Tree<T> parent : nodes) {
                String id = parent.getId();
                if (id != null && id.equals(pid)) {
                    parent.getChildren().add(children);
                }
            }
        }

        return topNodes;
    }


}
Tree
public class Tree<T> {
    /**
     * 节点ID
     */
    private String id;
    /**
     * 显示节点文本
     */
    private String text;
    /**
     * 节点的子节点
     */
    private List<Tree<T>> children = new ArrayList<Tree<T>>();

    /**
     * 父ID
     */
    private String parentId;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public List<Tree<T>> getChildren() {
        return children;
    }

    public void setChildren(List<Tree<T>> children) {
        this.children = children;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }
}
public class MenuDto {
    private Long id;
    private Long parent_id;
    private String menuNmae;

    public MenuDto(Long id, String menuNmae, Long parent_id) {
        this.id = id;
        this.parent_id = parent_id;
        this.menuNmae = menuNmae;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getParent_id() {
        return parent_id;
    }

    public void setParent_id(Long parent_id) {
        this.parent_id = parent_id;
    }

    public String getMenuNmae() {
        return menuNmae;
    }

    public void setMenuNmae(String menuNmae) {
        this.menuNmae = menuNmae;
    }
}
controller中的代码
 public Msg initMenu(){
        ModelAndView modelAndView=new ModelAndView("/main/index");
        List<Tree<MenuDto>> trees = new ArrayList<Tree<MenuDto>>();
        List<MenuDto> menuDtoList = new ArrayList<MenuDto>();
        menuDtoList.add(new MenuDto(1L,"主菜单",1L));
        menuDtoList.add(new MenuDto(2L,"权限系统",1L));
        menuDtoList.add(new MenuDto(3L,"内容管理",1L));
        menuDtoList.add(new MenuDto(4L,"用户管理",2L));
        menuDtoList.add(new MenuDto(5L,"角色管理",2L));
        menuDtoList.add(new MenuDto(6L,"权限管理",2L));
        menuDtoList.add(new MenuDto(7L,"权限增加",6L));
        menuDtoList.add(new MenuDto(8L,"权限删除",6L));
        menuDtoList.add(new MenuDto(9L,"轮播图管理",3L));
        menuDtoList.add(new MenuDto(10L,"商品管理",3L));

        for (MenuDto test : menuDtoList) {
            Tree<MenuDto> tree = new Tree<MenuDto>();
            tree.setId(test.getId().toString());
            tree.setParentId(test.getParent_id().toString());
            tree.setText(test.getMenuNmae());
            trees.add(tree);
        }
        List<Tree<MenuDto>> children=BuildTree.build(trees);
        return Msg.success().add("children",children);
    }
Jquery代码
$(document).ready(function () {
    var isFirstMenu;

    var menulist ={"code":100,"msg":"操作成功","extend":{"children":[{"id":"1","text":"主菜单","children":[{"id":"2","text":"权限系统","children":[{"id":"4","text":"用户管理","children":[],"parentId":"2"},{"id":"5","text":"角色管理","children":[],"parentId":"2"},{"id":"6","text":"权限管理","children":[{"id":"7","text":"权限增加","children":[],"parentId":"6"},{"id":"8","text":"权限删除","children":[],"parentId":"6"}],"parentId":"2"}],"parentId":"1"},{"id":"3","text":"内容管理","children":[{"id":"9","text":"轮播图管理","children":[],"parentId":"3"},{"id":"10","text":"商品管理","children":[],"parentId":"3"}],"parentId":"1"}],"parentId":"1"}]}};
    $(window).load(function(){
        var showlist = $("<ul class=\"sidebar-menu\"></ul>");
        $("<li class=\"header\">主导航</li>").appendTo(showlist);
        isFirstMenu=menulist.extend.children.length;
        showall(menulist.extend.children, showlist);
        $("#div_menu").append(showlist);
    });
     function showall(menu_list, parent) {
        for (var menu in menu_list) {
            if (menu_list[menu].children.length > 0) {
                var li = $("<li></li>");
                if(isFirstMenu==0){
                    li = $("<li></li>");
                }else{
                    li = $("<li class=\"treeview\"></li>");
                    isFirstMenu=isFirstMenu-1;
                }
                $(li).append("<a href=\"#\"><i class=\"fa fa-share\"></i> <span>"+menu_list[menu].text+"</span><i class=\"fa fa-angle-right pull-right\"></i></a>");
                var nextParent=$("<ul class=\"treeview-menu\"></ul>");
                $(nextParent).appendTo(li);
                $(li).appendTo(parent);
                showall(menu_list[menu].children, nextParent);
            }
            else {
                $("<li><a href=\"#\"><i class=\"fa fa-circle-o\"></i>"
                    +menu_list[menu].text
                    +"</a></li>").appendTo(parent);
            }
        }
    }

});
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
jQuery是一个功能强大的JavaScript库,它简化了JavaScript在网页开发中的使用jQuery提供了许多用于操作HTML元素、处理事件和动画效果、发送网络请求等常用操作的方法,使得开发者能够更高效地编写交互性的网页应用。 Bootstrap是一个流行的前端开发框架,它提供了一套美观、易用、响应式的CSS和JavaScript组件,可以快速构建现代化的网站和Web应用。Bootstrap包含了许多预定义的CSS样式和布局,可以轻松实现响应式设计、网格系统、表单样式等常见的页面组件。 HTML5是最新的HTML标准,引入了许多新的特性和功能,使得在网页上实现丰富多样的内容和交互效果变得更加容易。HTML5提供了新的标签和API,例如video和audio标签可以直接在网页上播放视频和音频,canvas标签可以实现绘图功能,localStorage和sessionStorage API可以在客户端存储数据等等。 这三个技术和工具常常被同时使用于网页开发中。我们可以使用jQuery来简化DOM操作,例如选择元素、修改元素属性、添加删除元素等。而Bootstrap提供了美观的CSS样式和用户界面组件,可以用于快速构建网页的外观和布局。HTML5则提供了更多的交互功能和多媒体支持,例如使用canvas标签来绘制动画,使用localStorage来缓存数据等。 虽然这三个技术和工具的源代码非常庞大,但是它们的功能和用法相对简单。开发者可以在官方文档和各种教程中找到详细的用法和示例代码,可以根据自己的需要进行学习和使用。同时,这三个技术和工具都有着活跃的开发者社区和丰富的插件生态系统,可以进一步扩展它们的功能和应用范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值