JQuery Ztree 树插件配置与应用小结 2

简介: JQuery Ztree 树插件配置与应用小结

 

setting 举例: 设置选择框为 radio

var setting = {

   check: {

       enable: true,

       chkStyle: "radio"

   }

};

......

 

setting.view.selectedMulti

设置是否允许同时选中多个节点。

默认值: true

 

参数值:true / false 分别表示 支持 / 不支持 同时选中多个节点

1、设置为 true时,按下 Ctrl 或 Cmd 键可以选中多个节点

2、设置为 true / false 都不影响按下 Ctrl 或 Cmd 键可以让已选中的节点取消选中状态( 取消选中状态可以参考 setting.view.autoCancelSelected )

 

setting 举例: 禁止多点同时选中的功能

var setting = {

   view: {

       selectedMulti: false

   }

};

......

 

setting.data.simpleData.enable

确定 zTree 初始化时的节点数据、异步加载时的节点数据、或 addNodes 方法中输入的 newNodes 数据是否采用简单数据模式 (Array)

不需要用户再把数据库中取出的 List 强行转换为复杂的 JSON 嵌套格式

默认值:false

 

参数:true / false 分别表示 使用 / 不使用 简单数据模式

如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。

 

setting.data.simpleData.idKey

节点数据中保存唯一标识的属性名称。[setting.data.simpleData.enable = true 时生效]

默认值:"id"

 

setting.data.simpleData.pIdKey

节点数据中保存其父节点唯一标识的属性名称。[setting.data.simpleData.enable = true 时生效]

默认值:"pId"

 

rootPId

用于修正根节点父节点数据,即 pIdKey 指定的属性值。[setting.data.simpleData.enable = true 时生效]

默认值:null

 

setting 举例: 使用简单 Array 格式的数据

var setting = {

   data: {

       simpleData: {

           enable: true,

           idKey: "id",

           pIdKey: "pId",

           rootPId: 0

       }

   }

};

var treeNodes = [

   {"id":1, "pId":0, "name":"test1"},

   {"id":11, "pId":1, "name":"test11"},

   {"id":12, "pId":1, "name":"test12"},

   {"id":111, "pId":11, "name":"test111"}

];

......

 

setting.edit.enable

设置 zTree 是否处于编辑状态

请在初始化之前设置,初始化后需要改变编辑状态请使用 zTreeObj.setEditable() 方法

默认值: false

 

参数说明:true / false 分别表示 可以 / 不可以 编辑

编辑状态规则说明

1、点击节点时,不会打开 node.url 指定的 URL。

2、全面支持 编辑 与 异步加载 状态共存。

3、可以对节点进行拖拽,且支持多棵树之间进行拖拽。

4、支持拖拽时 复制/移动 节点。(参考: setting.edit.drag.isCopy / setting.edit.drag.isMove)

5、可以通过编辑按钮修改 name 属性。

6、可以通过删除按钮删除节点。

请注意大小写,不要改变

 

setting 举例:设置 zTree 进入编辑状态

var setting = {

   edit: {

       enable: true

   }

};

......

 

setting.callback.beforeRemove

用于捕获节点被删除之前的事件回调函数,并且根据返回值确定是否允许删除操作

默认值:null

 

参数说明

treeIdString  对应 zTree 的 treeId,便于用户操控

treeNodeJSON  将要删除的节点 JSON 数据对象

 

返回值  true / false

如果返回 false,zTree 将不删除节点,也无法触发 onRemove 事件回调函数

 

setting && function举例: 禁止全部删除操作

function zTreeBeforeRemove(treeId, treeNode) {

   return false;

}

 

var setting = {

   edit: {

       enable: true

   },

   callback: {

       beforeRemove: zTreeBeforeRemove

   }

};

......

 

setting.callback.beforeEditName

用于捕获节点编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态

此事件回调函数最主要是用于捕获编辑按钮的点击事件,然后触发自定义的编辑界面操作。

默认值:null

 

参数说明

treeIdString  对应 zTree 的 treeId,便于用户操控

treeNodeJSON  将要进入编辑名称状态的节点 JSON 数据对象

 

返回值 true / false

