jsTree 组件官方文档学习

什么是 jsTree

根据jsTree官网解释jsTree 是一个jquery 插件, 提供交互式树.它是完全免费的,开源的,并根据MIT许可进行分发jsTree易于扩展,可定义配置,它支持HTML和JSON数据源以及AJAX加载
jsTree可以盒子模型内容框或边框)中正常运行可以作为AMD模块加载,并具有用于响应设计内置移动主题,可以轻松自定义。它使用jQuery事件系统,因此对树中各种事件绑定回调是熟悉且容易的。

如何使用jsTree

配置环境

使用jsTree可以通过两种方式来进行jsTree的相关配置
1.通过下载jsTree相关文件
2.通过CDNJS的方式导入
要使得jsTree相关功能可以使用需要分别导入它的css包和jsTree核心文件包。
两种导入方式如下
1.通过下载jsTree文件的方式下载的文件都在dist/文件夹

<link rel="stylesheet" href="dist/themes/default/style.min.css" />
&lt;script src="dist/jstree.min.js"&gt;</script>

2.通过CDNJS的方式导入

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>

由于jsTree是一个jquery插件,所以要使用jsTree插件,则需要导入css和关键代码包之后,添加jquery导入。(jquery同样也可以通过下载或者CDNJS的方式进行导入)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>

使用jsTree

配置完成上述的环境之后,就可以正式进行相关程序实现了。
1.我们需要为jsTree设置一个容器通过这个容器可以确定jsTree的出现位置。(id可以自拟,无需和用例一样)

<div id="jstree_demo_div"></div>

2.在DOM准备就绪之后我们就可以创建一个相对应的jsTree实例

function () { $('#jstree_demo_div').jstree(); }

3.创建实例之后,我们可以通过配置监听事件的方式来使用户和jsTree来达成一些交互,下面举一个官方文档例子
注:on 响应函数可以和之前提到的实例插件一同使用,即.jstree().on()

$('#jstree_demo_div').on("changed.jstree", function (e, data) {
  console.log(data.selected);
});

下面是官网实例的全部代码展示

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>jsTree test</title>
  <!-- 2 包含主题模板CSS文件 -->
  <link rel="stylesheet" href="dist/themes/default/style.min.css" />
</head>
<body>
  <!-- 3 设置容器元素 -->
  <div id="jstree">
    <!-- 在本例中,树是内联HTML填充的 -->
    <ul>
      <li>根节点 1
        <ul>
          <li id="child_node_1">子节点1</li>
          <li>子节点2</li>
        </ul>
      </li>
      <li>根节点 2</li>
    </ul>
  </div>
  <button>演示按钮</button>

  <!-- 4 包含jQuery库 -->
  <script src="dist/libs/jquery.js"></script>
  <!-- 5 包括缩小的jstree源文件 -->
  <script src="dist/jstree.min.js"></script>
  <script>
  $(function () {
    // 6 当DOM准备好时创建一个实例
    $('#jstree').jstree();
    // 7 绑定到树上触发的事件
    $('#jstree').on("changed.jstree", function (e, data) {
      console.log(data.selected);
    });
    // 8 与树交互-任何一种方式都可以
    $('button').on('click', function () {
      $('#jstree').jstree(true).select_node('child_node_1');
      $('#jstree').jstree('select_node', 'child_node_1');
      $.jstree.reference('#jstree').select_node('child_node_1');
    });
  });
  </script>
</body>
</html>

jsTree配置

虽然我们通过上面的教程了解到了如何创建一个jsTree实例,并了解到了的监听函数响应事件的配置方法,但是我们对于jsTree的配置还是停留在创建一个简单实例的状态,对于它的一些默认配置无法进行改变。所以为了应对不同的需求,我们需要对jsTree来进行相关的符合我们需求的配置修改
jsTree配置的修改分为两种:
1.全局配置的修改:会对于之后使用的所有jsTree实例进行修改。

$.jstree.defaults.core.themes.variant = "large";
$('#jstree').jstree();

2.局部配置的修改:对于单个的jsTree进行单独的配置
$().jstree( config对象 )

$('#jstree').jstree({
  "plugins" : [ "wholerow", "checkbox" ]
});

jsTree config对象相关参数配置逻辑

config对象主要的对于$.jstree.defaults中的默认配置进行修改,所以config对象中的参数其实对应的是jsTree 的API中参数$.jstree.defaults开头的参数
关于config对象的配置方法
当我们需要配置的参数plugins时,可以如下配置config对象

$('#jstree').jstree({
  "plugins" : [ "wholerow", "checkbox" ]
});

当我们需要同时对多个参数进行配置,各个参数相互之间没有重复部分时,可以如下配置config对象

$('#jstree').jstree({
  "core" : {
    "themes" : {
      "variant" : "large"
    }
  },
  "checkbox" : {
    "keep_selected_style" : false
  },
  "plugins" : [ "wholerow", "checkbox" ]
});

当然,如果有多个配置参数的前置键相同的情况,则可以如下进行配置

