一、需要达到的效果
如下图所示,父节点1和父节点3现在的状态是展开的,其它父节点的状态是合并的;
现在的要求是,刷新页面之后,保持这样的状态:
二、解决
step1 添加插件
在JSP或者HTML上面添加插件,包括jquery.js、jquery.ztree.js、jquery.cookie.js
重点说一下jquery.cookie.js,这个插件主要是记录当前的状态;
等到刷新页面之后,就可以直接从cookie里面获取到原来的状态
step2 记录状态
我们需要知道两点:
1.ztree默认是闭合状态,展开的状态可以通过点击父节点来改变,
2.我们只需要记录改变的父节点就行了;
所以,我们就可以在点击父节点之后记录这个父节点就行了,
判断了点击事件是展开还是闭合之后,我们把下面的代码放置到对应的地方!
下面是记录点击后展开的状态,其实记录的是父节点:
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));
下面是记录点击后闭合的状态,其实也是记录的是父节点:
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));
step3 获取状态并设置到对应的父节点
加载ztree树之后,我们可以通过下面的代码获取到状态,
其中,childNodes是所有的节点(包括父节点),遍历childNodes,我们就可以找到cookie中对应的父节点
然后把这个节点的状态改为true就行啦!
var cookie = $.cookie("z_tree" + window.location); if (cookie) { z_tree = JSON.parse(cookie); for (var i = 0; i < z_tree.length; i++) { for ( var index in childNodes) { if (z_tree[i] == childNodes[index].id) { childNodes[index].open = true; } } } }