`
yiding_123
  • 浏览: 40279 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JsTree 最详细教程及完整实例

 
阅读更多
JsTree 最详细教程及完整实例
JsTree是一个jquery的插件,它提交一个非常友好并且强大的交互性的树,并且是完全免费或开源的(MIT 许可)。Jstree技持Html 或 json格式的的数据, 或者是ajax方式的动态请求加载数据。
1、支持基于HTML定义、Json、XML方式加载树节点
    2、支持拖放,动态增加、删除、重命名树节点
    3、支持复选框
    4、支持复制、剪切、粘贴树节点,动态刷新树
    5、提供足够的回调方法:
    6、此外,jsTree有极强的扩展性,可以自定义插件支持更广泛的应用
一.Getting started
1.1 下载jstree
从官网下载最新的版本,目前最新的版本为3.3.3,下载完成后,打开压缩包,将dist/下所有文件复制到你想到使用的地方
1.2 引用jstree及jquery
jstree是jquery的一个插件,所以首先要引用jquery
<script src="jquery.min.js"></script>
<script src="dist/jstree.min.js"></script>
<link rel="stylesheet" href="dist/themes/default/style.min.css" />
1.3 在页面中定义jstree的容器,可以使用div定义
<div id="jstree_demo_div"></div>
1.4 在页面加载后好,可以初始化jstree
Once the DOM is ready you can start creating jstree instances.
$(function () { $('#jstree_demo_div').jstree(); });
二、JsTree常用的配置及操作
jstree可以在初始化时接收一些配置,以达到我们业务上想用的效果,例如如下配置:

 
2.1 使用json格式构建jstree
使用json构建jstree里,一种可以使用ajax请求的方式构建, 一种可以使用有父子嵌套关系的json格式的数据构建, 另外一种可以使用非嵌套关系的json格式数据构建(我认为这种最方便)
如果你不想使用嵌套父子关系的json ,你可以使用这种非嵌套方式的, 每个node只有两个属性是必需的: id 和parent, 其他都是可选的,不需要 children属性,jstree会自动构建层级关系。 可以将node的parent属性设置为"#",表示为一个root节点。
这种方式非常适用于从数据库中加载出来的数据,可以非常方便的构建整个树。

 
示例代码:
$('#using_json_2').jstree({ 'core' : { 'data' : [ { "id" : "ajson1", "parent" : "#", "text" : "Simple root node" }, { "id" : "ajson2", "parent" : "#", "text" : "Root node 2" }, { "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" }, { "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" }, ] } });
 
2.2 绑定事件
可以使用jquery方式绑定 jstree支持的事件,这里抱怨下,jstree的api文档写的并不好,有时得需要翻源代码才可以知道用法。
比如上图这个changed.jstree事件, 这个是官网提供的api,从这个api上看,我还以为是这个event会有4个回调参数,其实并不是,翻看了原代码后才知道,只有2个参数event和data。可以通过data.action、data.selected、data.node 取相应的参数。
以下是jstree源码中的触发这个changed事件的方法。

 
绑定事件的方式:
$('#jstree_demo_div').on("changed.jstree", function (e, data) { console.log(data.selected); });
常用事件:
事件 作用 应用场景
select_node.jstree 当一个node被选用时触发 当点击某个节点时执行一个动作。
在网上搜索,很多资料写的是绑定click.jstree,其实在官网的api里,click.jstree并没有支持,
 这里应该使用select_node.jstree
changed.jstree 当selection changes时,或者删除节点、 可以监听jstree的改变,例如jstree改变时可以同步
更新数据库中的节点情况
create_node.jstree 当节点被创建时触发
delete_node.jstree 当节点被删除时触发
rename_node.jstree 当一个node被重命名时触发
更多api请参考https://www.jstree.com/api/
 
2.3jstree插件
jstree非常灵活,允许用户自己自定义插件的方式扩展想要的功能,当然本身已提供了很多插件,基本覆盖了业务中常用的功能。更多插件请参考https://www.jstree.com/plugins/
插件的启用方式:
"plugins" : [ "checkbox", "contextmenu", "dnd", "massload", "search", "sort", "state", "types", "unique", "wholerow", "changed", "conditionalselect" ]
完整代码如:
$('#jstree1').jstree({
"plugins" : [ "wholerow","themes"]
});
2.4扩展contextmenu插件
自定义右键菜单需求:在鼠标经过节点时,在右侧显示一个下拉的箭头,当点击下拉箭头时可以弹出右键菜单,当然直接在节点上右键也是可以弹出菜单的。这个效果类似于微信企业号中通讯录的功能。
这个需求需要扩展jstree中自带的contextmenu插件才可以实现,最简单的方式就是直接把jstree里的contextmenu复制一份,在这个基础上改,另外也需要改右键菜单的样式。



完整代码请下载附件
 
2.5常用的jstree操作
常用的操作有创建节点、删除、重命名、上移、下移等。
<html>
<head>
	<link rel="stylesheet" href="jstree/themes/default/style.min.css" />
	<script type="application/javascript" src="jquery-2.1.1.min.js"></script>
	<script type="application/javascript" src="jstree/jstree.js"></script>
	<script>
	$(function() {
		
		  $('#jstree1').jstree({
				"core":{
					"data":[{"id":"0","parent":"#","state":{"disabled":false,"opened":true,"selected":false},"text":"夏宇信息"},{"id":"69","parent":"0","text":"工程"},{"id":"5","parent":"0","text":"行政"},{"id":"71","parent":"0","text":"迷"},{"id":"1","parent":"0","text":"技术"}],
					"themes" : {
						"variant" : "large",//加大
						"ellipsis" : true //文字多时省略
					},
					"check_callback" : true
				},
				"plugins" : [ "wholerow","themes"]
			}).on('select_node.jstree', function(event, data) {
				console.log(data.node);
			}).on('changed.jstree', function(event,data) {
				console.log("-----------changed.jstree");
				console.log("action:" + data.action);
				console.log(data.node);
			});
				  
	  });
  
	
	function create(){
		var ref = $('#jstree1').jstree(true);
		var currNode = _getCurrNode();
		currNode = ref.create_node(currNode, {"type":"file"});
		if(currNode) {
			ref.edit(currNode);
		}
	}
		
	function rename(){
		var ref = $('#jstree1').jstree(true);
		var currNode = _getCurrNode();
		ref.rename_node(currNode,"rename node222");
	}
	
	function del(){
		var ref = $('#jstree1').jstree(true);
		var currNode = _getCurrNode();
		ref.delete_node(currNode);
	}
	
	function moveup(){
		var ref = $('#jstree1').jstree(true);
		var currNode = _getCurrNode();
		var prevNode = ref.get_prev_dom(currNode,true);
		ref.move_node(currNode,prevNode,'before');
	}
	
	function movedown(){
		var ref = $('#jstree1').jstree(true);
		var currNode = _getCurrNode();
		var nextNode = ref.get_next_dom(currNode,true);//返回兄弟节点的下一个节点
		ref.move_node(currNode,nextNode,'after');
	}
	
	/**
	*	获取当前所选中的结点
	*/
	function _getCurrNode(){
		var ref = $('#jstree1').jstree(true),
		sel = ref.get_selected();
		console.log(sel);
		if(!sel.length) { 
			console.log("----");
			return false; 
		}
		sel = sel[0];
		return sel;
	}
</script>
</head>
<body>
<input type="button" value="create node" onclick="create();">
<input type="button" value="rename node" onclick="rename();">
<input type="button" value="del node" onclick="del();">
<input type="button" value="上移" onclick="moveup();">
<input type="button" value="下移" onclick="movedown();">
<div id="jstree1" style="width:200px;background:#fff322"></div>
</body>
</html>

 

  • 大小: 6.5 KB
  • 大小: 10.3 KB
  • 大小: 12.5 KB
  • 大小: 14 KB
分享到:
评论

相关推荐

    jsTree大集合

    - **社区讨论和教程**:可能包含论坛帖子、博客文章或教程,分享了开发者在使用jsTree时的经验和技巧。 学习和利用“jsTree大集合”,不仅可以提升你构建树形结构界面的能力,还能帮助你更高效地与其他开发者协作。...

    jstree1.0 demo

    4. **插件与主题**:jstree支持多种插件,如搜索、检查节点、拖放操作等,文档会详细列出可用插件及其用法。同时,jstree还允许自定义主题以适应不同网站的设计风格。 5. **API**:虽然1.0版本的API没有中文版,但...

    jsTree大集合学习资料

    在提供的压缩包文件中,"獪牔敥군 Kenshoo 案例分析.pdf"和"獪牔敥군 簿记应用实例.docx"可能是关于jsTree在具体业务场景的应用分析或教程,而"jsTree大集合.pdf"可能是全面介绍jsTree的教程文档。"jsTree'ó¼...

    jstree-3.3.4

    - **文档与示例**:jstree提供了详尽的API文档和实例教程,帮助开发者快速上手。 - **兼容性**:jstree通常能很好地运行在现代浏览器上,包括Chrome、Firefox、Safari和Edge等。 - **社区支持**:有一个活跃的社区...

    jstree+JS树形菜单合集

    本资源"jstree+JS树形菜单合集"聚焦于JavaScript实现的树形菜单,涵盖了多种应用场景和实现方式。 首先,我们来看"struts+hibernate树形菜单"。Struts是Java Web开发中的一个MVC框架,而Hibernate则是一个ORM(对象...

    EXT教程EXT用大量的实例演示Ext实例

    Ext教程为使用Ext JS框架的开发者提供了大量实例和详细的说明,涵盖了从基本入门到进阶使用,再到解决遇到的问题,是一份非常实用的参考资料。通过这些实例,开发者可以快速掌握Ext JS的使用,并能高效地应用于实际...

    【JavaScript源代码】Echarts实例教程之树形图表的实现方法.docx

    本教程将深入探讨如何使用ECharts实现各种类型的树形图表。 首先,要创建一个树形图表,你需要在ECharts配置中设置`series-&gt;type`为`'tree'`。ECharts提供了两种基本布局方式:正交树(Orthogonal)和径向树...

    autoJS1688示例.zip

    00-本地时间及网络时间验证改版.js 00-正则匹配关闭应用-适用大部分手机(1).js 00-正则匹配关闭应用-适用大部分手机.js 00-简化点击控件.js 00-结束事件与结束应用(1).js 00-结束事件与结束应用.js 00-读&删...

    ext tree json 例子(不含EXT包)

    "ext tree json 例子(不含EXT包)"这个标题暗示我们将讨论如何在不直接引用EXT完整包的情况下,仅使用EXT JS中关于TreePanel和JSON解析的部分来构建一个动态的树形结构。这可能涉及到手动引入EXT的核心组件,如...

    easyUI实例教程

    通过easyUI实例教程的学习,可以快速掌握easyUI提供的各种组件的使用方法,从而高效地构建交互式、响应式的Web应用。教程不仅仅是对组件的简单介绍,还通过实例加深了对组件功能的理解,使开发者能够将组件集成到...

    tree JS ASP.NET.zip

    标题 "tree JS ASP.NET....综上所述,"tree JS ASP.NET.zip"可能包含了一个关于如何在ASP.NET环境中用JavaScript实现交互式树形结构的实例或教程。理解并掌握上述知识点对于开发高效、用户友好的Web应用程序至关重要。

    SWT Tree 完整的树例子源码

    本教程将通过一个完整的SWT Tree实例,帮助新手理解如何创建、操作和自定义SWT Tree。 首先,我们来分析给定的文件列表: 1. `otree.css`: 这个文件是CSS样式表,用于定义SWT Tree的外观和布局,如字体、颜色、...

    ext很多教程资料。

    ExtJS2.1教程Tree_树控件_。ExtJS_配置和表格控件使用。Extjs入门培训教程。Extjs最经典的学习教程。ext布局。ext几个实例。EXT开发指南。EXT树简介。JavaScript使用手册。很多的extjs教程,你6分下载这个压缩包很值...

    Ext js 资源大全

    官方文档通常是最权威的资料,其中包含了大量的示例和教程。 "EXT 教程.rar"可能是一系列的EXT教学材料,这些教程通常按步骤引导,由浅入深地介绍如何使用Ext JS开发Web应用。可能涵盖从安装环境、创建第一个应用到...

    extjs实例以及【深入浅出Ext.JS扫描版PDF】

    它提供了一套完整的组件模型,包括数据绑定,布局管理,事件处理等,使得开发者能够创建功能丰富的、交互性强的用户界面。深入浅出Ext.JS这本书是学习ExtJS的重要参考资料,由徐会生、何启伟和康爱媛合著,提供了...

    ZTREE.net实例

    本实例展示了如何在.NET应用中动态加载数据,并将其呈现为ZTREE的节点,从而提升用户界面的交互性和可操作性。让我们深入探讨这个过程。 首先,ZTREE的核心在于其JSON数据格式。在.NET应用中,我们需要创建一个...

    vc++ 开发实例源码包

    详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个类似STL容器的类,并进行了测试。 ClearHistory 实现了 清楚internet临时文件、Cookie的清除、游览器地址栏历史...

    js树形结构例子

    总的来说,"js树形结构例子"可能是一个完整的教程或示例项目,展示了如何在JavaScript中构建、操作和呈现树形结构。通过分析my-tree.html和menutree.js,开发者可以学习到如何在实际应用中利用JavaScript实现交互式...

Global site tag (gtag.js) - Google Analytics