1、首先去官网下载http://www.ztree.me/v3/main.php#_zTreeInfo

2、之后引入:

<script src="js/jquery.ztree.all-3.5.js"></script>
<link href="css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css">

3、写js:

<!--树形结构 JS-->
<script type="text/javascript">
var setting= {
data: {
simpleData: {enable: true}
},
check: {
enable: true,
chkStyle: "radio",
radioType: "all"
},
view: {
showLine: true
},
callback: {
onClick: onClick,
onCheck: onCheck,
}
}; var zNodes =[
<#if selectNewsTypeAll?size gt 0>
<#list selectNewsTypeAll as sNewsTypeAll>
{id:${sNewsTypeAll.id}, pId:${sNewsTypeAll.parentId}, name:"${sNewsTypeAll.name}"},
</#list>
</#if>
]; $(document).ready(function() {
$.fn.zTree.init($("#treeConfig"), setting, zNodes);
}); function onClick(e,treeId,treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeConfig");
zTree.checkNode(treeNode, !treeNode.checked, null, true);
return false;
} function onCheck(e,treeId,treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeConfig"),
nodes = zTree.getCheckedNodes(true);
var name = "", id = "";
for (var i = 0, l = nodes.length; i < l; i++) {
name = nodes[i].name;
newsTypeId = nodes[i].id;
}
$("#treeName").val(name);
$("#treeId").val(id);
} function showMenu() {
var dropdownObj = $("#treeName");
var dropdownOffset = $("#treeName").offset();
$("#treeContainer").css({
left: dropdownOffset.left + "px",
top: dropdownOffset.top + dropdownObj.outerHeight() + "px"
}).slideDown("fast");
$("body").bind("mousedown", onBodyDown);
var w = $("#treeName").width();
var p = $("#treeName").css("padding-left");
$("#treeConfig").css("width",parseInt(w)+parseInt(p)*2);
} function hideMenu() {
$("#treeContainer").fadeOut("fast");
$("body").unbind("mousedown", onBodyDown);
} function onBodyDown(event) {
if (!(event.target.id == "chooseButton" || event.target.id == "treeName" || event.target.id == "treeContainer" || $(event.target).parents("#treeContainer").length > 0)) {
hideMenu();
//以下代码暂时没用到 start
var height = top.$("#mainFrame").contents().find("body").height();
if (height < 850) {
height = 850;
}
top.$("#mainFrame").height(height);
//以下代码暂时没用到 end
}
}
</script>

文本框的代码:

<input type="text" class="form-control input-sm" id="treeName" onclick="showMenu()">
<input type="hidden" name="newsTypeId" id="treeId"/>

树状图显示的地方:

<div id="treeContainer" class="treeContainer">
<ul id="treeConfig" class="ztree"></ul>
</div>

必要的样式:

.treeContainer{
display:none;
position: absolute;
}

以下是详解:

数据填充 
重点就在于zNodes的配置。就是要配置好id、pId、name;这三个属性。

var zNodes =[
<#if selectNewsTypeAll?size gt 0>
<#list selectNewsTypeAll as sNewsTypeAll>
{
id:${sNewsTypeAll.id},
pId:${sNewsTypeAll.parentId},
name:"${sNewsTypeAll.name}"
},
</#list>
</#if>
];

setting 中callback是回调函数,我上面写了两个

callback: {
//节点点击事件
onClick: onClick,
//节点选中事件
onCheck: onCheck,
}

setting中其他属性默认,就行。

由于一加载页面就要把树状图准备好,只不过没有显示出来而已!所以需要以下代码

$(document).ready(function() {
//初始化
$.fn.zTree.init($("#treeConfig"), setting, zNodes);
});

节点点击事件,没什么说的,这样配置就可以了:

function onClick(e,treeId,treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeConfig");
zTree.checkNode(treeNode, !treeNode.checked, null, true);
return false;
}

节点选择事件:

function onCheck(e,treeId,treeNode) {
var zTree = $.fn.zTree.getZTreeObj("treeConfig"),
nodes = zTree.getCheckedNodes(true);
var name = "", id = "";
for (var i = 0, l = nodes.length; i < l; i++) {
name = nodes[i].name;
newsTypeId = nodes[i].id;
}
$("#treeName").val(name);
$("#treeId").val(id);
}

其中:

 $("#treeName").val(name);
$("#treeId").val(id);

是根据自己的业务来的,我是因为在选择节点之后,要把,你选择的名字显示出来,并且id要写入隐藏字段,以便保存到数据库。

树状图是在什么时候显示出来呢?我设置的是当点击文本框的时候显示出来

function showMenu() {
var dropdownObj = $("#treeName");
var dropdownOffset = $("#treeName").offset();
$("#treeContainer").css({
left: dropdownOffset.left + "px",
top: dropdownOffset.top + dropdownObj.outerHeight() + "px"
}).slideDown("fast");
$("body").bind("mousedown", onBodyDown);
//获取文本框的宽度
var w = $("#treeName").width();
//获取文本框的内填充
var p = $("#treeName").css("padding-left");
//设置树状图的宽度
$("#treeConfig").css("width",parseInt(w)+parseInt(p)*2);
}

其中:

$("body").bind("mousedown", onBodyDown);

是绑定了一个鼠标点击事件,当点击其他区域,会触发onBodyDown事件。