如果返回 false,节点将无法进入 zTree 默认的编辑名称状态

 

setting & function 举例: 禁止修改父节点的名称

function zTreeBeforeEditName(treeId, treeNode) {

   return !treeNode.isParent;

}

 

var setting = {

   edit: {

       enable: true

   },

   callback: {

       beforeEditName: zTreeBeforeEditName

   }

};

......

 

setting.callback.beforeDrag

用于捕获节点被拖拽之前的事件回调函数,并且根据返回值确定是否允许开启拖拽操作

默认值:null

 

参数说明

treeIdString   被拖拽的节点 treeNodes 所在 zTree 的 treeId,便于用户操控

treeNodesArray(JSON)   要被拖拽的节点 JSON 数据集合

v3.x 允许多个同级节点同时被拖拽,因此将此参数修改为 Array(JSON)

如果拖拽时多个被选择的节点不是同级关系,则只能拖拽鼠标当前所在位置的节点

 

返回值 true / false

如果返回 false,zTree 将终止拖拽,也无法触发 onDrag / beforeDrop / onDrop 事件回调函数

 

setting & function 举例: 禁止全部拖拽操作

function zTreeBeforeDrag(treeId, treeNodes) {

   return false;

};

var setting = {

   edit: {

       enable: true

   },

   callback: {

       beforeDrag: zTreeBeforeDrag

   }

};

......

 

 

$.fn.zTree.init

zTree 初始化方法,创建 zTree 必须使用此方法

1、页面需要进行 W3C 申明,例如:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">。

2、需要首先加载 jquery-1.4.2.js 或其他更高版本的 jQuery 。

3、需要加载 jquery-ztree.core-3.0.js,如果需要用到 编辑功能 或 checkbox / radio 还需要分别加载 jquery-ztree.exedit-3.0.js 和 jquery-ztree.excheck-3.0.js 。

4、需要加载 zTreeStyle.css 以及 zTreeStyle 目录下的 img 文件。

5、如果需要使用自定义图标请参考相应的Demo。

6、请注意设置 zTree 的容器样式 class="ztree",其中 "ztree" 这个 className,可以根据需要随意修改,别忘了修改 css 中对应名字就是了,对于容器如果需要增加其他特殊样式,可根据自己的需要进行修改。

 

参数说明

objjQuery Object  用于展现 zTree 的 DOM 容器

zSettingJSON  zTree 的配置数据,具体请参考 “setting 配置详解”中的各个属性详细说明

zNodesArray(JSON) / JSON      zTree 的节点数据,具体请参考 “treeNode 节点数据详解”中的各个属性详细说明

1、v3.x 支持单独添加一个节点,即如果只新增一个节点,不用必须包在数组中

2、如果需要异步加载根节点,可以设置为 null 或 [ ]

3、使用简单数据模式,请参考 setting.data.simpleData 内的属性说明

 

返回值JSON

zTree 对象,提供操作 zTree 的各种方法,对于通过 js 操作 zTree 来说必须通过此对象

如果不需要自行设定全局变量保存,可以利用 $.fn.zTree.getZTreeObj 方法随时获取

 

setting & function 举例:  简单创建 zTree 演示

<!DOCTYPE html>

<HTML>

<HEAD>

 <TITLE> ZTREE DEMO </TITLE>

 <meta http-equiv="content-type" content="text/html; charset=UTF-8">

 <link rel="stylesheet" href="zTreeStyle/zTreeStyle.css" type="text/css">

 <script type="text/javascript" src="jquery-1.4.2.js"></script>

 <script type="text/javascript" src="jquery.ztree.core.js"></script>

<!--

 <script type="text/javascript" src="jquery.ztree.excheck.js"></script>

 <script type="text/javascript" src="jquery.ztree.exedit.js"></script>

-->

 <SCRIPT type="text/javascript" >

   var zTreeObj,

   setting = {

       view: {

           selectedMulti: false

       }

   },

   zTreeNodes = [

       {"name":"网站导航", open:true, children: [

           { "name":"google", "url":"http://g.cn", "target":"_blank"},

           { "name":"baidu", "url":"http://baidu.com", "target":"_blank"},

           { "name":"sina", "url":"http://www.sina.com.cn", "target":"_blank"}

           ]

       }

   ];

 

   $(document).ready(function(){

       zTreeObj = $.fn.zTree.init($("#tree"), setting, zTreeNodes);

 

   });

 </SCRIPT>

