树小部件 jQuery插件 jqTree

  • 源码大小:2.1MB
  • 所需积分:1积分
  • 源码编号:19JP-3248
  • 浏览次数:862次
  • 最后更新:2023年05月22日
  • 所属栏目:布局
我要下载
加入收藏
本站默认解压密码:19jp.com 或 19jp_com

简介

jqTree是一个基于jQuery的树小部件,它允许您使用一些花哨的动画从JSON数据创建文件夹树。

根据Apache许可证2.0许可。

特征:

  • 从本地加载JSON数据
  • 从服务器加载JSON数据
  • 支持拖放
  • 键盘交互
  • 单选和多选
  • 支持自动滚动和自动转义
  • 支持保存状态
  • 延迟加载以获得更好的性能

您可能还喜欢:

  • 强大的多功能jQuery文件夹树插件-zTree
  • jQuery平面文件夹树插件-simplefolders

如何使用它:

1.在HTML页面中包含jQuery库和jqTree.js插件的文件。

  1. <link rel="stylesheet" href="/path/to/jqtree.css" />
  2. <script src="/path/to/cdn/jquery.min.js"></script>
  3. <script src="/path/to/tree.jquery.js"></script>

2.创建一个容器来容纳树状视图。

  1. <div id="myTree"></div>

3.用JSON或对象数组准备数据,如下所示:

  1. const data = [
  2. {
  3. label: "node 1",
  4. id: 1,
  5. children: [{
  6. label: "node 1-1",
  7. id: 2
  8. }, {
  9. label: "node 1-2",
  10. id: 3
  11. }
  12. // ...
  13. ]
  14. },
  15. {
  16. label: "node2",
  17. id: 4,
  18. children: [{
  19. label: "node 2-1",
  20. id: 5
  21. }]
  22. }
  23. // ...
  24. ];

4.将数据可视化到树中。

  1. $("#myTree").tree({
  2. data: data
  3. });

5.配置树的所有默认选项。

  1. // Define the contents of the tree.
  2. data: data,
  3.  
  4. // or Load the node data from this url.
  5. dataUrl: null,
  6.  
  7. // Animation speed
  8. animationSpeed: "fast",
  9.  
  10. // Open nodes initially.
  11. autoOpen: false,
  12.  
  13. // Save and restore the state of the tree automatically.
  14. saveState: false,
  15.  
  16. // Turn on dragging and dropping of nodes.
  17. dragAndDrop: false,
  18.  
  19. // Turn on selection of nodes.
  20. selectable: true,
  21.  
  22. // Bind the context menu event (true/false).
  23. useContextMenu: true,
  24.  
  25. // callback functions.
  26. onCanSelectNode: null,
  27. onSetStateFromStorage: null,
  28. onGetStateFromStorage: null,
  29. onCreateLi: null,
  30. onIsMoveHandle: null,
  31. onCanMove: null,
  32. onCanMoveTo: null,
  33. onLoadFailed: null,
  34. onDragMove: null,
  35. onDragStop: null,
  36. onLoading: null
  37.  
  38. // The position of the toggle button
  39. buttonLeft: true,
  40.  
  41. // Shows empty folders
  42. showEmptyFolder: false,
  43.  
  44. // The tabindex of the tree.
  45. tabIndex: 0
  46.  
  47. // Determine if text is autoescaped.
  48. autoEscape: true,
  49.  
  50. // A character or symbol to display on closed nodes.
  51. closedIcon: '&#x25ba;',
  52.  
  53. // A character or symbol to display on opened nodes.
  54. openedIcon: '&#x25bc;',
  55.  
  56. // Turn slide animation on or off.
  57. slide: true,
  58.  
  59. // Node class
  60. nodeClass: Node,
  61.  
  62. // Process the tree data from the server.
  63. dataFilter: null,
  64.  
  65. // Enable or disable keyboard support.
  66. keyboardSupport: true,
  67.  
  68. // Set the delay for opening a folder during drag-and-drop.
  69. openFolderDelay: 500,
  70.  
  71. // rtl or ltr
  72. rtl: null,
  73.  
  74. // sets the delay before drag-and-drop is starte
  75. startDndDelay: 300,

