最近的项目用到了jstree,因为对官方文档理解不充分,所以很多功能都是在网站上搜索再进行使用的。(我只是大自然的搬运工)

  1. 对每一级的节点,右键后出现不同的结果。

在jstree中右键是由 contextmenu 实现的,所以我们需要自定义它。在这之前要在 plugins 中添加它。"plugins": ["contextmenu"]。

然后定义个函数

    function contextItem(node) {
let items = {
'item1': {
"增加地点": {
"label": "增加地点",
"action": function (data) {
let inst = jQuery.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
inst.create_node(obj, {}, "last", function (new_node) {
inst.edit(new_node); });
}
}
},
'item2': {
"删除地点": {
"label": "删除地点",
"action": function (data) {
let inst = jQuery.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
if (confirm("确定要删除此菜单?删除后不可恢复。")) {
inst.delete_node(obj);
}
}
},
"修改地点": {
"label": "修改地点",
"action": function (data) {
let inst = jQuery.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
inst.edit(obj);
}
}
},
'item3': {
"create": null,
"rename": null,
"remove": null,
"ccp": null
}
};
if (node.type === '1_level') {
items = items.item1;
} else if (node.type === '2_level') {
items = items.item2;
} else {
items = items.item1;
}
// console.log(node.parent.length);
return items;
}

最后只要把定义好的函数引用在contextmenu中就好了。

 "contextmenu": {
"items": contextItem,
},

2.实现每个节点懒加载(点到相应的节点才会发送ajax到后台,获取相应数据)。如下图

在jstree中

core:{
data:DataLoader
}

定义了DataLoader函数。

function DataLoader(node, render) {
if (node.id === '#') { // 对于根节点来说,加载一级的地区目录
render(FakeAjaxLoadLevel1())
} else if (node.data) { //判断依据可以用户自定义
switch (node.data.level) {
case 1:
render(FakeAjaxLoadLevel2(node.text)); // 对于一级的地区目录来说,加载相应的市级
break;
case 2:
render(FakeAjaxLoadLevel3(node.text)); // 对于二级的市级来说,加载相应的辖区
break;
}
}
}

每一节点的函数返回jstree中所需的属性,以第一级为例

function FakeAjaxLoadLevel1() {
return [
{
text: '华东地区', id: 1, children: true,
data: {
level: 1
}
},
{
text: '华中地区', id: 2, children: true,
data: {
level: 1
}
}
];
}

3.每一层节点使用不同的图标

types标签

 "types": {
"default": {
"icon": "fa fa-globe"
},
"2_level": {
"icon": "fa fa-home"
},
"3_level": {
"icon": "fa fa-flag"
},
}

只是把自己所遇到的jstree问题进行总结,持续更新ing.

jstree 学习的更多相关文章

  1. 【JSTREE】 复选框默认选中【总结】

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用

    在上篇<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理>介绍了Bootstrap开发框架的一些基础性概括,包括总体界面效果,以及布局.菜单等内容, ...

  3. 如何系统地学习Node.js?

    转载自知乎:http://www.zhihu.com/question/21567720 ------------------------------------------------------- ...

  4. (转)基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用

    http://www.cnblogs.com/wuhuacong/p/4759564.html 在上篇<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理& ...

  5. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  6. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. ERP中通过自定义单打开流程图

    背景: AIO75系统中,制作流程图时选择所属模块,即可在对应模块的左侧列表展示流程图入口. 但在AIO5商务版中没有相关入口,故本文提供使用自定义菜单的方式挂出流程图. 具体步骤: 1.先去看一下是 ...

  2. lazy ideas in programming(编程中的惰性思想)

    lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...

  3. c专家编程摘录

    C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...

  4. POJ 1273 Drainage Ditches 网络流 FF

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 74480   Accepted: 2895 ...

  5. PHP生成xml 无法识别或是无法读取或是浏览器不识别等问题

    PHP 数组转XML函数如下 [PHP] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  6. (转)Python 日期和时间

    转自http://www.runoob.com/python/python-date-time.html Python 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见 ...

  7. LVM挂载失败mount: you must specify the filesystem type

    因意外原因导致机器重启,机器起来后发现磁盘挂载没有了,挂载,结果报错 [root@all /]# mount /dev/hdc2 /mnt/cdrom mount: you must specify ...

  8. Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)

    Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...

  9. Ubuntu 14.4 Django模型迁移到数据库提示 LookupError: unknown encoding: utf8mb4 解决方法

    由于数据库中需要存储emoji表情,因此需要mysql支持utf8mb4,参考前面的文章升级数据库. 但是由于服务器上面的python-mysqldb连接包版本为1.2.3不支持utf8mb4,因此报 ...

  10. php之str_replace具体解释

    str_replace (PHP 4, PHP 5) str_replace - Replace all occurrences of the search string with the repla ...