jstree组件的使用详细教程,部分案例( PHP / fastAdmin )

jstree 组件的使用。

简介:JsTree是一个jquery的插件,它提交一个非常友好并且强大的交互性的树,并且是完全免费或开源的(MIT 许可)。Jstree技持Html 或 json格式的的数据, 或者是ajax方式的动态请求加载数据。

在这里插入图片描述

1、引用

我这里使用的是 php 的 fastadmin 框架 ,需要在js页面的最上方define添加 ’ jstree ',否则会无法使用jstree插件,代码如下

define(['jquery', 'bootstrap', 'backend', 'table', 'form','jstree'], function ($, undefined, Backend, Table, Form) {

如果没用这个框架,则需要从官网下载js包进行引用。在引用前需先引用Jquery.

<script src="jquery.min.js"></script>
<script src="dist/jstree.min.js"></script>

2、使用

首先需要在前端的html页,加入

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

在js页面中首先添加 ready ()函数,之后的jstree代码我都会写在这里面。

$(document).ready(function () {});

3、加载树节点

 $('#jstree').jstree({'core': {},// 请求后端数据接口'plugins': [],  // 启用右键菜单和拖拽/放置功能'check_callback': function () { },'contextmenu': { },//定义右键菜单'themes': {'icons': false  // 关闭jstree默认图标},'types': {} //图标类型});
core

core 是用来请求后端接口,加载树节点用

'core': {'data': {'url': 'machine/state_list/ajax_get','data': function (node) {return { 'id': node.id ,//传递给后端的节点ID'capacity_id': $("#c-capa_id").val() //后端需要接收的数据//如果还有别的要传递后端可在这继续添加};}},'check_callback' : true, // 允许对节点进行动态操作
},
plugins

这个是树节点的功能 、形态、右键菜单等,
checkbox:多选框,每个节点前都会有一个多选
dnd :拖拽功能,可拖拽节点到别的节点上
contextmenu:右键菜单功能
html_data:节点样式、icon等都需要添加这个
当然还有别的 ,需去官网进行查阅

 // 'plugins': ['contextmenu', 'dnd','html_data','themes', 'types',"checkbox","contextmenu"],  // 启用右键菜单和拖拽/放置功能
//dnd 可拖拽
'plugins': ['contextmenu', 'html_data','themes', 'types',"contextmenu"],  // 启用右键菜单和拖拽/放置功能
contextmenu

右键菜单栏,我这里仅展示 添加修改和编辑的,如有别的需求可自行添加。

添加
add 原理,添加一个节点的同时,给他选择进行编辑节点。

添加和编辑的 回调函数需要用rename_node.jstree 进行监听。所以没在这里。

'contextmenu': {  // 定义右键菜单'items': function( node ) {var items = {"add":{"label":"添加","icon" : "glyphicon glyphicon-plus","action":function(data){var inst = $.jstree.reference(data.reference),obj = inst.get_node(data.reference);inst.create_node(obj, {}, "last", function (new_node) {try {new_node.text="输入名称";//回调函数在下方的 'rename_node.jstree' 监听编辑完时候触发实现。inst.edit(obj);} catch (ex) {setTimeout(function () { inst.edit(new_node); },0);}});}},"update":{//代码在下面展示}}},

修改
update

"update":{"label":"修改","icon":"glyphicon glyphicon-leaf","action":function (data){//根据自己的判断条件判断是否允许修改,没有可以吧判断去掉。if(node.id=="t_1"){layer.msg(node.text+"不能修改",{time:'1000'});}else{var inst = $.jstree.reference(data.reference),obj = inst.get_node(data.reference);inst.edit(obj);}}
},

删除
del
删除的回调函数在这里进行调用后端接口。当后端删除成功,返回时才能删除节点,否则不给予删除。

id:node.id 表示传入当前节点的ID。
注:response.success 中的 success 是后端传回来的字段。我这里返回是true或者false。

"del":{"separator_before": false,"icon": false,"separator_after": false,"_disabled": false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),"label": "删除","icon":"glyphicon glyphicon-remove","action": function (data) {$.get("machine/state_list/ajax_del",{id:node.id},function (response){// console.log(response.msg);//删除成功才进行删除节点if(response.success){layer.msg(response.msg,{time:'1000'});//删除节点var inst = $.jstree.reference(data.reference),obj = inst.get_node(data.reference);if(inst.is_selected(obj)) {inst.delete_node(inst.get_selected());}else {inst.delete_node(obj);}}else{layer.msg(response.msg,{time:'1000'});// console.log('删除失败');}})}
}
types

这个是节点图标的类型。

其中的parent 、 child、grandchild 需要在后端传回的数据中进行定义。

'types': {'default': {'icon': 'glyphicon glyphicon-star'  // 设置默认节点图标(这里使用了Bootstrap的glyphicon图标)},'parent' : {'icon' : 'fa fa-folder-open'  // 父节点图标},'child' : {'icon' : 'glyphicon glyphicon-file'  // 子节点图标},'grandchild' : {'icon' : 'glyphicon glyphicon-leaf'  // 第三级节点图标}//如还有节点可继续添加}

节点加载的就到这。

4、监听,节点编辑完成时触发

这里补充 右键菜单 的添加和编辑功能。

//监听,节点编辑完成时候触发
$('#jstree').on('rename_node.jstree', function (e, data) {console.log('节点ID:',data.node.id);console.log('节点名称:', data.node.text);var capaid=$("#c-capa_id").val();//需要传递后端的数据if(data.node.text!="输入名称"&&data.node.text!=""){$.get("machine/state_list/ajax_addChildNode",{nodeId:data.node.id,Text:data.node.text,capacityid:capacityid},function (response){if(response.success){//执行成功后处理逻辑}else{}}}else{layer.msg("请输入有效名称!",{time:'1000'});// 删除节点$('#jstree').jstree().delete_node(data.node.id);}
});

5、加载完树节点后的回调函数

//监听 加载完树节点后的回调函数
$('#jstree').on('ready.jstree', function (e, data){$("#toggleButton").css('display','block');
});

6、选择节点时,更新下拉框的值

选择一个节点时触发

$('#jstree').on("select_node.jstree", function (e, data){var node = data.node;alert(node.text+' '+node.id);//处理函数,也可以请求后端接口。$.ajax({method: 'post',url: '',data: { id: node.id },success: function (response) {},error: function (error) {}})
}

7、全选和展开

需要在HTML 中添加两个多选框 。


//全选
$(document).on("click", "#checkall", function () {$("#jstree").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
});
//展开
$(document).on("click", "#expandall", function () {$("#jstree").jstree($(this).prop("checked") ? "open_all" : "close_all");
});

8、加载完成后回调函数

//监听加载完成后的回调函数
$('#jstree').on('loaded.jstree',function (){var node = data.node;//选中节点$('#jstree').jstree('select_node',node.id);//其他处理//......
})

9、加载树的后端代码。

思来想去,还是贴一点后端代码吧。我这里用的是php。

$id, $capacity_id 是用来接收前端传过来的参数。

其中 dren 是别的函数,主要加载子节点的逻辑。
‘children’ => $ch1 表示加载子节点。
‘children’ => false 表示该节点下面不存在子节点

‘type’=>‘parent’ 这里代表的是前面提到的 icon,节点图标。他的名称就是在这里设置的。

‘state’ => [ ‘opened’ => true ] 为true表示加载完成是处于展开状态。

    public function ajax_get($id, $capacity_id){//查找子节点$ch1=$this->dren($capacity_id,1);$ch2=$this->dren($capacity_id,2);$data = [['id' => 't_1','text' => '调试','state' => [ 'opened' => true ],'type'=>'parent','children' => $ch1],['id' => 't_2','text' => '测试','state' => [ 'opened' => true ],'type'=>'parent','children' => $ch2],['id' => 't_3','text' => '展示','state' => [ 'opened' => true ],'type'=>'parent','children' => false],['id' => 't_4','text' => '异常','state' => [ 'opened' => true ],'type'=>'parent','children' => true]];return json($data);}

别的接口的 返回参数
例如:删除的

public function ajax_del($id){$success=[];//.....删除的逻辑代码$success=['msg'=>'删除成功',"success"=>true];//.....别的删除逻辑代码return $success;
}

jstree 教程到此结束,对你有帮助的希望点个赞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司团队规范研发流程概要

一、背景 ● 背景&#xff1a;XXX研发部门开发流程步骤以及开发工具&#xff0c;依赖版本&#xff0c;开发规范等相关信息。 ● 技术定位&#xff1a;All。 ● 目标群体&#xff1a;所有相关研发部门技术人员。 二、操作步骤 2.1 开发前的准备 准备工作一 开发相关账号开通…

中职网络安全应急响应—Server2228

应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:p@ssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交; 通过用户名和密码登录系统 在 Linux 中,利用 “alias” 命令去查看当前系统中定义的所有别名 flag:ss …

软实力篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、必知必会的几点二、必须了解的两大法则三、项目经历怎么写前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、必知必…

Echarts饼图中显示百分比

开发中遇到一个需求&#xff0c;要在饼图上显示数据百分比&#xff0c;下图&#xff1a; 查了echarts 文档&#xff0c;并不能通过简单的配置来实现&#xff0c;原因如下&#xff1a;在单个serie的label中&#xff0c;只能设置一个label&#xff0c;位置可以选择在饼图内部inne…

在线监控网址源码/ 网站监控工具源码/ 网站监控系统源码/定时任务/网站网址URL状态监控神器

源码介绍&#xff1a; 在线监控网址源码、 网站监控工具源码&#xff0c;它作为网站监控系统源码&#xff0c;有定时任务&#xff0c;支持卡密充值&#xff0c;是网站网址URL状态监控神器。让数据库监控更加简单和专业。远程云中监控、实时邮件告警、丰富的指标和图表、分析和…

【教学类-06-17】20231215 (题目填满55格)X-Y之间“加法题+题”

背景需求&#xff1a; 0-5加法、减法是大班孩子选择较多的题型&#xff0c;因为只有21题&#xff0c;做题速度快&#xff0c;完成后&#xff0c;&#xff0c;他们会问&#xff1a;“后面的空白格子做什么” “可以画画&#xff0c;自己出题目” 但是大部分孩子都不会自己出题目…

【导航栏内容的设置 Objective-C语言】

一、那接下来呢,我们就来做一做,关于导航控制器, 1.设置它顶部的导航栏儿内容的东西, 1)我们刚刚讲过的这个,通过代码去跳转、返回、 2)通过storyboard去跳转、返回、 但是,这两种情况,大家是不是已经注意到,导航栏里面,没有任何内容, 然后呢,返回,这是红色,…

C++ Qt开发:ProgressBar进度条组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。…

骨传导耳机可以保护听力吗?一文读懂骨传导耳机和开放式耳机的区别!

由于骨传导耳机通过人体骨骼来传递声音&#xff0c;不经过耳道&#xff0c;不会损伤耳膜以及内毛细胞&#xff0c;所以使用骨传导耳机不仅不会损伤听力&#xff0c;还能在一定程度上起到保护听力的作用。 一、骨传导耳机和开放式耳机的区别是什么&#xff1f; 由于骨传导耳机…

5G工业网关视频传输应用

随着科技的不断进步&#xff0c;5G网络技术已经成为了当前最热门的话题之一。而其中一个引人注目的领域就是5G视频传输和5G工业网关应用。在传统网络通信中&#xff0c;由于带宽和延迟的限制&#xff0c;视频传输常常受到限制&#xff0c;而工业网关应用也存在着链路不稳定、数…

【用三大件写出的开门烟花特效】

又到了一年一度的春节时期啦&#xff01;昨天呢是北方的小年&#xff0c;今天是南方的小年&#xff0c;看到大家可以愉快的放烟花&#xff0c;过大年很是羡慕呀&#xff01;辞旧岁&#xff0c;贺新春&#xff0c;今年我呀要放烟花&#xff0c;过春节&#xff01;&#x1f9e8;。…

[已解决]HttpMessageNotReadableException: JSON parse error: Unexpected character:解析JSON时出现异常的问题分析与解决方案

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

小小手表探索更多 好玩伴也是好帮手

华为儿童手表 5X 不仅是孩子的好玩伴&#xff0c;也是家长的好帮手。全能形态让小小手表探索更多&#xff0c;高清双摄记录美好&#xff0c;离线定位随时掌握&#xff0c;绿色纯净守护成长&#xff0c;让孩子享受科技带来的安全与乐趣。

「新版」PyCharm 加载condav Environment / Conda executableis not found

在新版的 PyCharm 配置中&#xff0c;设置Conda环境不再与旧版本保持一致&#xff0c;对于新手而言可能不清楚如何加载&#xff0c;作者也是郁闷了好久&#xff0c;经过一顿输出发现需要通过加载conda配置&#xff0c;才调取conda虚拟环境&#xff0c;而不再是直接调取conda的虚…

Linux--fork创建子进程详解

目录 一.初识fork函数 二.fork的返回值 三.fork原理 1.fork是如何创建子进程的&#xff1f; 2.为什么fork会有两个返回值&#xff1f; 3.为什么父进程的返回值是子进程的pid&#xff0c;子进程返回值是0&#xff1f; 4.fork之后&#xff0c;父子进程谁先运行&#xff1f;…

【深度学习】强化学习(四)强化学习的值函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数6、值函数1. 状态值函数&#xff08;State Value Function&#xff09;a. 状态值函数的定义b. 贝尔曼方程&#xff08;Bellman Eq…

亚马逊鲲鹏系统可快速创建大量的买家账户

在数字时代的浪潮中&#xff0c;人们总是在寻找更便捷、高效的方式来完成各种任务&#xff0c;而亚马逊鲲鹏系统的出现&#xff0c;无疑为那些渴望拥有大批量买家号的人提供了一个全新的可能性。在这个系统中&#xff0c;注册买家号变得轻而易举&#xff0c;只需准备好一些必要…

WebRTC AEC回声消除算法拆解

WebRTC AEC算法流程分析——时延估计&#xff08;一&#xff09; 其实&#xff0c;网上有很多类似资料&#xff0c;各个大厂研发不同应用场景设备的音频工程师基本都对其进行了拆解&#xff0c;有些闪烁其词&#xff0c;有些却很深奥&#xff0c;笔者随着对WebRTC了解的深入&a…

韵达快递查询入口,将途经指定城市的单号筛选出来

批量查询韵达快递单号的物流信息&#xff0c;并将途经指定城市的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的伙伴记得先注册&#x…