jquery easyui tree学习

 

 

/**约定的服务器返回的数据格式:{"description":"test","link":"link","nodeId":1,"nodeName":"节点0","parentNodeId":0}
 * nodeId:唯一标示节点  nodeId=1代表根节点,根节点的parentNodeId为0
 * parentNodeId:父节点nodeId
 */
var data = "[{\"description\":\"test\",\"link\":\"link\",\"nodeId\":1,\"nodeName\":\"节点0\",\"parentNodeId\":0},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":2,\"nodeName\":\"节点1\",\"parentNodeId\":1},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":3,\"nodeName\":\"节点2\",\"parentNodeId\":1},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":4,\"nodeName\":\"节点3\",\"parentNodeId\":2},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":5,\"nodeName\":\"节点4\",\"parentNodeId\":3},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":6,\"nodeName\":\"节点5\",\"parentNodeId\":3}]";

 

注意:

很多事件的回调方法都有一个node的参数,这个参数包含了下面的属性:

 

id,text,iconCls,checked,state,attributes,target

Events

Many events callback function can take the 'node' parameter, which contains following properties:

很多事件的回调方法都有一个node的参数,这个参数包含了下面的属性:

  • id: An identity value bind to the node.
  • text: Text to be showed.
  • iconCls: The css class to display icon.
  • checked: Whether the node is checked.
  • state: The node state, 'open' or 'closed'.
  • attributes: Custom attributes bind to the node.
  • target: Target DOM object.

 

 

处理服务器返回的数据:

/**约定的服务器返回的数据格式:{"description":"test","link":"link","nodeId":1,"nodeName":"节点0","parentNodeId":0}
 * nodeId:唯一标示节点  nodeId=1代表根节点,根节点的parentNodeId为0
 * parentNodeId:父节点nodeId
 */
//data为服务器返回的数据(json格式)
var data = "[{\"description\":\"test\",\"link\":\"link\",\"nodeId\":1,\"nodeName\":\"节点0\",\"parentNodeId\":0},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":2,\"nodeName\":\"节点1\",\"parentNodeId\":1},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":3,\"nodeName\":\"节点2\",\"parentNodeId\":1},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":4,\"nodeName\":\"节点3\",\"parentNodeId\":2},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":5,\"nodeName\":\"节点4\",\"parentNodeId\":3},"
			+"{\"description\":\"test\",\"link\":\"link\",\"nodeId\":6,\"nodeName\":\"节点5\",\"parentNodeId\":3}]";
var json = JSON.parse(data);//将字符串解析为json对象
var tree = {};//定义存放结果的tree对象
//将数据添加children属性,并依据nodeId存放到tree对象中
$.each(json,function(i,obj){
	this.children = [];//添加children属性
	tree[this.nodeId] = this;//nodeId为key,当前对象为value存放到tree对象中
});
$.each(json,function(i,obj){
	if(this.parentNodeId != 0){
		tree[this.parentNodeId].children.push(this); //除了根节点之外,其余节点都追加到父节点的chileren数组中
	}
});
var temp = [];
temp.push(tree[1]);//获取根节点,其余节点不需要
tree = temp;
/**
 * 将给定的节点及其子节点(children)转为easyui要求的结构
 * @param {Object} tree1
 * @return {TypeName} 
 */
function toTree(tree1){
	var arr = [];
	var length = tree1.length;
	if(length<=0){
		return arr;
	}
	var obj = null;
	for(var i=0;i<length;i++){
		obj = {};
		obj.id = tree1[i].nodeId;
		obj.text = tree1[i].nodeName;
		obj.attributes = {
			"description":tree1[i].description,
			"link":tree1[i].link,
			"nodeName":tree1[i].nodeName,
			"parentNodeId":tree1[i].parentNodeId
		};
		obj.children = toTree(tree1[i].children);//递归children节点
		arr.push(obj);
	}
	return arr;
}
tree = toTree(tree);
console.info(JSON.stringify(tree));//得到的就是最终的easyui要求的格式

 

经过上面的处理得到的json数据为:

[{"id":1,"text":"节点0","attribute":{"description":"test","link":"link","nodeName":"节点0","parentNodeId":0},"children":[{"id":2,"text":"节点1","attribute":{"description":"test","link":"link","nodeName":"节点1","parentNodeId":1},"children":[{"id":4,"text":"节点3","attribute":{"description":"test","link":"link","nodeName":"节点3","parentNodeId":2},"children":[]}]},{"id":3,"text":"节点2","attribute":{"description":"test","link":"link","nodeName":"节点2","parentNodeId":1},"children":[{"id":5,"text":"节点4","attribute":{"description":"test","link":"link","nodeName":"节点4","parentNodeId":3},"children":[]},{"id":6,"text":"节点5","attribute":{"description":"test","link":"link","nodeName":"节点5","parentNodeId":3},"children":[]}]}]}]

 

 

 

