菜单树jstree.js插件几个主要事件汇总

摘要:
jstree。Js是用于管理菜单的强大插件。然而,中文文档或案例太少,使用起来非常痛苦。我将介绍一些我在此期间经常使用的知识点,以及我在项目中经常使用的一些知识点jstree;//SearchStrings是搜索关键字的经典示例:1)根据不同类型的节点设置不同的图标,其思想是设置树属性:运行load_When node.jstree,设置每个节点的类型。该字段为set_typeTrue,允许所有操作。

jstree.js是一个很强大管理菜单的插件,奈何中文的文档或者案例太少了,用起来很痛苦,下面我就介绍这段时间我经常用到,平时项目也经常用到的几个知识点。

参考了一下文章:

https://blog.csdn.net/j1137573560/article/details/82821839

https://www.cnblogs.com/chenjunsheng/p/10232104.html

https://www.cnblogs.com/annkiny/p/7725648.html

一、几个事件:

1)用法一样事件:activate_node.jstree(点击)、move_node.jstree(移动)、changed.jstree(改变)、load_node.jstree(节点加载)、init_node.jstree(节点初始化)、select_node.jstree(选中)、create_node.jstree(增加节点)、delete_node.jstree(删除节点)、rename_node.jstree(重命名)

2)搜索:search

例子:
//1)点击
$('#categoryTree').on("activate_node.jstree", function(e, data) { //#categoryTree是树挂载的元素
var ori = data.node.original; //original下面有点击节点的数据。
})
//2)搜索,搜索和上面两个不大一样。
$('#categoryTree').jstree('search', searchString);//
searchStrings是搜索的关键词

经典例子:

1)根据不同类型节点设置不同图标,并带有设置树属性

思路:在运行load_node.jstree时设置每个节点的type,字段是set_type。然后在初始插件是设置不同type的图标路径,如下:

functioncategoryMenuTreeInit(data){//data为节点json数据
//初始化插件
  $('#categoryTree').jstree({
            'core': {
                'check_callback' : true,
                'data': data
            },
            'plugins' : ["dnd", "search", "types", "wholerow"],//contextmenu增加右击菜单                    
            'search': {
                'case_sensitive' : false,
                'show_only_matches' : true//搜索时只展示有关键字的节点},
            'types': { //根据不同的type,设置不同的图标
                'default': {
                    'icon' : 'glyphicon glyphicon-folder-close'//bootstrap图标,之前有引入bootstrap},
                'ordinary': {
                    'icon' : 'glyphicon glyphicon-folder-close'},
                'hierarchy': {
                    'icon' : 'glyphicon glyphicon-book'},
                'normal': {
                    'icon' : 'glyphicon glyphicon-tag'},
                'combine': {
                    'icon' : 'glyphicon glyphicon-tags'},
                'upload': {
                    'icon' : 'glyphicon glyphicon-level-up'}
            },
            'callback': {
                //onAsyncSuccess: zTreeOnAsyncSuccess
}
            
        })loadJsTree('#categoryTree')
}
//设置插件图标属性type:set_type
functionloadJsTree(obj){
    //most_tag_type是区分不同节点的字段
    $(obj).on("load_node.jstree", function(e, data) {
        var nodes =data.instance._model.data;
        for (var i innodes) 
            var node =nodes[i];
            var most_tag_type = '';    
            if(nodes[i].original){
                most_tag_type = nodes[i].original.most_tag_type;//获取节点类型
}
            
            if(most_tag_type == '0'){debuggernode.a_attr.title = "目录:" + nodes[i].original.node_name + '( id:' + nodes[i].original.id + ' )' //设置树属性title
                data.instance.set_type(node, 'ordinary'); //设置树的类型
            }else if(most_tag_type == '1'){
                node.a_attr.title = "1标签:" + nodes[i].original.node_name + '( id:' + nodes[i].original.id + ' )'data.instance.set_type(node, 'hierarchy');
            }else if(most_tag_type == '10'){
                node.a_attr.title = "2标签:" + nodes[i].original.node_name + '( id:' + nodes[i].original.id + ' )'data.instance.set_type(node, 'normal');
            }else if(most_tag_type == '11'){
                node.a_attr.title = "3标签:" + nodes[i].original.node_name + '( id:' + nodes[i].original.id + ' )'data.instance.set_type(node, 'combine');
            }else if(most_tag_type == '12'){
                node.a_attr.title = "4标签:" + nodes[i].original.node_name + '( id:' + nodes[i].original.id + ' )'data.instance.set_type(node, 'upload');
            }
        }

    });
}

2)当用户想修改树的结构时,此参数用于决定是否允许修改 或 如何修改:$.jstree.defaults.core.check_callback

参考:https://blog.csdn.net/j1137573560/article/details/82821839

  • false,所有操作(创建 create、重命名 rename、删除 delete、移动 move、复制 copy)都将被阻止。
  • true,所有操作都被允许。
  • 函数,更详细的逻辑控制。  
$('#tree').jstree({
    'core': {
        'check_callback' : function(operation, node, node_parent, node_position, more) {
            //operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'
            //in case of 'rename_node' node_position is filled with the new node name
            return operation === 'rename_node' ? true : false;
        }
    }
});

