这段时间在维护公司的项目,去年做的项目里面有ztree树的例子,想起之前还没有开始写博客,一些知识点也无从找起,要新加一个右击节点事件,折腾了半天,其中也包含了一些知识点,稍稍做了一些demo。

zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件

• 兼容 IE、FireFox、Chrome 等浏览器

• 在一个页面内可同时生成多个 Tree 实例

• 支持 JSON 数据

• 支持一次性静态生成 和 Ajax 异步加载 两种方式

• 支持多种事件响应及反馈

• 支持 Tree 的节点移动、编辑、删除

• 支持任意更换皮肤 / 个性化图标(依靠css)

• 支持极其灵活的 checkbox 或 radio 选择功能

• 简单的参数配置实现 灵活多变的功能

在官网能够下载到zTree的源码、实例和API,其中作者pdf的API写得非常详细。

参考文档:http://www.treejs.cn/v3/api.php

图片.png

需求,点击根节点的时候,alert出所点击的事件里面的具体节点信息,在这个过程里,如果点击到了父节点(嘉定监狱),则不显示任何信息

1:在setting 配置里面,给callback设置,单击事件onClick : zTreeOnClick;

图片.png

2:写一个函数zTreeOnClick

  1. // 单击事件
  2. function zTreeOnClick(event, treeId, treeNode) {
  3. alert(treeNode.tId + ", " + treeNode.name);
  4. }

3:父节点不需要点击事件,父节点为1,如果节点为1 的时候,不执行下一步

  1. if (treeNode.id == "1") {
  2. return;
  3. }

图片.png