6.API方法。

  1. // Add a new node as parent
  2. var newNode = $('#myTree').tree('getNodeByName', 'newNode');
  3. $('#myTree').tree(
  4. 'addParentNode',
  5. {
  6. name: 'new_parent',
  7. id: 987
  8. },
  9. newNode
  10. );
  11.  
  12. // Add a new node after an existing node
  13. var nodeExample = $('#myTree').tree('getNodeByName', 'nodeExample');
  14. $('#myTree').tree(
  15. 'addNodeAfter',
  16. {
  17. name: 'new_node',
  18. id: 456
  19. },
  20. nodeExample
  21. );
  22.  
  23. // Add a new node before an existing node
  24. var nodeExample = $('#myTree').tree('getNodeByName', 'nodeExample');
  25. $('#myTree').tree(
  26. 'addNodeBefore',
  27. {
  28. name: 'new_node',
  29. id: 456
  30. },
  31. nodeExample
  32. );
  33.  
  34. // Add a node to parent node.
  35. var nodeExample = $('#myTree').tree('getNodeByName', 'nodeExample');
  36. $('#myTree').tree(
  37. 'appendNode',
  38. {
  39. name: 'new_node',
  40. id: 456,
  41. children: [
  42. { name: 'child1', id: 457 },
  43. { name: 'child2', id: 458 }
  44. ]
  45. },
  46. nodeExample
  47. );
  48.  
  49. // Add a root node
  50. $('#myTree').tree(
  51. 'appendNode',
  52. {
  53. name: 'new_node',
  54. id: 456
  55. }
  56. );
  57.  
  58. // Prepend a node
  59. $('#myTree').tree(
  60. 'prependNode',
  61. {
  62. name: 'new_node',
  63. id: 456,
  64. children: [
  65. { name: 'child1', id: 457 },
  66. { name: 'child2', id: 458 }
  67. ]
  68. },
  69. nodeExample
  70. );
  71.  
  72. // Collapse a node with or without animation
  73. $('#myTree').tree('closeNode', node, true/false);
  74.  
  75. // Destroy the instance
  76. $('#myTree').tree('destroy');
  77.  
  78. // Get node information
  79. $('#myTree').tree('getNodeByCallback',
  80. function(node) {
  81. if (node.name == 'abc') {
  82. // Node is found; return true
  83. return true;
  84. }
  85. else {
  86. // Node not found; continue searching
  87. return false;
  88. }
  89. });
  90. $('#myTree').tree('getNodeById', id);
  91. $('#myTree').tree('getNodeByHtmlElement', element);
  92. $('#myTree').tree('getSelectedNode');
  93. $('#myTree').tree('getState');
  94. $('#myTree').tree('getTree');
  95.  
  96. // Detect if is dragging
  97. $('#myTree').tree('isDragging');
  98.  
  99. // Load new data
  100. $('#myTree').tree('loadData', new_data);
  101.  
  102. // Load a sub tree
  103. $('#myTree').tree('loadData', data, node);
  104.  
  105. // Load data from an URL
  106. $('#myTree').tree('loadDataFromUrl', '/category/tree/');
  107. $('#myTree').tree('loadDataFromUrl', '/category/tree/', node);
  108. $('#myTree').tree('loadDataFromUrl', '/category/tree/', null, function(){
  109. // ...
  110. });
  111.  
  112. // Select the next/prev node
  113. $('#myTree').tree('moveDown');
  114. $('#myTree').tree('moveUp');
  115.  
  116. // Move a node
  117. $('#myTree').tree('moveNode', node, target_node, 'after');
  118.  
  119. // Open a node
  120. $('#myTree').tree('openNode', node);
  121. $('#myTree').tree('openNode', node, slide(TRUE/FALSE));
  122. $('#myTree').tree('openNode', node, slide(TRUE/FALSE));
  123. $('#myTree').tree('openNode', node, slide(TRUE/FALSE), function(node){
  124. // fired when finished
  125. });
  126.  
  127. // Reload data
  128. $('#myTree').tree('reload');
  129. $('#myTree').tree('reload', function(){
  130. // fired when loaded
  131. });
  132.  
  133. // Remove a node
  134. $('#myTree').tree('removeNode', node);
  135.  
  136. // Select a node
  137. $('#myTree').tree('selectNode', node);
  138. $('#myTree').tree('selectNode', node, null); // deselect
  139. $('#myTree').tree('selectNode', node, { mustToggle, mustSetFocus });
  140.  
  141. // Scroll to a node
  142. $('#myTree').tree('scrollToNode', node);
  143.  
  144. // Set options
  145. $('#myTree').tree('setOption', 'keyboardSupport', false);
  146.  
  147. // Set state
  148. $('#myTree').tree('setState', state);
  149.  
  150. // Expand/collapse a node
  151. $('#myTree').tree('toggle', node);
  152. $('#myTree').tree('toggle', node, slide(TRUE/FALSE));
  153.  
  154. // Convert data to JSON
  155. $('#myTree').tree('toJson');
  156.  
  157. // refresh
  158. $('#myTree').tree('refresh');
  159.  
  160. // Update data
  161. $('#myTree').tree(
  162. 'updateNode',
  163. node,
  164. {
  165. name: 'new name',
  166. id: 1,
  167. children: [
  168. { name: 'child1', id: 2 }
  169. ]
  170. }
  171. );