网上一些很好的事件例子:

1)参考:https://www.cnblogs.com/chenjunsheng/p/10232104.html

functioncreate(){//增加节点
  var ref = $('#jstree1').jstree(true);
  var currNode =_getCurrNode();
  currNode = ref.create_node(currNode, {"type":"file"});
  if(currNode) {
    ref.edit(currNode);
  }
}

functionrename(){//节点重命名
  var ref = $('#jstree1').jstree(true);
  var currNode =_getCurrNode();
  ref.rename_node(currNode,"rename node222");
}

functiondel(){//删除节点
  var ref = $('#jstree1').jstree(true);
  var currNode =_getCurrNode();
  ref.delete_node(currNode);
}

functionmoveup(){//向上移动节点
  var ref = $('#jstree1').jstree(true);
  var currNode =_getCurrNode();
  var prevNode = ref.get_prev_dom(currNode,true);
  ref.move_node(currNode,prevNode,'before');
}

functionmovedown(){//向下移动节点
  var ref = $('#jstree1').jstree(true);
  var currNode =_getCurrNode();
  var nextNode = ref.get_next_dom(currNode,true);//返回兄弟节点的下一个节点
  ref.move_node(currNode,nextNode,'after');
}

2)参考:https://www.cnblogs.com/annkiny/p/7725648.html

判断节点选中:
var ref = $('#rolesJsTree').jstree(true),
sel = ref.get_selected();
节点删除:
if (!sel.length) { return false; }
ref.delete_node($('#' + itemVal));
或者ref.delete_node(sel);
判断父节点:
var psel = ref.get_parent(sel);
新建节点:
ref.create_node(addId, {//addId父节点使用‘#’,其他使用ID值
"id": msg.rt,//节点ID
"text": roleName//节点文本
}), "last";//表示添加到末尾
修改节点名称:
ref.set_text(sel, roleName);
重新加载:
ref.refresh();
设置选中节点:
ref.select_node(msg[i]);
ref.deselect_all(); //全不选择
ref.select_all();//选择所有
获取节点文本:
var sltText = ref.get_text(sel);
节点的变更:
ref.cut(sel);
ref.paste(parentRoleID=="0"?"#":parentRoleID);

刷新树的选中:

var ref = $("#buttonJsTree").jstree(true);//这句话很重要
ref.deselect_all();

免责声明:文章转载自《菜单树jstree.js插件几个主要事件汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇简单使用Vuex步骤及注意事项Windows平台下PHP开发环境的配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js回调与异步加载的用法

以前还是菜鸟的时候(虽然现在依然很菜 -_-|| )对异步加载与回调函数的技术无比向往,但也一直没有使用过,这次因为页面逻辑太过复杂,一堆请求逻辑,如果还是用顺序请求,页面的速度。。。 领导又要挠头了。 人是被逼出来的,所以去研究下异步与回调,以下只是本人自己见解啊,用来自己回忆的,不喜勿喷: 额。。。额。。。算了,打字好麻烦,直接上代码吧,又不是看不懂...

nodejs生成UID(唯一标识符)——node-uuid模块

unique identifier 惟一标识符 -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联。 node-uuid模块很好的提供了这个功能。 https://github.com/kelektiv/node-uuid 使用起来很简单,两种: 1、uuid.v1(); -->基于时间戳生成 (time...

jquery或者javascript将list转array数组_快速开发平台

jquery或者javascript将list转array数组,软件开发平台软件开发过程中经常会碰到后台传过来的list数据模型要转换成array数组的情况,那么我们该怎么去做呢? 如上图是转换后的表现形式。 解决方案,for循环进行赋值转换。如下代码段: $.getJSON('GetSCKBNum', function (da...

Stata—变量名称、描述和列举变量、标签使用、基本统计

1.变量名称 基本规则:由英文字母、数字或者_组成;需以英文字母或者_作为开头,区分大小写。 举例合理名称:a1 ,a_1,_a1 注意事项:“_”一般不作为首字母(因许多内部变量由“_”加字母组成,避免混淆) 2.查看资料命令 describe(可简写为des):查看所有变量的结构,如何时建立数据库,变量名称,储存类型,变量的显示格式,变量标签等 des...

JS案例之8——从一个数组中随机取数

近期项目中遇到一个需求,从一个列表中随机展示列表的部分内容,需求不大,JS也非常容易实现。主要是运用到了Math对象的random方法,和Array的splice方法。 思路是先新建一个数组,存放所有的列表,然后算出随机数,从数组中取出这个随机索引对应的值,然后组成一个随机数组。 源代码如下: 1 <!DOCTYPE html> 2 <...

使用Xcode IDE写node.js

最近在玩node.js 但是发现很多IDE就是用不顺手后来发现Xcode可以剖析java script于是试着使用Xcode来当做node.js的编辑器 首先,在Mac上必须先安装node.js的相关开发工具用MacPorts比较省时间 开发环境搞定后,打开Xcode 点选: 'File->New->Project' 然后选择左下角Other...