</HEAD>

 

<BODY>

<ul id="tree" class="ztree" style="width:230px; overflow:auto;"></ul>

</BODY>

</HTML>

 

$.fn.zTree.getZTreeObj

zTree v3.x 专门提供的根据 treeId 获取 zTree 对象的方法。

必须在初始化 zTree 以后才可以使用此方法。

有了这个方法,用户不再需要自己设定全局变量来保存 zTree 初始化后得到的对象了,而且在所有回调函数中全都会返回 treeId 属性,用户可以随时使用此方法获取需要进行操作的 zTree 对象

 

参数说明

treeIdString  zTree 的 DOM 容器的 id

 

返回值JSON

zTree 对象,提供操作 zTree 的各种方法,对于通过 js 操作 zTree 来说必须通过此对象

 

function 举例:  获取 id 为 tree 的 zTree 对象

var treeObj = $.fn.zTree.getZTreeObj("tree");

 

 

zTreeObj.checkAllNodes

勾选 或 取消勾选 全部节点。[setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时有效]

此方法不会触发 beforeCheck / onCheck 事件回调函数。

 

参数说明

checked   true 表示勾选全部节点; false 表示全部节点取消勾选

不会影响 treeNode.nocheck = true 的节点。

不会影响未加载的节点。

 

无返回值

 

function 举例: 勾选全部节点

var treeObj = $.fn.zTree.getZTreeObj("tree");

treeObj.checkAllNodes(true);

 

 

zTreeObj.checkNode

勾选 或 取消勾选 单个节点。[setting.check.enable = true 时有效]

v3.x 中 checkNode() 方法可以触发 beforeCheck / onCheck 事件回调函数。

 

参数说明

treeNode      需要勾选 或 取消勾选 的JSON节点数据

请务必保证此节点数据对象 是 zTree 内部的数据对象

 

checked  true 表示勾选节点; false 表示节点取消勾选。省略此参数,则根据对此节点的勾选状态进行 toggle 切换

不影响 treeNode.nocheck = true 的节点。

 

checkTypeFlag  为true 表示按照 setting.check.chkboxType 属性进行父子节点的勾选联动操作,为false 表示只修改此节点勾选状态,无任何勾选联动操作(个人理解,选中父节点,自动选中其下所有子节点,类似这种联动);为 false 且 treeNode.checked = checked 时,不会触发回调函数,直接返回

不影响父子节点中 treeNode.nocheck = true 的节点。

 

callbackFlag  为 true 表示执行此方法时触发 beforeCheck & onCheck 事件回调函数;为 false 表示执行此方法时不触发事件回调函数,省略此参数,等同于 false

 

目前无任何返回值

 

function 举例: 勾选当前选中的节点

var treeObj = $.fn.zTree.getZTreeObj("tree");

var nodes = treeObj.getSelectedNodes();

for (var i=0, l=nodes.length; i < l; i++) {

   treeObj.checkNode(nodes[i], true, true);

}

 

zTreeObj.getChangeCheckedNodes

获取输入框勾选状态被改变的节点集合(与原始数据 checkedOld 对比)。[setting.check.enable = true 时有效]

 

参数说明

返回值 Array(JSON)

返回全部勾选状态被改变的节点集合 Array

 

如果需要获取每次操作后全部被改变勾选状态的节点数据,请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。

 

function 举例: 获取当前勾选状态被改变的节点集合

var treeObj = $.fn.zTree.getZTreeObj("tree");

var nodes = treeObj.getChangeCheckedNodes();

 

zTreeObj.getNodes

获取 zTree 的全部节点数据

 

参数说明

返回值 Array(JSON) 全部节点数据

1Array 仅仅是根节点的集合

(默认情况子节点都处于 children 属性下);

2、如需遍历全部节点需要利用递归,或利用 transformToArray 方法 将数据变成简单的 Array 集合

3、对于异步加载模式下,尚未加载的子节点是无法通过此方法获取的。

 

 