$("#jstree").jstree({
  "core" : {
    "multiple" : false,
    "animation" : 0
  }
});

官网API对于部分参数解释

下面提供一些参数配置解释:一下参数省去了$.jstree.defaults 前缀(也可以直接前往官网查看

plugins:
配置哪些插件将在实例上处于活动状态应该是一个字符数组,其中每个元素都是一个插件名称默认是 []
个人看法:就是选择激活的其他插件,因为部分的jsTree有一些插件是默认开启的,需要通过这个参数来进行手动激活。

core

core:
存储核心的所有默认值
个人看法:应该是和defaults一样的存储默认数据的参数,相当于不配置:data、strings、check_callbackerror…等配置参数。

core.data
可以传入标准的类似jQuery的AJAX配置,并且jstree将自动确定响应是JSON还是HTML,并使用其填充树。如果是false则保留原jstree容器内的HTML元素用于填充树。
个人看法:data主要还是存储jsTree插件的展示内容,对于data内的数据,主要可以通过三个途径获取
1.通过直接写如data的方式

// direct data
$('#tree').jstree({
	'core' : {
		'data' : [
			'Simple root node',
			{
				'id' : 'node_2',
				'text' : 'Root node with options',
				'state' : { 'opened' : true, 'selected' : true },
				'children' : [ { 'text' : 'Child 1' }, 'Child 2']
			}
		]
	}
});

2.通过function的方式

// function
$('#tree').jstree({
	'core' : {
		'data' : function (obj, callback) {
			callback.call(this, ['Root 1', 'Root 2']);
		}
	});

3.通过AJAX的方式:返回格式必须是标准的类似JQuery的AJAX配置,返回数据将存储到node中。AJAX的返回数据格式将在下文的JSON数据模块进行讲解

$('#tree').jstree({
	'core' : {
		'data' : {
			'url' : '/get/children/',
			'data' : function (node) {
				return { 'id' : node.id };
			}
		}
	});

core.strings
配置整个树中使用的各个字符
如果返回的是false则不进行任何替换
其中key为需要替换字符串value替换字符串
应用示例如下:

$('#tree').jstree({
	'core' : {
		'strings' : {
			'Loading ...' : 'Please wait ...'
		}
	}
});

core.check_callback
确定当用户尝试修改树的结构时会发生什么情况
如果返回值false,则创建重命名删除移动复制之类的所有操作将进行保留。
如果为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', 'copy_node' or 'edit'
			// in case of 'rename_node' node_position is filled with the new node name
			return operation === 'rename_node' ? true : false;
		}
	}
});

core.error
发生错误操作失败ajax失败等)时,在实例范围内使用个对象参数调用回调
个人看法:就是一个回调函数,有一个参数。

