效果图
1 // 选中父节点时,选中所有子节点 2 function getChildNodeIdArr(node) { 3 var ts = []; 4 if (node.nodes) { 5 for (x in node.nodes) { 6 ts.push(node.nodes[x].nodeId); 7 if (node.nodes[x].nodes) { 8 var getNodeDieDai = getChildNodeIdArr(node.nodes[x]); 9 for (j in getNodeDieDai) { 10 ts.push(getNodeDieDai[j]); 11 } 12 } 13 } 14 } else { 15 ts.push(node.nodeId); 16 } 17 return ts; 18 }
1 // 选中所有子节点时,选中父节点 取消子节点时取消父节点 2 function setParentNodeCheck(node) { 3 var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId); 4 if (parentNode.nodes) { 5 var checkedCount = 0; 6 for (x in parentNode.nodes) { 7 if (parentNode.nodes[x].state.checked) { 8 checkedCount ++; 9 } else { 10 break; 11 } 12 } 13 if (checkedCount == parentNode.nodes.length) { //如果子节点全部被选 父全选 14 $("#treeview-checkable").treeview("checkNode", parentNode.nodeId); 15 setParentNodeCheck(parentNode); 16 }else { //如果子节点未全部被选 父未全选 17 $('#treeview-checkable').treeview('uncheckNode', parentNode.nodeId); 18 setParentNodeCheck(parentNode); 19 } 20 } 21 }
1 // 取消父节点时 取消所有子节点 2 function setChildNodeUncheck(node) { 3 if (node.nodes) { 4 var ts = []; //当前节点子集中未被选中的集合 5 for (x in node.nodes) { 6 if (!node.nodes[x].state.checked) { 7 ts.push(node.nodes[x].nodeId); 8 } 9 if (node.nodes[x].nodes) { 10 var getNodeDieDai = node.nodes[x]; 11 console.log(getNodeDieDai); 12 for (j in getNodeDieDai) { 13 if (!getNodeDieDai.nodes[x].state.checked) { 14 ts.push(getNodeDieDai[j]); 15 } 16 } 17 } 18 } 19 } 20 return ts; 21 }
1 onNodeChecked: function(event, node) { //选中节点 2 var selectNodes = getChildNodeIdArr(node); //获取所有子节点 3 if (selectNodes) { //子节点不为空,则选中所有子节点 4 $('#treeview-checkable').treeview('checkNode', [selectNodes, { silent: true }]); 5 } 6 var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId); 7 setParentNodeCheck(node); 8 }, 9 onNodeUnchecked: function(event, node) { //取消选中节点 10 // 取消父节点 子节点取消 11 var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点 12 var childNodes = getChildNodeIdArr(node); //获取所有子节点 13 if (selectNodes && selectNodes.length==0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点 14 console.log("反选"); 15 $('#treeview-checkable').treeview('uncheckNode', [childNodes, { silent: true }]); 16 } 17 // 取消节点 父节点取消 18 var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId); //获取父节点 19 var selectNodes = getChildNodeIdArr(node); 20 setParentNodeCheck(node); 21 } 22 });
以上部分是本人研究,有错漏之处请见谅/ *-*/.....