function 举例: 获取全部节点数据

var treeObj = $.fn.zTree.getZTreeObj("tree");

var nodes = treeObj.getNodes();

 

 

zTreeObj.getCheckedNodes

获取输入框被勾选 或 未勾选的节点集合。[setting.check.enable = true 时有效]

 

参数说明

checked    true 表示获取 被勾选 的节点集合,false 表示获取 未勾选 的节点集合。省略此参数,等同于 true。

 

返回值 Array(JSON)

返回全部符合要求的节点集合 Array

 

function 举例: 获取当前被勾选的节点集合

var treeObj = $.fn.zTree.getZTreeObj("tree");

var nodes = treeObj.getCheckedNodes(true);

 

 

注意:

1、对于 treeNode.nocheck = true 的节点不进行获取。

2、默认情况下,按类似以下配置和初始化方式,调用该API,获取不到数据,因为全部节点都是没选中的,解决方案如下:

1)先通过ztreeObject.checkAllNodes(false) 取消所有节点的选中状态(因为一开始全部节点都是没选中的,所以调用该API后,所有节点都是改变过状态的)

2)然后通过ztreeObject.getChangeCheckedNodes()  获取所有改变过状态的节点(所有节点)

3)判断对象关联的节点id是否在全部节点id范围内,在则通过ztreeObj.checkNode(treeNode,  true, false)

 

/**

* ztree 设置

*

*/

setting = {

   view: {

       selectedMulti: false

   },

   check: {

       enable: true, // 表示显示复选框或单选框

       chkStyle:'checkbox' // zTreeObj.checkAllNodes方法依赖的配置

   },

   data: {

       simpleData: {

           enable: true, // true表示使用简单数据模式

           idKey: "id",   // 节点数据中保存唯一标识的属性名称

           pIdKey: "pId", // 节点数据中保存其父节点唯一标识的属性名称

           rootPId: 0     // 用于修正根节点父节点数据,即 pIdKey 指定的属性值

       }

   },

   edit: {

       enable: false // 禁止编辑

   },

   callback: {

       beforeDrag:function(){ return false; } // 禁止拖拽

   }

};

 

// 获取资源树节点

getResourcesTreeNodes().then(function(result) {

   if (result.success == 'true') {

       $.fn.zTree.init($('#' + resouceZtreeID), setting,  result.data);

       // 获取已经关联资源ID并勾选已关联资源节点

       $.ajax({

           type: "get",

           url: queryResourceIDsForRoleURL,

           async: true,

           data:{'roleID':currentRole.id},

           success: function (result) {

               if (result.success == 'true') {

                   var treeObj = $.fn.zTree.getZTreeObj(resouceZtreeID);

                   treeObj.checkAllNodes(false); //  表示全部节点取消勾选

                   var nodes = treeObj.getChangeCheckedNodes() // 获取改变过状态的节点

 

                   var nodeIDs = {};

                   $.each(nodes, function() {

                       nodeIDs[this.id] = this;

                   });

 

                   //var keyAarray = Object.keys(nodeIDs);

                   $.each(result.data, function() {

                       var id = this.toString();

                       try {

                           treeObj.checkNode(nodeIDs[id], true, false); // 因为nodeIDs[id]可能不存在

                       } catch (e) {

                           // 啥也不做

                       }

 

                   });

               } else {

                   alert(result.msg + "" + result.reason);

 

               }

           },

           error: function(XmlHttpRequest, textStatus, errorThrown) {

                  alert('获取树资源节点失败' + XmlHttpRequest.responseText);

           }

       });

   } else {

       alert(result.msg + "" + result.reason);

   }

});

 

后台代码片段

 

