jstree树形结构

效果图

初始化效果
初始化效果
节点展开后
节点展开后
文件夹右击事件
文件夹右击事件
文件右击事件
文件右击事件

需要引用的文件

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>

设置容器元素

<div id="jstree"></div>

.js代码

<script type="text/javascript">
    $(function(){
        //当DOM准备好时创建一个jstree实例
        $('#jstree').jstree({
            //core 存储核心的所有默认值
            'core' : {
                //如果保留为false,则防止创建、重命名、删除、移动或复制等操作
                "check_callback" : true,
                //data 数据配置:在这里可以传递HTML字符串或JSON数组
                'data' : [
                    {
                        'id' : 'ajson1',
                        'parent' : '#',//  #  根目录
                        'icon' : 'jstree-folder',//jstree-folder 文件夹图标(默认图标)
                        'text':'1',
                        "type":"level_1",
                        "state" :{
                            "opened" : true //默认打开文件夹
                        }

                    },
                    {
                        'id': 'ajson1.1',
                        'parent' : 'ajson1',
                        'text':'1.1',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.1.1',
                        'parent' : 'ajson1.1',
                        'icon' : 'jstree-file',//jstree-file 文件图标
                        'text':'1.1.1',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.1.2',
                        'parent' : 'ajson1.1',
                        'icon' : 'jstree-file',//jstree-file 文件图标
                        'text':'1.1.2',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.2',
                        'parent' : 'ajson1',
                        'text':'1.2',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.2.1',
                        'parent' : 'ajson1.2',
                        'text':'1.2.1',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.2.2',
                        'parent' : 'ajson1.2',
                        'text':'1.2.2',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.1.2.1.1',
                        'parent' : 'ajson1.2.1',
                        'icon' : 'jstree-file',//jstree-file 文件图标deng
                        'text':'1.1.2.1.1',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.3',
                        'parent' : 'ajson1',
                        'text':'1.3',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.1.3.1',
                        'parent' : 'ajson1.3',
                        'icon' : 'jstree-file',//jstree-file 文件图标deng
                        'text':'1.1.3.1',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.4',
                        'parent' : 'ajson1',
                        'text':'1.4',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.1.4.1',
                        'parent' : 'ajson1.4',
                        'icon' : 'jstree-file',//jstree-file 文件图标deng
                        'text':'1.1.4.1',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5',
                        'parent' : 'ajson1',
                        'text':'1.5',
                        "type":"level_1"
                    },
                    {
                        'id': 'ajson1.5.1',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',//jstree-file 文件图标
                        'text':'1.5.1',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5.2',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',
                        'text':'1.5.2',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5.3',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',
                        'text':'1.5.3',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5.4',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',
                        'text':'1.5.4',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5.5',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',
                        'text':'1.5.5',
                        "type":"level_2"
                    },
                    {
                        'id': 'ajson1.5.6',
                        'parent' : 'ajson1.5',
                        'icon' : 'jstree-file',
                        'text':'1.5.6',
                        "type":"level_2"
                    }
                ]
            },
            // plugins  存储所有已加载的jstree插件
            'plugins' : [
                'contextmenu',
                'types'
            ],
            'contextmenu' : {
                'items' : customMenu  //每个节点都会调用这个函数
            },
            'types' : {
                '#' : {  },
                'level_1' : {  },
                'level_2' : { }

            }
            //contextmenu 存储contextmenu插件的所有默认值
        });
    });
    function customMenu(node) {
        var items={
            'create': {
                'label': '增加文件夹',
                'action': function (obj) {
                    var inst = jQuery.jstree.reference(obj.reference);
                    var parentZNode = inst.get_node('', obj.reference); //获取父节点
                    var clickedNode = inst.get_node(obj.reference);
//                    alert(parentZNode);
                    /*
                       inst.create_node
                       参数1:父节点  参数2:新节点的数据
                       参数3: 1)first:当前节点下的头部新增节点
                              2)last:当前节点下的尾部新增节点
                              3)before:当前节点同级的上部新增节点
                              4)after:当前节点同级的下部新增节点
                       参数4:回调函数
                       参数5:Boolean类型,内部参数,指示父节点是否成功加载
                   */
                    var newNodeSame = inst.create_node(clickedNode,
                        {  // 'id': 'ajson1.1',
                            // 'parent' : 'ajson1',
                            'icon': 'jstree-folder',
                            'text': '新增文件夹'
                        }, 'first', function (node) {
                            //回调返回创建后点节点,给新节点改名
                            inst.edit(node, node.val);
                        }, '');
                }

            },
            'add': {
                'label': '新增分类',
                'action': function (obj) {
                    //reference获取当前选中节点的引用
                    var inst = jQuery.jstree.reference(obj.reference);
                    //通过get_node方法获取节点的信息,类似于实例对象
                    var clickedNode = inst.get_node(obj.reference);
                    /*
                        inst.create_node
                        参数1:父节点  参数2:新节点的数据
                        参数3: 1)first:当前节点下的头部新增节点
                               2)last:当前节点下的尾部新增节点
                               3)before:当前节点同级的上部新增节点
                               4)after:当前节点同级的下部新增节点
                        参数4:回调函数
                        参数5:Boolean类型,内部参数,指示父节点是否成功加载
                    */
                    var newNode = inst.create_node(clickedNode,
                        {    //'id': 'ajson20',
                            //'parent' : 'ajson2',
                            'icon': 'jstree-file',
                            'text': '新节点'
                        }, 'last', function (node) {
                            //回调返回创建后点节点,给新节点改名
                            inst.edit(node, node.val);
                        }, '');
                }
            },
            'rename': {
                'label': '修改分类',
                'action': function (obj) {
                    var inst = jQuery.jstree.reference(obj.reference);
                    var clickedNode = inst.get_node(obj.reference);
                    inst.edit(obj.reference, clickedNode.val);
                }
            },
            'delete': {
                "label": "删除分类",
                'action': function (obj) {
                    var inst = jQuery.jstree.reference(obj.reference);
                    var clickedNode = inst.get_node(obj.reference);
                    inst.delete_node(obj.reference);
                }
            }
        }
//        console.log(node) 文件和文件夹右击显示不同菜单   不需要的进行隐藏
        if(node.type==='level_1'){

        }else if(node.type==='level_2'){
            delete items.create;
            delete items.add;
        }
        return items;    //注意要有返回值
    }
