easyui 进阶之tree的常见操作
前言
easyui是一种基于jQuery的用户界面插件集合,它为创建现代化,互动,JavaScript应用程序,提供必要的功能,完美支持HTML5网页的完整框架,节省网页开发的时间和规模。非常的简单易学。
easyui中文网:http://www.jeasyui.net/
easyui官网:http://www.jeasyui.com/documentation/#
今天我们来学习tree
正文
一、 加载树
1.静态界面加载树
在html直接加载数据,直接写死的页面
<div class="easyui-panel" style="padding:5px">
<ul class="easyui-tree">
<li>
<span>My Documents</span>
<ul>
<li data-options="state:'closed'">
<span>Photos</span>
<ul>
<li>
<span>Friend</span>
</li>
<li>
<span>Wife</span>
</li>
<li>
<span>Company</span>
</li>
</ul>
</li>
<li>
<span>Program Files</span>
<ul>
<li>Intel</li>
<li>Java</li>
<li>Microsoft Office</li>
<li>Games</li>
</ul>
</li>
<li>index.html</li>
<li>about.html</li>
<li>welcome.html</li>
</ul>
</li>
</ul>
</div>
效果图:
2.加载可编辑的树
<div class="easyui-panel" style="padding:5px">
<ul id="tt" class="easyui-tree" data-options="
url: 'tree_data1.json',
method: 'get',
animate: true,
onClick: function(node){
$(this).tree('beginEdit',node.target);
}
"></ul>
</div>
可使用 javascript 加载数据。
$('#tt').tree({
data:[{
"id":,
"text":"Folder1",
"iconCls":"icon-save",
"children":[{
"text":"File1",
"checked":true
},{
"text":"Books",
"state":"open",
"attributes":{
"url":"/demo/book/abc",
"price":
},
"children":[{
"text":"PhotoShop",
"checked":true
},{
"id": ,
"text":"Sub Bookds",
"state":"closed"
}]
}]
},{
"text":"Languages",
"state":"closed",
"children":[{
"text":"Java"
},{
"text":"C#"
}]
}]
});
3.加载在节点上显示额外信息的树
<div class="easyui-panel" style="padding:5px">
<ul class="easyui-tree" data-options="
url:'tree_data1.json',
method:'get',
animate:true,
formatter:function(node){
var s = node.text;
if (node.children){
s += ' <span style=\'color:blue\'>(' + node.children.length + ')</span>';
}
return s;
}
">
</ul>
</div>
如图
4.用js加载树
引用
<ul id="tree"></ul>
js代码
$('#tree').tree({
data:[{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
},{
text: 'Item12'
}],
onSelect: function(node){
console.log('选中的树的节点信息');
console.log(node);
} });
5.加载异步树
创建树形菜单(Tree)
<ul id="tt" class="easyui-tree"
url="tree2_getdata.php">
</ul>
服务器端代码
$id = isset($_POST['id']) ? intval($_POST['id']) : 0; include 'conn.php'; $result = array();
$rs = mysql_query("select * from nodes where parentId=$id");
while($row = mysql_fetch_array($rs)){
$node = array();
$node['id'] = $row['id'];
$node['text'] = $row['name'];
$node['state'] = has_child($row['id']) ? 'closed' : 'open';
array_push($result,$node);
} echo json_encode($result); function has_child($id){
$rs = mysql_query("select count(*) from nodes where parentId=$id");
$row = mysql_fetch_array($rs);
return $row[0] > 0 ? true : false;
}
二,树的属性、方法
官网api
http://www.jeasyui.com/documentation/#
三、常见树操作
1.重新加载树
$("#tree").tree({data:you_data});
$("#tree").tree("loadData",you_data);
2.定义显示节点文本
$('#tt').tree({
formatter:function(node){
return node.text;
}
});
3.点击事件触发
$('#tt').tree({
onClick: function(node){
alert(node.text); // alert node text property when clicked
}
});
4.为树添加右键菜单
// 为菜单树增加右键菜单
$('#tree').tree({
onContextMenu: function(e, node){
e.preventDefault();
// select the node
$('#tree').tree('select', node.target);
// display context menu
$('#mm').menu('show', {
left: e.pageX,
top: e.pageY
});
}
});
树节点
<ul id="tree"></ul>
右键菜单内容
<div id="mm" class="easyui-menu" style="width:120px;">
<div onclick="add_save.add();" data-options="iconCls:'icon-add'">新增子菜单</div>
<div onclick="menuEdit();" data-options="iconCls:'icon-edit'">编辑菜单</div>
<div onclick="add_save.remove();" data-options="iconCls:'icon-remove'">删除</div>
</div>
5.获取选中的节点
var menu = $('#Tree').tree('getSelected');
var nodes = $('#tree').tree('getChecked');
状态可用值有:'checked'、'unchecked'、'indeterminate'。如果状态未分配,则返回 'checked' 节点。
6.追加子节点
数据最好动态加载
var selected = $('#tree').tree('getSelected');
$('#tt').tree('append', {
parent: selected.target,
data: [{
id: 23,
text: 'node23'
},{
text: 'node24',
state: 'closed',
children: [{
text: 'node241'
},{
text: 'node242'
}]
}]
});
7.在指点节点前或后添加一个节
before:DOM 对象,前边插入的节点。
after:DOM 对象,后边插入的节点。
data:对象,节点数据。
//在节点之前添加一个节点
var node = $('#tree').tree('getSelected');
if (node){
$('#tt').tree('insert', {
before: node.target,
data: {
id: 21,
text: 'node text'
}
});
}
8.更新指定节点的参数
// update the selected node text
var node = $('#tree').tree('getSelected');
if (node){
$('#tt').tree('update', {
target: node.target,
text: 'new text'
});
}
9.启动拖拽
示例:
//onBeforeDrop:在节点被放置之前触发,返回 false 则禁止放置。
onBeforeDrop:function(target,source){
var targetNode = $(this).tree('getNode',target);
console.log("目标节点ID:"+targetNode.id);
},
//启动拖拽属性
$("#MenuTree").tree({
dnd:true});
10.树的迭代
在开发过程中,很多时候后台的数据不是我们树加载想要的数据,我们可以通过迭代来编辑数据,
示例:
原数据(后面统一用you_data表示)
[{
"id": 1,
"state": "closed",
"children": [{
"id": 11, },{
"id": 12, }]
},{
"id": 2,
"state": "closed"
}]
我们可以发现数据中没有taxt属性,也就没有要显示的文本。。tree是看不到的,我们通过迭代操作加载出数据
//树
$('#Tree').tree({
data: you_data,
onSelect: function(node){
console.log('选中的树的节点信息');
console.log(node);
}
});
//迭代循环
var oldData = [];
if(res){
oldData=you_data;
for(var i in oldData){
//迭代方法调用
readTree(oldData[i],oldData);
}
}
//为菜单树添加text
function readTree(node,data){
var children = node.children;
if(node.name){
node.text=node.id;
}
if(children&&children.length==0)delete node.children;
if (children && children.length) {
node.state = "closed";
for (var i = 0; i < children.length; i++) {
readTree(children[i],data);
}
}else{
return data;
}
};
$("#MenuTree").tree({data:res.data});
操作完以后我们的数据为
[{
"id": 1,
"text": "1",
"state": "closed",
"children": [{
"id": 11,
"text": "11"
},{
"id": 12,
"text": "12"
}]
},{
"id": 2,
"text": "2",
"state": "closed"
}]
相关文章
easyui 进阶之表单校验、自定义校验
欢迎大家关注公众号,不定时干货,只做有价值的输出
作者:Dawnzhang
出处:https://www.cnblogs.com/clwydjgs/p/10043216.html
easyui 进阶之tree的常见操作的更多相关文章
- Jquery easyui tree 一些常见操作
Tree: easyui tree的异步加载实现很简单,easyui的中文API文档中有实例(http://api.btboys.com/easyui/)——创建异步树形菜单,就是在tree node ...
- Linux常见操作
前面的话 本文将详细介绍Linux常见操作 基本概念 Linux严格区分大小写,所有内容以文件形式保存,包括硬件 Linux没有扩展名的概念,不靠扩展名来区分文件类型.但有一些约定俗成的扩展名 压缩包 ...
- 给Jquery easyui 的datagrid 每行增加操作链接(转)
http://www.thinkphp.cn/code/207.html 通过formatter方法给Jquery easyui 的datagrid 每行增加操作链接我们都知道Jquery的EasyU ...
- Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化
Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引: 索引 ...
- 动态单链表的传统存储方式和10种常见操作-C语言实现
顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- 转:jQuery 常见操作实现方式
http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...
- jQuery 常见操作实现方式
一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...
随机推荐
- echarts x轴文字显示不全解决办法
标题:echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐):http://blog.csdn.net/kebi007/article/details/68488694
- iView 的分页结合表格用法
HTML: <Table border stripe ref="selection" :columns="columns" :data="now ...
- 洛谷P4242 树上的毒瘤
解:首先有个套路是一条边的权值是[两端点颜色不同].这个用树剖直接维护,支持修改. 每次询问建虚树,查询虚树上每条边的权值.然后树形DP,用开店的方法,每个点链加链查. #include <bi ...
- Flask filter过滤器
简单的数据集体添加样式输出用管道过滤,除了flask模块以外不需要导其他的包 <head> <meta charset="UTF-8"> <meta ...
- Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(2)
1.restful api介绍 1.前后端分离的优缺点 1.为什么要用前后端分离 1.pc.app.pad多端适应 2.SPA(单页面应用)开发模式开始流行 3.前后端分离职责不清 4.开发效率问题, ...
- C++基础知识-Day5
今天主要讲的是类的扩展 1.类成员函数的存储方式 首先我们介绍类成员函数的存储方式,C++引入面向对象的概念之后,C语言中的一些比如static/const等原有语义,作一些升级,此时既要保持兼容,还 ...
- AndroidS软件代码提示
在用Eclipse时候,你可以进行设置,设置成不管你输入任何字母,都能进行代码的提示,在Android Studio中也可以 设置,而且比Eclipse设置来的简单.当然如果你觉得代码自动提示会降低你 ...
- (map,c_str())水果 hdu1263
水果 http://acm.hdu.edu.cn/showproblem.php?pid=1263 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- Druid 数据库连接池
druid 数据库连接池 由阿里提供 步骤 1 导包 durid1.0.9 jar 包 2 定义配置文件 必须是 properties文件 名字任意 位置也任意 3 获得数据库连接池对象 通过 Dur ...
- Ajxa用在哪些方面(六)
Ajax只有在适当的地方才会用到,也即需要在后台进行大量数据处理(充当消息通知机制),需要频繁的定时或不定时从服务器中读取数据的时候.1.比如我们常接触电子邮件系统中,因为电子邮件系统一般都由电子邮件 ...