然后在页面显示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>test1.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="jquery_easyui/themes/default/easyui.css">
	<link rel="stylesheet" type="text/css" href="jquery_easyui/themes/icon.css">
	<script type="text/javascript" src="jquery_easyui/jquery-1.4.2.min.js"></script>
	<script type="text/javascript" src="jquery_easyui/jquery.easyui.min.js"></script>
	<script type="text/javascript">
		$(function(){
			$('#tt2').tree({
				data:data  //data就是上面的 json 数据
			});
		});
	/**  添加些额外的处理
		$(function(){
			$('#tt2').tree({
				data:tree,
				checkbox:false,
				onlyLeafCheck:false,
				dnd:false,
				onClick:function(node){//点击事件
					$("#tt2").tree("toggle",node.target);//当前被点击的节点自动关闭/展开
                                        console.info(node.attributes.link);//获取自定义的属性
				}
			});
		});
	*/
	</script>
  </head>
  
  <body>
    jquery easyui test demo: <br><br>
    <ul id="tt2"></ul>
  </body>
</html>

 就可以看到树状结构了。

 

 

 

参考资料:

 

easyui树形菜单中文参考

 

easyui官网

树形菜单

使用$.fn.tree.defaults重载默认值。

依赖关系

  • 一般拖动
  • 拖动至容器

使用方法

树形菜单可以用<ul>标签定义,它可以定义叶子节点和子节点,代码示例如下:

 
  1. <ul id="tt">  
  2.     <li>  
  3.         <span>Folder</span>  
  4.         <ul>  
  5.             <li>  
  6.                 <span>Sub Folder 1</span>  
  7.                 <ul>  
  8.                     <li>  
  9.                         <span><a href="#">File 11</a></span>  
  10.                     </li>  
  11.                     <li>  
  12.                         <span>File 12</span>  
  13.                     </li>  
  14.                     <li>  
  15.                         <span>File 13</span>  
  16.                     </li>  
  17.                 </ul>  
  18.             </li>  
  19.             <li>  
  20.                 <span>File 2</span>  
  21.             </li>  
  22.             <li>  
  23.                 <span>File 3</span>  
  24.             </li>  
  25.         </ul>  
  26.     </li>  
  27.     <li>  
  28.         <span>File21</span>  
  29.     </li>  
  30. </ul>  

也可以用不带<li>的<ul>标签来定义:

 
  1. <ul id="tt"></ul>  
 
  1. $('#tt').tree({  
  2.     url:'tree_data.json'  
  3. });  

树形菜单的数据格式

每个节点都拥有以下属性:

  • id:节点id,对载入远程数据很重要。
  • text:显示在节点的文本。
  • state:节点状态,'open' or 'closed',默认为'open'。当设置为'closed'时,拥有子节点的节点将会从远程站点载入它们。
  • checked:表明节点是否被选择。
  • attributes:可以为节点添加的自定义属性。
  • children:子节点,必须用数组定义。

示例代码:

 
  1. [{  
  2.     "id":1,  
  3.     "text":"Folder1",  
  4.     "iconCls":"icon-save",  
  5.     "children":[{  
  6.         "text":"File1",  
  7.         "checked":true  
  8.     },{  
  9.         "text":"Books",  
  10.         "state":"open",  
  11.         "attributes":{  
  12.             "url":"/demo/book/abc",  
  13.             "price":100  
  14.         },  
  15.         "children":[{  
  16.             "text":"PhotoShop",  
  17.             "checked":true  
  18.         },{  
  19.             "id": 8,  
  20.             "text":"Sub Bookds",  
  21.             "state":"closed"  
  22.         }]  
  23.     }]  
  24. },{  
  25.     "text":"Languages",  
  26.     "state":"closed",  
  27.     "children":[{  
  28.         "text":"Java"  
  29.     },{  
  30.         "text":"C#"  
  31.     }]  
  32. }]  

属性

