jstree 教程:创建交互式树状结构

jstree 是一个功能强大的 jQuery 插件,用于创建和管理树状结构的数据。它支持许多功能,如节点的增删改查、拖拽操作、异步加载等。本教程将通过一个完整的案例,展示如何使用 jstree 来实现一个基本的树状结构。

1. 安装 jstree

首先,我们需要在项目中引入 jstree。你可以通过以下方式之一来安装:

通过 CDN 引入

在 HTML 文件中添加以下代码来引入 jstree 的 CSS 和 JavaScript 文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>jstree 示例</title>
  <!-- 引入 jstree 的 CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.12/themes/default/style.min.css" />
</head>
<body>
  <!-- 用于渲染树的容器 -->
  <div id="tree"></div>

  <!-- 引入 jQuery 和 jstree 的 JavaScript 文件 -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.12/jstree.min.js"></script>
  <script src="script.js"></script>
</body>
</html>

通过 npm 安装

如果你使用的是 npm,你可以通过以下命令安装 jstree:

npm install jstree

然后在你的 JavaScript 文件中引入 jstree 和样式:

import 'jstree';
import 'jstree/dist/themes/default/style.min.css';

2. 创建基本的树结构

我们将在 JavaScript 文件中初始化 jstree,并定义树的数据。创建一个 script.js 文件,并添加以下代码:

$(document).ready(function() {
  // 初始化 jstree
  $('#tree').jstree({
    'core': {
      'data': [
        {
          'text': '根节点',
          'state': { 'opened': true },
          'children': [
            { 'text': '子节点 1' },
            { 'text': '子节点 2' }
          ]
        }
      ]
    }
  });
});

在这个例子中,我们创建了一个简单的树结构,包含一个根节点和两个子节点。

3. 动态添加和删除节点

添加节点

我们可以在树中动态添加节点:

// 添加一个新节点
$('#tree').jstree(true).create_node('#', { 'text': '新节点' }, 'last');

4. 监听事件

jstree 提供了丰富的事件,可以监听和处理节点的选择和取消选择:

// 监听节点选择事件
$('#tree').on('select_node.jstree', function(e, data) {
  console.log('选择的节点:', data.node.text);
});

// 监听节点取消选择事件
$('#tree').on('deselect_node.jstree', function(e, data) {
  console.log('取消选择的节点:', data.node.text);
});

5. 配置选项

jstree 支持多种配置选项,可以用来调整树的外观和功能。例如:

$('#tree').jstree({
  'core': {
    'themes': {
      'icons': false // 禁用节点图标
    }
  },
  'plugins': ['checkbox', 'contextmenu', 'dnd'] // 启用插件
});

在上面的代码中,我们禁用了节点图标,并启用了 checkbox、contextmenu 和 dnd 插件。

6. 使用 AJAX 加载数据

你可以使用 AJAX 从服务器动态加载树的数据:

$('#tree').jstree({
  'core': {
    'data': {
      'url': '/get-tree-data', // 服务器端接口
      'data': function(node) {
        return { 'id': node.id }; // 向服务器传递的参数
      }
    }
  }
});

7. 自定义节点

jstree 允许自定义节点的显示内容和样式:

$('#tree').jstree({
  'core': {
    'data': [
      {
        'text': '自定义节点',
        'icon': 'https://example.com/icon.png' // 自定义图标
      }
    ]
  }
});

8.完整代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>jstree Tutorial</title>
  <!-- 引入 jstree 的 CSS 样式 -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.12/themes/default/style.min.css" />
  <!-- 引入 jQuery -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <!-- 引入 jstree 的 JavaScript 文件 -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.12/jstree.min.js"></script>
</head>
<body>
  <!-- 用于渲染树的容器 -->
  <div id="tree"></div>
  <button id="add-node">添加节点</button>
  <button id="delete-node">删除节点</button>
  <button id="get-selected">获取选中节点</button>

  <script>
    $(document).ready(function() {
      // 初始化 jstree
      $('#tree').jstree({
        'core': {
          'data': [
            {
              'text': 'Root Node',
              'state': { 'opened': true },  // 默认展开
              'children': [
                { 'text': 'Child Node 1' },
                { 'text': 'Child Node 2' }
              ]
            }
          ]
        },
        'plugins': ['contextmenu', 'dnd', 'checkbox'] // 启用上下文菜单、拖放和复选框插件
      });

      // 添加节点按钮点击事件
      $('#add-node').click(function() {
        var newNodeText = 'New Node ' + new Date().toLocaleTimeString();
        // 在树的根节点下添加新节点
        $('#tree').jstree(true).create_node('#', { 'text': newNodeText }, 'last');
      });

      // 删除节点按钮点击事件
      $('#delete-node').click(function() {
        var selectedNodes = $('#tree').jstree(true).get_selected();
        if (selectedNodes.length > 0) {
          // 删除选中的节点
          $('#tree').jstree(true).delete_node(selectedNodes);
        } else {
          alert('请先选择一个节点');
        }
      });

      // 获取选中节点按钮点击事件
      $('#get-selected').click(function() {
        var selectedNode = $('#tree').jstree(true).get_selected(true)[0];
        if (selectedNode) {
          alert('选中的节点: ' + selectedNode.text);
        } else {
          alert('没有选中的节点');
        }
      });

      // 监听节点选择事件
      $('#tree').on('select_node.jstree', function(e, data) {
        console.log('Selected node:', data.node.text);
      });

      // 监听节点取消选择事件
      $('#tree').on('deselect_node.jstree', function(e, data) {
        console.log('Deselected node:', data.node.text);
      });
    });
  </script>
</body>
</html>

结论

通过本教程,你已经学会了如何使用 jstree 创建和管理交互式树状结构。你可以通过动态添加、删除节点,监听事件,使用 AJAX 加载数据,以及自定义节点的样式来扩展 jstree 的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾忆4377

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值