function onBodyDown(event) {
if (!(event.target.id == "chooseButton" || event.target.id == "treeName" || event.target.id == "treeContainer" || $(event.target).parents("#treeContainer").length > 0)) {
hideMenu();
//以下代码暂时没用到 start
var height = top.$("#mainFrame").contents().find("body").height();
if (height < 850) {
height = 850;
}
top.$("#mainFrame").height(height);
//以下代码暂时没用到 end
}
}

这里面又调用hideMenu()把树状图隐藏掉。

需要用到的文本框代码:

<input type="text" class="form-control input-sm" id="treeName" onclick="showMenu()">
<input type="hidden" name="newsTypeId" id="treeId"/>

而用于显示树状图的代码是: 这段代码不一定要和上面那段文本框代码放在一起。

<div id="treeContainer" class="treeContainer">
<ul id="treeConfig" class="ztree"></ul>
</div>

因为,这里面做了位置的偏移。

function showMenu() {
var dropdownObj = $("#treeName");
//获取偏移量
var dropdownOffset = $("#treeName").offset();
$("#treeContainer").css({
left: dropdownOffset.left + "px",
top: dropdownOffset.top + dropdownObj.outerHeight() + "px"
}).slideDown("fast");
$("body").bind("mousedown", onBodyDown);
var w = $("#treeName").width();
var p = $("#treeName").css("padding-left");
$("#treeConfig").css("width",parseInt(w)+parseInt(p)*2);
}

由于zTree自带的样式不好看,我进行了细微的跳转,只是让显示稍微好看些

/*一定要的*/
.treeContainer{
display:none;
position: absolute;
}
/*根据自己情况而定*/
.treeContainer .ztree{
background-color:#FFF;
}

zTree的使用教程的更多相关文章

  1. Ztree使用教程

    这两天项目需要写一个树形帮助,学习了我们项目组的老师的Ztree的树的写法,实现了这个帮助,下面来总结一下Ztree的用法. (也是参考的一篇csdn上的博客了) zTree 是一个依靠 jQuery ...

  2. ztree实用教程

    首先导入ztree ztree是建立在jquery的基础上的 <link href="js/zTree_v3-master/css/zTreeStyle/zTreeStyle.css& ...

  3. java菜鸟篇<四> ZTree入门篇

    今天准备入手ZTree,于是在百度上搜了搜,找到了开源网址和一些大神们的教程,于是乎下午开始了组织树(ZTree)的练习 初步完整的作品是这个样子的: 1.咱们要去这个工具的开源网里找下载的东西: ( ...

  4. Angular整合zTree

    1 前提准备 1.1 新建一个angular4项目 参考博文:点击前往 1.2 去zTree官网下载zTree zTree官网:点击前往 三少使用的版本:点击前往 2 编程步骤 从打印出zTree对象 ...

  5. zTree静态树与动态树的用法——(七)

    0.[简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实 ...

  6. ztree案例笔记:用户不规范操作导致添加不了节点的问题

    我使用ztree开发了简码"万能助手",经过一段时间的观察,发现有个别用户不看教程就开始操作,总能给我折腾出一些让人哭笑不得的问题. 比如,把某个根栏目里的节点全删除,然后发现添加 ...

  7. 项目中jquery插件ztree使用记录

    最近公司要求做一个关于后台的管理系统.在这个mvvm模式横行的年代,虽然这里用jquery做项目可能有点不符合时代的潮流,但是管他呢,能做出来先在说呗(公司以后要改用angular或者vue来统一前端 ...

  8. [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?

    [译]聊聊C#中的泛型的使用(新手勿入)   写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...

  9. 《JQuery常用插件教程》系列分享专栏

    <JQuery常用插件教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201719.html 文章 使用jquery插件实现图 ...

随机推荐

  1. 最长增长子序列(LIS)

    给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说 ...

  2. python3+selenium框架设计03-封装日志类

    首先我们先来实现日志的功能,日志可以使用python3自带logging模块,不会的可以百度一下相关文章,也可以看我另外一篇文章Python3学习笔记24-logging模块 在封装日志类前,我们需要 ...

  3. requests库入门14-Cookie

    因为http是没有状态的协议,上一个请求和下一个请求是没有关联.但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆.为了实现这样的效果,所以出现了Cookie和Se ...

  4. 题解-TIOJ1905 最理想的身高差

    Problem 题目原型 题目大意:求区间最小差值 序列长度\(1e5\),询问\(2e5\) Solution 总体思路就是找出所有可能作为答案的点对,用资料结构_(:зゝ∠)_维护,然后询问 至于 ...

  5. Win7开机卡在Windows Update 35%的解决办法

    一台Win7老机器,多年未清理,用DISM++清理后,开机重启一直卡在Windows Update 35%转圈圈数小时,无法进入系统. 强制按关机键,F8进入安全模式依然同样现象. 查阅MSDN后,有 ...

  6. ASP.NET如何下载大文件

    关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(参考OSChina的 ...

  7. 如何保障Web应用安全性

    通过加密算法对关键数据进行加密 通过过滤器防御跨站脚本攻击XSS.跨域请求伪造CRSF和SQL注入 通过安全框架( Shiro.Spring Security )进行认证和授权 设置IP黑白名单来进行 ...

  8. 加载UI工程的csb,以及纹理缓存情况

    以plist+PNG模式加载csb,并播放UI工程做的动画,用法如下 local Layer = cc.CSLoader:createNode("res/yk/interface/loadi ...

  9. linux计算服务器最近一次重启的时间

    date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S" 这 ...

  10. IOS 颜色的宏定义

    #define RGB(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]   self.vie ...