名称 类型 描述 默认值
url(超链接) string(字符串) 用以载入远程数据的超链接地址。 null
method(方法) string(字符串) 获取数据的HTTP方法。 post
animate(动画) boolean(布尔型) 定义当节点打开或关闭时是否显示动画效果。 false
checkbox(复选框) boolean(布尔型) 定义是否在每个节点之前显示复选框。 false
cascadeCheck(级联选择) boolean(布尔型) 定义是否支持级联选择。 true
onlyLeafCheck(只选叶子节点) boolean(布尔型) 定义是否只在叶子节点之前显示复选框。 false
dnd(拖放) boolean(布尔型) 定义是否支持拖放。 false
data(数据) array(数组) 将被载入的节点数据。 null

事件

多数事件回调函数都有'node'参数,该参数包含如下属性:

  • id:节点的唯一标识。
  • text:显示在节点上的文本。
  • checked:节点是否被选择。
  • attributes:节点的自定义属性。
  • target:目标DOM对象。
名称 参数 描述
onClick node 当用户点击节点时触发,node参数包含如下属性:
id:节点id。
text:显示在节点上的文本。
checked:节点是否被选择。
attributes:节点的自定义属性。
target:被点击的目标DOM对象。
onDblClick node 当用户双击节点时触发。
onBeforeLoad node, param 在请求载入数据之前触发,返回false将取消载入。
onLoadSuccess node, data 当数据载入成功时触发。
onLoadError arguments 当数据载入失败时触发,arguments参数跟jQuery.ajax的'error'函数一样。
onBeforeExpand node 在节点打开之前触发,返回false将取消打开。
onExpand node 在节点被打开时触发。
onBeforeCollapse node 在节点被关闭之前触发,返回false将取消关闭。
onCollapse node 当节点被关闭时触发。
onCheck node, checked 当用户点击复选框时触发。
onBeforeSelect node 在节点被选择之前触发,返回false将取消选择。
onSelect node 当节点被选择时触发。
onContextMenu e, node 当节点被鼠标右键点击时触发。
onDrop target, source, point 当节点位置被(拖动)更换时触发。
target:DOM对象,需要被拖动动的目标节点。
source:原始节点。
point:指明拖动方式,可选值:'append','top'或者'bottom'。
onBeforeEdit node 在编辑节点之前触发。
onAfterEdit node 在编辑节点之后触发。
onCancelEdit node 当取消编辑时触发。

方法

名称 参数 描述
options none 返回树形菜单属性对象。
loadData data 载入树形菜单数据。
getNode target 获取特定的节点对象。
getData target 获取特定的节点数据,包括它的子节点。
reload target 重新载入树形菜单数据。
getRoot none 获取根节点,返回节点对象。
getRoots none 获取根节点,返回节点数组。
getParent target 获取父节点,target是一个节点DOM对象。
getChildren target 获取子节点,target参数是一个节点DOM对象。
getChecked none 获取所有被选择的节点。
getSelected none 获取被选择的节点并返回,如果没有节点被选择则返回null。
isLeaf target 判断指定的节点是否是叶子节点,target参数是一个节点DOM对象。
find id 查找指定的节点并返回节点对象。
select target 选择一个节点,target参数是一个节点DOM对象。
check target 设置指定的节点为已选择状态。
uncheck target 设置指定的节点为未选择状态。<
collapse target 关闭节点,target参数是一个节点DOM对象。
expand target 打开节点,target参数是一个节点DOM对象。
collapseAll target 关闭所有的节点。
expandAll target 打开所有的节点。
expandTo target 打开从根节点到指定节点之间的所有节点。
append param 添加若干子节点到一个父节点,param参数有2个属性:
parent:DOM对象,将要被添加子节点的父节点,如果未指定,子节点将被添加至根节点。
data:数组,节点数据。
toggle target 打开或关闭节点的触发器,target参数是一个节点DOM对象。
insert param 在一个指定节点之前或之后插入节点,'param'参数包含如下属性:
before:DOM对象,在某个节点之前插入。
after: DOM对象,在某个节点之后插入。
data:对象,节点数据。
remove target 移除一个节点和它的子节点,target参数是一个节点DOM对象。
pop target 移除一个节点和它的子节点,该方法跟remove方法一样,不同的是它将返回被移除的节点数据。
update param 更新指定的节点,param参数有如下属性:
target(DOM对象,将被更新的目标节点),id,text,iconCls,checked等。
enableDnd none 启用拖动特性。
disableDnd none 禁用拖动特性。
beginEdit nodeEl 开始编辑节点。
endEdit nodeEl 结束编辑节点。
cancelEdit nodeEl 取消编辑节点。

 

你可能感兴趣的:(jquery,easyui,tree)