你的位置:首页 > Java教程

[Java教程]zTree的getChangeCheckedNodes()使用心得以及一次性获取所有节点


zTree的getChangeCheckedNodes()方法用于获取输入框勾选状态被改变的节点集合。如果需要获取每次操作后全部被改变勾选状态的节点数据,
请在每次勾选操作后,遍历所有被改变勾选状态的节点数据,让其 checkedOld = checked 就可以了。

问题一:checkedOld是什么?
仔细查看api会发现“treeNode 节点数据详解”模块有一个叫作checkedOld的excheck扩展属性,表示节点的 checkBox / radio 在初始化时的勾选状态。
[setting.check.enable = true & treeNode.nocheck = false 时有效]
也就是说每一个节点都有一个chekcedOld属性。就像name属性一样。

问题二:checkedOld是什么时候初始化的?
1、zTree 初始化节点数据时会对此属性进行赋值,因此请勿对此属性初始化(默认值:checked的初始化值)
这说明初始化的时候
var zNodes = [{name:"test",checkedOld:true}];
如此赋值是无效的。如果想要checkedOld为true,应该通过设置checked值来实现,比如
var zNodes = [{name:"test",checked:true}];
2、如需配合 zTreeObj.getChangeCheckedNodes 方法实现特殊功能,可以根据需求在使用中自行修改 checkedOld 数据
比如设置当前勾选状态为参照标准,可通过如下JS实现
var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
nodes = zTree.getChangeCheckedNodes();
for (var i=0, l=nodes.length; i<l; i++) {
  nodes[i].checkedOld = nodes[i].checked;
}

问题三:获取getChangeCheckedNodes()节点的改变方向,哪些是未勾选变为勾选的?哪些是由勾选状态变为未勾选状态的?
只要明白一个问题,通过getChangeCheckedNodes()方法获取的节点,其实就是checkedOld属性值和checked属性值不一致的节点,
所以只要遍历一遍获取的节点集合,通过nodes[i].checked(或者nodes[i].checkedOld)的值辨别即可。

扩展:如何获取zTree的所有节点的集合?
getNodes(),用于获取 zTree 的全部节点数据。但是:
1、Array 仅仅是根节点的集合(默认情况子节点都处于 children 属性下);2、如需遍历全部节点需要利用递归,或利用 transformToArray 方法 将数据变成简单的 Array 集合
如何不使用遍历或递归,来获取所有节点集合呢。试试这两个:
var nodes = zTreeObj.getNodesByParam("checkedOld", false, null); //适用于初始化时所有节点的checked属性值都为缺省或false
var nodes = zTreeObj.getNodesByParamFuzzy("name", "", null); //模糊查询