现在只单独实现了所有父节点和所有子节点取消选中,如果同时设置就会有问题,需求是选中节点的所有父节点和字节点都取消选中
const setNode = (node) => {
if(node.checked) {
// 如果当前是选中checkbox,则递归设置父节点和父父节点取消选中
setParentNode(node);
} else {
// 当前是取消选中,将所有子节点都取消选中
setChildenNode(node);
}
}
const setParentNode = (node) => {
// 所有父节点取消选中
if(node.parent) {
for(const key in node) {
if(key === 'parent') {
node[key].checked = false;
setParentNode(node[key]);
}
}
}
// 所有子节点取消选中
if(node.childNodes) {
setChildenNode(node)
}
}
const setChildenNode = (node) => {
let len = node.childNodes.length;
for(let i = 0; i < len; i++) {
node.childNodes[i].checked = false;
setChildenNode(node.childNodes[i]);
}
}