项目js部分完整代码,仅供参考

  1. var detain = function() {
  2. AssetSavetype = null;
  3. AssetSelecttype = null;
  4. getFloorList();
  5. initLoadMap('detainmap');
  6. var beforeNodeID;
  7. var basePath;
  8. var url;
  9. var setting = {
  10. check : {
  11. enable : true,
  12. chkStyle : "radio",
  13. radioType : "all"
  14. },
  15. view : {
  16. selectedMulti : true,
  17. showLine : false
  18. },
  19. data : {
  20. key : {
  21. name : "name"
  22. },
  23. simpleData : {
  24. enable : true,
  25. idKey : "id",
  26. pIdKey : "pId",
  27. }
  28. },
  29. edit : {
  30. enable : true,
  31. removeTitle : "删除节点",
  32. showRemoveBtn : setRemoveBtn,
  33. showRenameBtn : setRenameBtn
  34. },
  35. async : {
  36. enable : true,
  37. url : "/bison/design/detain/getTree",
  38. autoParam : [ "id" ],
  39. type : "get",
  40. dataFilter : ajaxDataFilter,
  41. dataType : "json"
  42. },
  43. callback : {
  44. // 单击事件
  45. onClick : zTreeOnClick,
  46. onCheck : zTreeOnCheck,
  47. beforeRemove : zTreeBeforeRemove,
  48. onRemove : zTreeOnRemove,
  49. onRename : zTreeOnRename
  50. }
  51. };
  52. var zTreeObj;
  53. // 初始化根节点
  54. function initTree() {
  55. $.get(basePath + "/design/detain/initNode?type=1", function(data) {
  56. // 设置父节点不显示checkbox
  57. data.returnData.node.nocheck = true;
  58. zTreeObj = $.fn.zTree.init($("#zTree"), setting,
  59. data.returnData.node);
  60. });
  61. }
  62. // 单击事件,向后台发起请求
  63. function zTreeOnClick(event, treeId, treeNode) {
  64. if (treeNode.id == "1") {
  65. return;
  66. }
  67. alert(treeNode.tId + ", " + treeNode.name);
  68. }
  69. function setRemoveBtn(treeId, treeNode) {
  70. if(treeNode.id == 1){
  71. return false;
  72. }
  73. return true;
  74. }
  75. function setRenameBtn(treeId, treeNode) {
  76. if(treeNode.id == 1){
  77. return false;
  78. }
  79. return true;
  80. }
  81. function zTreeBeforeRemove(treeId, treeNode) {
  82. if (confirm("是否确认删除"))
  83. return true;
  84. return false;
  85. }
  86. function zTreeOnRemove(event, treeId, treeNode) {
  87. $.ajax({
  88. url : basePath + "/design/detain/deleteNode",
  89. data : {
  90. id : treeNode.id,
  91. },
  92. type : "get",
  93. success : function(data) {
  94. }
  95. });
  96. deleteDetain(treeNode.id);
  97. }
  98. function zTreeOnRename(event, treeId, treeNode) {
  99. $.ajax({
  100. url : basePath + "/design/detain/updateName",
  101. data : {
  102. id : treeNode.id,
  103. name : treeNode.name
  104. },
  105. type : "POST",
  106. success : function(data) {
  107. }
  108. });
  109. }
  110. // 异步加载数据过滤器
  111. function ajaxDataFilter(treeId, parentNode, responseData) {
  112. var data = responseData.returnData.treeList;
  113. return data;
  114. }
  115. ;
  116. // 节点勾选事件
  117. function zTreeOnCheck(event, treeId, treeNode) {
  118. // 显示围栏
  119. if (beforeNodeID != treeNode.id) {
  120. electronicLayerOff = true;
  121. beforeNodeID = treeNode.id;
  122. }
  123. showDetain([ treeNode.id ]);
  124. }
  125. ;
  126. // 获取项目路径
  127. function getContextPath() {
  128. var currentPath = window.document.location.href;
  129. var pathName = window.document.location.pathname;
  130. var pos = currentPath.indexOf(pathName);
  131. var localhostPath = currentPath.substring(0, pos);
  132. var projectName = pathName.substring(0,
  133. pathName.substr(1).indexOf('/') + 1);
  134. return (localhostPath + projectName);
  135. }
  136. // 显示配置记录
  137. function showDetain(DetainNum) {
  138. electronicLayer.getSource().clear();
  139. if (electronicLayerOff) {
  140. for (var num = 0; num < DetainNum.length; num++) {
  141. var electronicParam = {
  142. service : 'WFS',
  143. version : '1.1.0',
  144. request : 'GetFeature',
  145. typeName : DBs + ':detain',
  146. outputFormat : 'application/json',
  147. cql_filter : "bid='" + DetainNum[num] + "'"
  148. };
  149. $.ajax({
  150. url : wfsUrl,
  151. data : $.param(electronicParam),
  152. type : 'GET',
  153. dataType : 'json',
  154. success : function(response) {
  155. var features = new ol.format.GeoJSON()
  156. .readFeatures(response);
  157. electronicLayer.getSource().addFeatures(features);
  158. }
  159. });
  160. }
  161. electronicLayerOff = false;
  162. } else {
  163. electronicLayerOff = true;
  164. }
  165. }
  166. // 资产FID获取
  167. var FIDObject = function(Filter, Typename) {
  168. var Fid = [];
  169. $.ajax({
  170. url : wfsUrl,
  171. data : {
  172. service : 'WFS',
  173. version : '1.1.0',
  174. request : 'GetFeature',
  175. typename : Typename,
  176. outputFormat : 'application/json',
  177. cql_filter : Filter
  178. },
  179. type : 'GET',
  180. dataType : 'json',
  181. async : false,
  182. success : function(response) {
  183. if (response.features.length == 1) {
  184. Fid[0] = response.features[0].id;
  185. } else if (response.features.length > 1) {
  186. for (var i = 0; i < response.features.length; i++) {
  187. Fid[i] = response.features[i].id;
  188. }
  189. } else {
  190. }
  191. }
  192. });
  193. return Fid;
  194. };
  195. // 删除配置记录
  196. function deleteDetain(id) {
  197. var Filter = "bid=" + "'" + id + "'";
  198. var Typename = DBs + ':detain';
  199. var newFeature = new ol.Feature();
  200. newFeature.setId(FIDObject(Filter, Typename)[0]);
  201. var tableType = 'detain';
  202. updateNewFeature([ newFeature ], tableType, 'remove');
  203. if (beforeNodeID == id) {
  204. electronicLayer.getSource().clear();
  205. }
  206. }
  207. // 添加配置
  208. $("#adddetain").on("click", function() {
  209. layer.open({
  210. type : 2,
  211. title : '添加配置',
  212. area : [ '550px', '550px' ],
  213. // fix : false, �
  214. content : [ './adddetain.jsp', ],
  215. end : function() {
  216. initTree();
  217. electronicLayer.getSource().clear();
  218. }
  219. });
  220. });
  221. return {
  222. init : function() {
  223. basePath = getContextPath();
  224. initTree();
  225. }
  226. };
  227. }();