7.节点功能。

  1. // Add a node to the selection.
  2. var node = $('#myTree').tree('getNodeById', 123);
  3. $('#myTree').tree('addToSelection', node);
  4.  
  5. // Return a list of selected nodes.
  6. var nodes = $('#myTree').tree('getSelectedNodes');
  7.  
  8. // Return if this node is selected.
  9. var node = $('#tree1').tree('getNodeById', 123);
  10. var isSelected = $('#tree1').tree('isNodeSelected', node);
  11.  
  12. // Remove a node from the selection.
  13. var node = $('#tree1').tree('getNodeById', 123);
  14. $('#tree1').tree('removeFromSelection', node);
  15.  
  16. // Get the subtree of a node.
  17. var node = $('#tree1').tree('getNodeById', 123);
  18. var data = node.getData();
  19.  
  20. // Get the level of a node.
  21. var node = $('#tree1').tree('getNodeById', 123);
  22. var level = node.getLevel();
  23.  
  24. // Get the next node in the tree.
  25. var node = node.getNextNode();
  26.  
  27. // Get the next sibling of a node.
  28. var node = node.getNextSibling();
  29.  
  30. // Return the previous node in the tree.
  31. var node = node.getPreviousNode();
  32.  
  33. // Get the previous sibling of this node.
  34. var node = node.getPreviousSibling();
  35.  
  36. // Get the previous visible node in the tree.
  37. var node = node.getPreviousVisibleNode();
  38.  
  39. // Access the parent of a node.
  40. var parentNode = node.parent;
  41.  
  42. // Access the children of a node.
  43. for (var i=0; i < node.children.length; i++) {
  44. var child = node.children[i];
  45. }

8.事件处理程序。

  1. $('#myTree').on('tree.click', function(event) {
  2. // click a node
  3. var node = event.node;
  4. alert(node.name);
  5. });
  6.  
  7. $('#myTree').on('tree.dblclick', function(event) {
  8. // double-click a node
  9. var node = event.node;
  10. alert(node.name);
  11. });
  12.  
  13. $('#myTree').on('tree.close', function(e) {
  14. // close a node
  15. console.log(e.node);
  16. });
  17.  
  18. $('#myTree').on('tree.contextmenu', function(event) {
  19. // right-click a node
  20. var node = event.node;
  21. alert(node.name);
  22. });
  23.  
  24. $('#myTree').on('tree.init', function() {
  25. // on init
  26. });
  27.  
  28. $('#myTree').on('tree.load_data', function(e) {
  29. // load data
  30. console.log(e.tree_data);
  31. });
  32.  
  33. $('#myTree').on('tree.loading_data', function(e) {
  34. // loading data
  35. console.log(e.isLoading, e.node, e.$el);
  36. });
  37.  
  38. $('#myTree').on('tree.move', function(event) {
  39. // move a node
  40. console.log('moved_node', event.move_info.moved_node);
  41. console.log('target_node', event.move_info.target_node);
  42. console.log('position', event.move_info.position);
  43. console.log('previous_parent', event.move_info.previous_parent);
  44. });
  45.  
  46. $('#myTree').on('tree.refresh', function(e) {
  47. // on refresh
  48. });
  49.  
  50. $('#myTree').on('tree.select', function(event) {
  51. if (event.node) {
  52. // node was selected
  53. var node = event.node;
  54. alert(node.name);
  55. }
  56. else {
  57. // event.node is null
  58. // a node was deselected
  59. // e.previous_node contains the deselected node
  60. }
  61. });

更多示例:

  • 示例1-加载json数据
  • 示例2-从服务器加载json数据
  • 示例3-拖放
  • 示例4-保存状态
  • 示例5-从服务器按需加载节点
  • 示例6-自动逃生
  • 示例7-自动滚动

更新日志:

1.7.0 (2022-12-24)

  • 在初始化树之后调度树。load_data
  • 将getPreviousNode重命名为getPreviousVisibleNode,将getNextNode重命名为getNextVisibleNode。
  • 添加新的getPreviousNode和getNextNode函数,忽略节点是否可见。

1.6.3 (2022-08-08)

  • 错误修复程序

1.6.2 (2021-12-16)

  • 错误修复程序

1.6.1 (2021-12-14)

  • 添加刷新方法
  • 更新程序包

1.6.0 (2021-02-09)

  • 提高内部节点查找的性能
  • 更改:getNodeById不再将字符串转换为数字
  • 修复ie11上的拖放

1.5.3 (2021-01-13)

  • 添加startDndDelay选项

1.5.2 (2020-10-25)

  • 使现代化

1.5.1 (2020-09-24)

  • 修复自动逃生

1.5.0 (2020-09-07)

  • 修复onLoading的定义

1.4.12 (2020-06-26)

  • 提高标题渲染的性能

1.4.12 (2019-11-11)

  • 已更新

1.4.11 (2018-04-06)

  • 已更新

1.4.11 (2018-04-06)

  • 已更新

1.4.10 (2018-04-06)

  • 已更新

1.4.8 (2018-07-24)

  • 更新到最新版本。

1.4.7 (2018-06-16)

  • 更新到最新版本。

1.4.6 (2018-05-08)

  • 更新到最新版本。

1.4.5 (2018-03-15)

  • 更新到最新版本。

1.4.4 (2017-12-21)

  • 更新到最新版本。

0.18.0 (2013-09-17)

  • 添加了“自定义html”示例
  • _getDataUrlInfo:添加selected_node参数

0.17.0 (2013-07-14)

  • 修正了按下Ctrl键时不会过早地从点击事件中返回的问题

0.16.0 (2013-05-18)

  • 固定的_选择当前节点删除@tree_widget的方法

预览截图