core.animation
打开/关闭动画持续时间(以毫秒为单位,即1s = 1000 ms
此值设置为false为禁用动画
默认值为200

core.multiple
指示是否可以选择多个节点的布尔值(true/false

core.expand_selected_onload
是否在树加载打开所有选定节点的所有父节点
布尔值,true打开/ false关闭

core.worker
使用Web Worker 来进行JSON数据解析
可以使得UI不会呗大请求阻塞
布尔值:默认为true

core.force_text
强制节点文本转换成纯文本(并转义HTML)
布尔值:默认为false

core.dblclick_toggle
是否应该双击切换节点
布尔值:默认为true

core.loaded_state
加载节点是否状态的一部分
布尔值:默认为false

core.restore_focus
当树容器模糊时应最后一个活动节点是否被聚焦,然后再次聚焦。这有助于使用屏幕阅读器。
布尔值:默认为true

core.keyboard
默认的键盘快捷键(一个对象,其中每个键是按钮名称组合键-例如’enter’,‘ctrl-space’,’p’等,其值是在实例范围执行函数

themes

core.themes
主题配置对象

core.themes.name
要使用的主题名称
false :保留默认主题

core.themes.url
主题的CSS文件的URL
false:保留原有的主题CSS
true:尝试自动加载主题

core.themes.dir
所有jstree主题的位置
仅当url设置为true时有效

core.themes.dots
是否显示连接点布尔值

core.themes.icons
是否显示节点图标的布尔值

core.themes.ellipsis
指示是否显示节点省略号的布尔值
只能和容器上的固定宽度width一起使用

core.themes.stripes
背景是否为条纹的布尔值

core.themes.variant
指定要使用的主题变体(如果主题支持变体
一个字符串false

core.themes.responsive
指定主题的响应版本是否应在较小的屏幕显示(如果主题支持
布尔值:默认为 false

出了上述的一些配置选项之外,还有部分选项是和其他的插件进行配置的,如checkbox等。在这里就不描述这些配置,将其放入相对应插件介绍时进行描述

HTML数据

简单解释,这个主题就是将HTML作为构成树的数据来进行展示。
如果需要将HTML作为数据,就需要了解HTML数据的构成。通过对于jsTree官方文档学习可以知道,jsTree可以将常规的无需列表变成树,也就是说我们这里所需要的最小标记<ul>以及嵌套在其中的<li>节点。
同时,我们同样也需要一个容器包装jsTree

$('#html1').jstree();
<div id="html1">
  <ul>
    <li>根节点 1</li>
    <li>根节点 2</li>
  </ul>
</div>

同样,有子节点的节点可以这样表示

<div id="html1">
  <ul>
    <li>根节点 1
      <ul>
        <li>子节点 1</li>
        <li><a href="#">子节点 2</a></li>
      </ul>
    </li>
  </ul>
</div>

同样HTML数据的形式也可以通过JSON来进行传输,并且可以配置jsTree的一些配置属性,详细的可以通过官方文档学习这里就不多赘述。

JSON数据

要使用JSON数据来进行树的初始化工作,则首先需要了解树节点用JSON格式数据表达方式。下面就是一个基本的树节点对象的数据表达方式:

{
  id          : "string" // 如果省略,会自动生成
  text        : "string" // 节点文本,显示内容
  icon        : "string" // 节点图片路径
  state       : {
    opened    : boolean  // 节点是否展开
    disabled  : boolean  // 节点是否不可选
    selected  : boolean  // 节点是否已经被选择
  },
  children    : []  // 子节点
  li_attr     : {}  // attributes for the generated LI node
  a_attr      : {}  // attributes for the generated A node
}

更改节点的图标,请使用icon属性。指定包含的字符/显示图像作为节点图标。使用任何其他字符串将把该类<i>用于用于表示图标的元素。您可以使用布尔值false使jsTree渲染不带图标的节点。
当使用设置childrenboolean的AJAX时true,jsTree会将节点呈现关闭状态,并在用户打开该节点时对该节点发出附加请求。也就是可以通过这个功能实现部分加载功能,而不需要一开始就加载全部的子节点。

备用的JSON格式

备用JSON格式
如果您不想使用嵌套children方法,则可以使用备用语法,其中每个节点对象都有两个必填字段:id &amp; parent没有children属性(其他所有内容保持不变)。
jsTree将自动构建层次结构。为了指示节点应该是根节点,请将其parent 属性设置为 “#”.
主要在一次渲染整棵树时使用,当使用邻接关系将数据存储在数据库中时,这很有用。

// Alternative format of the node (id &amp; parent are required)
{
  id          : "string" // required
  parent      : "string" // required
  text        : "string" // node text
  icon        : "string" // string for custom
  state       : {
    opened    : boolean  // is the node open
    disabled  : boolean  // is the node disabled
    selected  : boolean  // is the node selected
  },
  li_attr     : {}  // attributes for the generated LI node
  a_attr      : {}  // attributes for the generated A node
}
使用JSON

要用JSON对象填充树,我们需要配置$.jstree.defaults.core.data 配置选项
期望的格式是节点数组,其中每个节点都应该是如上所述的对象或简单字符串(在这种情况下,如果是字符数组,则该字符串用于节点的text属性,其他所有内容都是自动生成的)。嵌套节点children的父属性以相同的方式提供。

$('#using_json').jstree({ 'core' : {
    'data' : [
       '简单的根节点',
       {
         'text' : '根节点 2',
         'state' : {
           'opened' : true,
           'selected' : true
         },
         'children' : [
           { 'text' : '子 1' },
           '子 2'
         ]
      }
    ]
} });

备用格式的转换方式

$('#using_json_2').jstree({ 'core' : {
    'data' : [
       { "id" : "ajson1", "parent" : "#", "text" : "简单的根节点" },
       { "id" : "ajson2", "parent" : "#", "text" : "根节点 2" },
       { "id" : "ajson3", "parent" : "ajson2", "text" : "子 1" },
       { "id" : "ajson4", "parent" : "ajson2", "text" : "子 2" },
    ]
} });

同时也可以使用AJAX用服务器返回的JSON填充树。格式与上面相同,唯一区别是JSON不在config对象内部,而是从服务器返回的。
利用此选项,您需要使用$.jstree.defaults.core.data 配置选项.
只需使用类似jQuery标准AJAX配置,jstree就会自动使AJAX请求填充响应。
除了此处的标准jQuery ajax选项之外,您还可以为data 和 url编写响应函数(也可以直接编写url),这些函数将在当前实例的范围运行,并且将传递参数以指示要加载的节点,这些函数的返回值将用作URL和数据。
如果您没有服务器返回正确的json标头,则至少将dataTypejQuery AJAX选项设置为”json”.
下面是示例

$('#tree').jstree({
'core' : {
  'data' : {
    'url' : function (node) {
      return node.id === '#' ?
        'ajax_roots.json' :
        'ajax_children.json';
    },
    'data' : function (node) {
      return { 'id' : node.id };
    }
  }
});

除了上述的一些关键点外,jsTree还有关键的事件和交互相关教程。这部分具体可以参考jsTree的官方文档

原文地址:https://blog.csdn.net/belusoi/article/details/126637842

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20138.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注