def resource_ztree_nodes(request):

   '''

   获取资源节点树

   :param request:

   '''

 

   if request.method == 'GET':

       try:

           ztree_nodes_list = []

 

           def get_sub_resource(resource, father_node):

               '''

               获取子级资源

               '''

               nonlocal ztree_nodes_list

               resource_id = resource['id']   # 获取上级资源id点的id

 

               # 仅查找状态为 1 即设置为显示的资源

               sub_sources = Resource.objects.filter(parent_id=resource_id).order_by('order').values()

               if sub_sources: #如果存在子级资源,遍历添加子级资源

                   father_node['isParent'] = 'true'

                   for sub_source in sub_sources:

                       sub_node = {} # 重置变量为字典,用于存储下一个节点

                       sub_node['id'] = sub_source['id']

                       sub_node['name'] = sub_source['name'] + ' [id:%s 排序:%s]' % (str(sub_source['id']), str(sub_source['order']))

                       parent_id = sub_source['parent_id']

                       if not parent_id:

                           parent_id = 0

                       sub_node['pId'] = parent_id

                       sub_node['open'] = 'true'

                       ztree_nodes_list.append(sub_node)

 

                       get_sub_resource(sub_source, sub_node)

 

           # 获取所有一级资源

           father_resources = Resource.objects.filter(parent_id__isnull=True).order_by('order').values()

           for father_resource in father_resources:

               father_node = {}

               father_node['id'] = father_resource['id']

               father_node['name'] = father_resource['name'] + ' [id:%s 排序:%s]' % (str(father_resource['id']), str(father_resource['order']))

               parent_id = father_resource['parent_id']

               if not parent_id:

                   parent_id = 0

               father_node['pId'] = parent_id

               father_node['open'] = 'true'

 

               ztree_nodes_list.append(father_node)

 

               get_sub_resource(father_resource, father_node) # 获取子级资源

 

           content = {'data': ztree_nodes_list, 'msg':'获取资源节点树成功', 'success':'true', 'reason':''}

       except Exception as e:

           logger.error('getting resource failed: %s' % e)

           content = {'data':[], 'msg':'获取资源节点树失败', 'success':'false', 'reason': '%s' % e}

   else:

       logger.error('only get method allowed for getting resource ztree nodes')

       content = {'data':[], 'msg':'获取资源节点树失败', 'success':'false', 'reason': 'only get method allowed for getting resource ztree nodes'}

   return JsonResponse(content)

 

 

 

参考链接:

http://www.treejs.cn/v3/demo.php#_101

http://www.treejs.cn/v3/api.php

 

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2w2jljy48u0w0

目录
相关文章
|
2天前
|
JavaScript
jquery文字动画特效插件animatext
jquery文字动画特效插件animatext
18 9
|
4天前
|
移动开发 JavaScript 前端开发
简单易用的jquery响应式轮播图插件ma5slider
ma5slider是一款简单易用的jquery响应式轮播图插件。该轮播图支持鼠标拖拽,可以通过CSS定制外观,支持无限循环模式,内置水平,垂直和淡入淡出三种轮播图过渡动画效果。
|
2天前
|
JavaScript 容器
jquery和CSS3图片排序过滤搜索插件
Filterizr是一款jquery和CSS3图片排序过滤插件。它可以对一组图片进行排序,按条件过滤和按关键字搜索。并在显示结果时使用指定的CSS3动画过渡效果。
14 2
|
2天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
5天前
|
JavaScript 容器
jQuery消息通知显示插件
MessageNotifyPlugin是一款简单的jQuery消息通知显示插件。该jQuery消息通知显示插件能够自动生成最新消息和提醒消息两个消息通知按钮。并且可以设置消息的是否已读状态等
8 2
|
JavaScript 数据安全/隐私保护
jquery ztree的案例,附源代码
播客:http://itindex.net/detail/46094-jquery-ztree-%E7%A8%8B%E5%BA%8F   源代码: http://download.csdn.net/download/nuptboyzhb/6347025   如果你没有csdn账号,请在百度网盘下载,版权归原作者,这里只是学习传播。
742 0
|
6天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
40 21
|
7天前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
38 16
|
7天前
|
JavaScript
简洁实用的jQuery进度条插件
这是一款简洁实用的jQuery进度条插件。该插件使用简单,通过在页面中放置指定的HTML代码,即可生成带动画效果的进度条。
|
6天前
|
JavaScript 容器
jQuery文字跑马灯插件Marquee
jQuery.Marquee是一款jQuery文字跑马灯插件。jQuery.Marquee跑马灯插件可以结合使用CSS3动画,制作文字的上下左右移动效果。