</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Js tree是一款强大的树形菜单插件。它基于JavaScript开发,可以帮助我们轻松地创建和管理树状结构的菜单。这个插件提供了丰富的功能和选项,可以满足不同项目的需求。 首先,Js tree具有良好的扩展性,允许我们根据自己的需求进行定制。它提供了多种配置选项和API,可以自定义菜单的外观和行为。例如,我们可以设置节点的图标、背景颜色和样式,以及展开和折叠的动画效果等。 其次,Js tree支持异步加载数据。这对于大型树形菜单非常有用,它可以在需要的时候按需加载子节点,而不是一次性加载所有节点。这样可以减少初始化时间和资源占用,提高用户体验。 此外,Js tree还支持复选框和拖拽功能。复选框可以让用户一次性选择多个节点,用于批量操作。拖拽功能可以让用户轻松地调整节点的位置和层级,实现树的重新排序和结构调整。 最后,Js tree提供了丰富的事件和回调函数,可以让我们对菜单的各种操作进行监听和处理。例如,我们可以监听节点的点击、展开和折叠事件,以及复选框的勾选和取消勾选事件。这样可以方便地与后端交互,实现菜单的动态更新。 总的来说,Js tree是一款强大而灵活的树形菜单插件,具有丰富的功能和选项。无论是构建网站导航菜单,还是实现组织结构图等复杂的树状结构,Js tree都是一个理想的选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值