zTree的使用教程
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的使用教程的更多相关文章
- Ztree使用教程
这两天项目需要写一个树形帮助,学习了我们项目组的老师的Ztree的树的写法,实现了这个帮助,下面来总结一下Ztree的用法. (也是参考的一篇csdn上的博客了) zTree 是一个依靠 jQuery ...
- ztree实用教程
首先导入ztree ztree是建立在jquery的基础上的 <link href="js/zTree_v3-master/css/zTreeStyle/zTreeStyle.css& ...
- java菜鸟篇<四> ZTree入门篇
今天准备入手ZTree,于是在百度上搜了搜,找到了开源网址和一些大神们的教程,于是乎下午开始了组织树(ZTree)的练习 初步完整的作品是这个样子的: 1.咱们要去这个工具的开源网里找下载的东西: ( ...
- Angular整合zTree
1 前提准备 1.1 新建一个angular4项目 参考博文:点击前往 1.2 去zTree官网下载zTree zTree官网:点击前往 三少使用的版本:点击前往 2 编程步骤 从打印出zTree对象 ...
- zTree静态树与动态树的用法——(七)
0.[简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实 ...
- ztree案例笔记:用户不规范操作导致添加不了节点的问题
我使用ztree开发了简码"万能助手",经过一段时间的观察,发现有个别用户不看教程就开始操作,总能给我折腾出一些让人哭笑不得的问题. 比如,把某个根栏目里的节点全删除,然后发现添加 ...
- 项目中jquery插件ztree使用记录
最近公司要求做一个关于后台的管理系统.在这个mvvm模式横行的年代,虽然这里用jquery做项目可能有点不符合时代的潮流,但是管他呢,能做出来先在说呗(公司以后要改用angular或者vue来统一前端 ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
- 《JQuery常用插件教程》系列分享专栏
<JQuery常用插件教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201719.html 文章 使用jquery插件实现图 ...
随机推荐
- Boost多线程编程
Boost多线程编程 背景 • 今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率:为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序: GUI应用程序将那些费时, ...
- office xml 方式
office2007以上版本(2003需要增加2007插件)可以采用xml方式操作生成excel,效率高,无并发问题,比传统com组件方式更方便
- 006_理解inode
inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念 ...
- Laravel-Excel 导入 Excel 文件----为什么只获取到最后一行数据?
### 今天使用了Laravel-Excel 到类文件,想做一个excel 文件到导入和导出,但是看了 官方到文档示例,自己做了一下,发现 只取到到最后一行到数据, 有点摸不着头脑! 网上找了一下, ...
- 用KendoGrid控件 快速做CRUD
先看效果: 主要引用的文件: <link href="/css/kendo/2014.1.318/kendo.common.min.css" rel="styles ...
- Fiddler 抓包工具
序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...
- SQL Server2016导出数据表数据
SQL Server2016导出数据表数据 高文龙关注0人评论3914人阅读2017-09-22 08:41:56 SQL Server2016导出数据表数据 我们前面已经介绍了很多关于SQL Ser ...
- Confluence 6 缓存状态
Confluence 为系统的内部缓存提供了缓存的状态以便于你对缓存的大小的命中率进行跟踪,在必要的情况下,你可以对缓存进行调整,让缓存能够更好的满足你的使用需求.请查看 Performance Tu ...
- Confluence 6 数据中心的缓存
在 Confluence 数据中心(集群)你需要分布缓存和每一个节点的缓存.在集群管理界面,将会定义分布缓存和节点本地缓存. 缓存配置文件存储在集群共享目录中的 home 目录下面. https:// ...
- laravel 多对多关联 attach detach sync
用户表和角色表,多对多关联,一个用户有多个角色,一个角色属于多个用户 添加多对多关联 attach: 给1号用户添加1号角色,并把关联表的column字段赋值为$value,后边的数组需要的时候再添加 ...