1. 主页 > 世界杯2021 >

ztree刷新(重置)整棵树,并且刷新完之后选中刷新之前的节点,展开之前展开的节点

首先说一件脑壳很疼的事情,就是在项目中用到了很多ztree,这块是我最头疼的,因为测试每天提的bug都是这块问题的,说来说去,就是一句话,做这些操作的时候只要刷新一下(或重新加载一下这颗树)就好了。

那么重点来了,怎样才能做到在操作节点的时候刷新这颗树呢,我尝试了很多次都不能成功,最后,终于解决了。。。。。。内心那是无比的开心呀。。。

刷新操作的时候,首先要重置这些树,并且获取到刷新之前选中的节点,刷新之后让其继续选中刷新之前选中的节点,并且展开刷新之前展开的节点。。。。好了,话不多说,上代码

// 我自己封装了一个函数,哪边用到哪边调用就好了

function refresh(){

// 获取整棵树上所有的节点

var zNodes = getPolicyList();

if (zNodes.length > 0) {

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

// 获取刷新之前选中的节点

var nodes = treeObj.getSelectedNodes();

var selectId = nodes[0].id;

// 重置树

$.fn.zTree.init($("#policyTree"), policyTreeSetting, zNodes);

// 刷新之后默认选中刷新之前的节点

var node = treeObj.getNodeByParam("id", selectId);

treeObj.selectNode(node, true);

// 刷新之后默认展开刷新之前展开的节点

var cookie = $.cookie("z_tree" + window.location);

if (cookie) {

z_tree = JSON.parse(cookie);

for (var i = 0; i < z_tree.length; i++) {

var node = treeObj.getNodeByParam('id', z_tree[i]);

treeObj.expandNode(node, true, false);

}

}

}

}

注意:此处需要用到jquery.cookie.js,导入这个js,默认展开的才会展开

除此之外,还需要用到两个函数,在ztree的callback中写,相信用过ztree的人都懂

callback:{

onExpand: onExpand,//刷新时展开节点

onCollapse: onCollapse//刷新时关闭节点

}

/**

* 刷新节点后默认打开原来的位置

* @param event

* @param treeId

* @param treeNode

*/

function onExpand(event, treeId, treeNode) {

var cookie = $.cookie("z_tree" + window.location);

var z_tree = new Array();

if (cookie) {

z_tree = JSON.parse(cookie);

}

if ($.inArray(treeNode.id, z_tree) < 0) {

z_tree.push(treeNode.id);

}

$.cookie("z_tree" + window.location, JSON.stringify(z_tree))

}

/**

* 刷新节点后关闭节点的位置

* @param event

* @param treeId

* @param treeNode

*/

function onCollapse(event, treeId, treeNode) {

var cookie = $.cookie("z_tree" + window.location);

var z_tree = new Array();

if (cookie) {

z_tree = JSON.parse(cookie);

}

var index = $.inArray(treeNode.id, z_tree);

z_tree.splice(index, 1);

for (var i = 0; i < treeNode.children.length; i++) {

index = $.inArray(treeNode.children[i].id, z_tree);

if (index > -1) z_tree.splice(index, 1);

}

$.cookie("z_tree" + window.location, JSON.stringify(z_tree))

}

好吧,一个完完整整的关于ztree刷新整棵树,刷新完之后选中之前选中的节点,展开之前展开的节点就这样实现了!