项目需求
最近整理公司后台,需要用到ztree做一个无限极分类的树节点。选中规则如下:
- 父节点下面的子节点全部选中。则只需要父节点
- 父节点下面的子节点没有被全选,则需要被选中的子节点
无限极分类啊,哥哥们。不是省市区三级分类,大不了多堆几个循环。还得考虑祖节点和子节点的关系。
解决方案
面对这种需求第一反应就是递归,获取所有被选中节点。筛选出level=0
的节点。递归遍历判断子节点是否选中,全选,则把父节点筛选出来。不全选,则把选中的子节点筛选出来。
挂在懵逼树上一天....毫无头绪...
那就换个思路解决:
/**
* 添加类目词操作
* 1. 如果节点是父节点并且子节点全部选中则写入数组
* 2. 如果节点是子节点并且节点的父节点不存在数组,则写入数组
* 3. 过滤数组中的父节点,移除低阶的父节点
* 4. ztree返回选中数据,按选中顺序返回,不需要进行排序
* 5. 别鸡儿用什么递归....
* @param event
* @param treeId
* @param treeNode
*/
, actionCheck: function (event, treeId, treeNode) {
let treeObj = $.fn.zTree.getZTreeObj(treeId);
let nodes = treeObj.getCheckedNodes(true);
let checkNode = [];
$.each(nodes, function (key, item) {
if (item.isParent) {
if (!item.getCheckStatus().half)
checkNode.push(item);
} else {
if (checkNode.findIndex(function (val) {return val.id === item.parent}) === -1)
checkNode.push(item);
}
});
checkNode.forEach(function (item) {
checkNode = checkNode.filter(val => val.parent !== item.id);
});
console.log(checkNode);
}
大功告成!!!
效果图
各位大神要是有什么递归的解决方案,不吝赐教啊,把我从懵逼树上放下来。感激不尽
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。