ztree实现根节点单击事件,显示节点信息的更多相关文章

  1. zTree 无子节点 单击事件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. C#treeView控件单击事件选中节点滞后问题解决方法

    问题描述:在treeView的Click事件中,选中的节点SelectedNode并不是您刚才点击的节点,总是上一次选中的节点,节点选中滞后的问题. 解决方案:在treeView的MouseDown事 ...

  3. AppBox中main树节点单击事件JS(还有叶子的节点的页面链接)

    AppBox中main.aspx.csif (menu.IsTreeLeaf) {                        node.Leaf = true;                   ...

  4. C# chart,有关如何在鼠标移动到Series上时显示节点及数据 (有待继续更新)

    一.效果与思路 效果: 解决方案1 用chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,让用户知道我是选的那一个X的值,同时用tooltip显示该 ...

  5. ztree根据treeId展开指定节点并触发单击事件

    ztree.expandNode(ztree.getNodeByParam("id",treeId,null));//展开指定节点 ztree.selectNode(ztree.g ...

  6. ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应

    1.png图片不透明 少量图片时:使用滤镜: _background:none; _filter:prodig:DXImageTransform.Microsoft.AlphaImageLoader( ...

  7. zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案

    zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案, zTree新的根结点不能异步刷新,reAsyncChildNodes不生效解决方案, reAsyncChildNo ...

  8. ztree 获取根节点

    function getRoot() { var treeObj = $.fn.zTree.getZTreeObj("tree-div"); //返回一个根节点 var node ...

  9. zTree实现单独选中根节点中第一个节点

    zTree实现单独选中根节点中第一个节点 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树& ...

随机推荐

  1. nodejs+express搭建服务器

    1.Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能 ...

  2. linux 源码包安装拾遗

    源码包安装和apt-get/yum的区别 安装前的区别:概念上的区别 rpm和dpkg包是经过编译过的包,并且其安装位置由厂商说了算,厂商觉得安装在哪里合适,就会装在哪里,而源码包则是没有经过编译的文 ...

  3. Label,PushButton,ToolButton 实现动态图片按钮,Label显示gif动画

    .h文件 public: explicit event(QWidget *parent = 0); ~event(); QImage image; QLabel *label; QLabel *lab ...

  4. STM32使用HAL库实现ADC单通道转换

    STM32的ADC转换还是很强大的,它具有多个通道选择,这里我就不细说,不了解的可以自行百度,这里只是选取单通道,实现ADC转换.在文章开始之前,我说一下数据左对齐跟右对齐的差别,以前一直糊里糊涂的, ...

  5. 一个简单搜索引擎的搭建过程(Solr+Nutch+Hadoop)

    最近,因为未来工作的需要,我尝试安装部署了分布式爬虫系统Nutch,并配置了伪分布式的Hadoop来存储爬取的网页结果,用solr来对爬下来的网页进行搜索.我主要通过参考网上的相关资料进行安装部署的. ...

  6. 洛谷—— P3388 【模板】割点(割顶)

    https://www.luogu.org/problem/show?pid=3388 题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n, ...

  7. dubbo标签

    <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心. <dubbo:reference/&g ...

  8. HDU 1131

    N个节点的不同的树的数目.这样 随便取一个节点作为根,那么他左边和右边的儿子节点个数就确定了,假定根节点标号为x,那么左子树的标号就从1到x-1,共x-1个,右子树的标号就从x+1到n,共n-x个,那 ...

  9. 百度分页效果之纯jsp版

    数据库连接工具类 package com.gao.page.utils; import java.sql.Connection; import java.sql.DriverManager; publ ...

  10. [luogu P2123] 皇后游戏 解题报告(贪心)

    题目链接:https://www.luogu.org/problemnew/show/P2123 题目大意: 给定a数组和b数组,要求最小化c数组中的最大值 题解: 考虑微扰法,推一波式子先 设$x= ...