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 教程到此结束,对你有帮助的希望点个赞。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宁夏康源肛肠医院发声 有劳肠道了

肠道先生&#xff1a; 你好&#xff0c;我是宁夏康源肛肠医院&#xff0c;今日书信一封&#xff0c;旨在请先生出山&#xff0c;救万民健康于水火。当前&#xff0c;支原体肺炎肆虐&#xff0c;且尚无疫苗可预&#xff0c;值此危急之际&#xff0c;正是肠道先生免疫力发挥功力…

高速吹风筒方案中光耦的作用和原理--【其利天下技术】

我们都知道高速风筒方案中&#xff0c;采用了光耦作为隔离元器件&#xff0c;那么光耦是个什么特性的元件呢&#xff1f;它用来隔离什么东西呢&#xff1f;它又是如何做到隔离作用的呢&#xff1f;带着这样的疑问&#xff0c;我们对光耦做一番研究吧。 其利天下技术--光耦 &am…

AutoAnimate动画库,仅需一行代码

插件官网,支持react,vue AutoAnimate - Add motion to your apps with a single line of code 自动加动画原理 AutoAnimate 加动画的原理也很简单&#xff0c;监听绑定的 DOM 节点里 DOM 结构变化&#xff0c;自动添加对应的过渡动画&#xff1a; 增加子节点 > 渐入动画…

芳村金融茶最新进展——00后老板被带走调查

芳村 芳村茶叶的发展史可以追溯到1858年&#xff0c;当时芳村花地的翠林花园一角&#xff0c;已经有茶叶商行和制茶作坊。然而&#xff0c;芳村真正以花闻名&#xff0c;可以说是“先有花后有茶”&#xff0c;是花带动了茶的发展。在20世纪70年代左右&#xff0c;芳村和山村主要…

【论文阅读】Answering Label-Constraint Reachability in Large Graphs

Xu K, Zou L, Yu J X, et al. Answering label-constraint reachability in large graphs[C]//Proceedings of the 20th ACM international conference on Information and knowledge management. 2011: 1595-1600. Abstract 在本文中&#xff0c;我们研究了可达性查询的一种变…

光伏储能数据难题很棘手?架构升级很迷茫?来看三大真实案例

近年来&#xff0c;随着光伏储能装置的增加&#xff0c;设备数量和测点数量也在相应增加&#xff0c;数据采集频率也在不断提高&#xff0c;由此产生的时序数据量越来越庞大&#xff0c;对数据处理和实时分析的要求也越来越高。同时光伏储能系统需要长期保存大量的历史数据&…

IDEA小技巧

目录 1. IDEA自动添加注释 创建类的时候自动添加注释 创建函数、方法的注释 1. IDEA自动添加注释 参考文档&#xff1a;idea java 自动添加文件注释 idea新建类自动注释_mob6454cc73c728的技术博客_51CTO博客 【操作工具】IDEA创建类及已有类添加注释-详细操作_idea设置创建…

Python Selenium3 自动化测试实战:构建高效测试项目

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今软件开发领域&#xff0c;自动化测试成为…

硅片制作工艺-详细图文版

首先将多晶硅和掺杂剂放入单晶炉内的石英坩埚中&#xff0c;将温度升高至1000多度&#xff0c;得到熔融状态的多晶硅。 硅锭生长是一个将多晶硅制成单晶硅的工序&#xff0c;将多晶硅加热成液体后&#xff0c;精密控制热环境&#xff0c;成长为高品质的单晶。 相关概念&#xf…

【JavaScript】JavaScript中的GC算法

1、内存管理 内存&#xff1a;由可读写单元组成&#xff0c;标识一片可操作的空间 管理&#xff1a; 认为的去操作一篇空间的申请、使用和释放 内存管理&#xff1a;开发者主动申请空间、使用空间、释放空间 管理流程&#xff1a; 申请-使用-释放 // 申请 let obj {} //使…

【教程】app备案流程简单三部曲即可完成

APP备案流程包括以下步骤&#xff1a; 1. 开发者实名认证&#xff1a;在提交备案申请之前&#xff0c;开发者需要通过移动应用开发平台进行实名认证。这个步骤需要提供身份证号码、姓名、联系方式等信息&#xff0c;并上传相关证件照片或扫描件。 2. 应用信息登记&#xff1a…

DevOps搭建(九)-Jenkins实现基础CI、CD详细操作

1、创建可运行SpringBoot项目 1.1、创建一个新工程 在idea里创建一个项目,这里叫devops-test,如下图: String Boot版本要选择2.x的,依赖直选中Spring Web选项即可: 修改pom.xml文件,在build标签中增加如下内容,目的是简化jar包名称。 <finalName>devops-test&l…

如何在Java中使用JFileChooser打开和保存文件

在Java中&#xff0c;通过使用JFileChooser类&#xff0c;可以方便地打开和保存文件。本文将介绍如何使用JFileChooser类来打开、选择和保存文件&#xff0c;以及通过BufferedReader和BufferedWriter来读写文件数据。 打开文件选择器并读取文件数据 在Java中&#xff0c;可以使…

npm install 时,卡在sill idealTree buildDeps没有反应

这个的主要原因是默认的镜像源在国外&#xff0c;国内无法访问或者访问极慢导致的&#xff0c;可以先切换到国内的淘宝镜像源&#xff0c;然后再执行npm install <包名称> 命令就可以了。 具体如下&#xff1a; 1、设置镜像源为国内淘宝的镜像源&#xff1a; npm confi…

2023亚太五岳杯量子计算挑战赛数学建模思路代码模型论文

2023五岳杯数学建模思路&#xff1a;比赛开始后第一时间更新&#xff0c;获取见文末名片 今年&#xff0c;APMCM亚太地区大学生数学建模竞赛组委会正式和玻色量子、中国移动云能力中心等多家单位达成合作。 开展APMCM校企合作高校巡回学术讲座活动&#xff0c;为企业、高校搭…

百信恒山326RAlinux服务器使用手册(基于华为鲲鹏920处理器)

文章目录 封面目录正文 百信恒山326RAlinux服务器使用手册&#xff08;基于华为鲲鹏920处理器&#xff09; 封面 目录 正文 ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ…

小白如何启用和使用ChatGPT4插件的详细步骤演示

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

物流供应链数字化转型:国内领先服务商技术综合解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

搭建Nginx+rtmp+hls直播推流服务器

1 准备工具 使用yum安装git [root~]# yum -y install git 下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服务器上 [root~]# git clone https://github.com/arut/nginx-rtmp-module.git yum 安装 openssl [root~]# yum -y install openssl openssl…

fl studio2024免费汉化版水果免费编曲软件

fl studio2024全称Fruity Loops Studio2024&#xff0c;这款软件也被人们亲切的称之为水果&#xff0c;它是一款功能强大的音乐创作编辑软件&#xff0c;拥有全功能的录音室&#xff0c;大混音盘以及先进的音乐制作工具&#xff0c;用户通过使用该软件&#xff0c;就可以轻松制…