// 選中父節點時,選中所有子節點 function getChildNodeIdArr(node) { var ts = []; if (node.nodes) { for (x in node.nodes) { ts.push(node.nodes[x].nodeId); if (node.nodes[x].nodes) { var getNodeDieDai = getChildNodeIdArr(node.nodes[x]); for (j in getNodeDieDai) { ts.push(getNodeDieDai[j]); } } } } else { ts.push(node.nodeId); } return ts; } // 選中所有子節點時,選中父節點 取消子節點時取消父節點 function setParentNodeCheck(node) { var parentNode = $("#tree").treeview("getNode", node.parentId); if (parentNode.nodes) { var checkedCount = 0; for (x in parentNode.nodes) { if (parentNode.nodes[x].state.checked) { checkedCount++; } else { break; } } if (checkedCount == parentNode.nodes.length) { //如果子節點全部被選 父全選 $("#tree").treeview("checkNode", parentNode.nodeId); setParentNodeCheck(parentNode); } else { //如果子節點未全部被選 父未全選 $('#tree').treeview('uncheckNode', parentNode.nodeId); setParentNodeCheck(parentNode); } } } // 取消父節點時 取消所有子節點 function setChildNodeUncheck(node) { if (node.nodes) { var ts = []; //當前節點子集中未被選中的集合 for (x in node.nodes) { if (!node.nodes[x].state.checked) { ts.push(node.nodes[x].nodeId); } if (node.nodes[x].nodes) { var getNodeDieDai = node.nodes[x]; console.log(getNodeDieDai); for (j in getNodeDieDai) { if (!getNodeDieDai.state.checked) { ts.push(getNodeDieDai[j]); } } } } } return ts; } function getTree() { $('#tree').treeview({ data: res.ret_data, showIcon: false, showCheckbox: true, showBorder: false, onNodeChecked: function (event, node) { //選中節點 var selectNodes = getChildNodeIdArr(node); //獲取所有子節點 if (selectNodes) { //子節點不為空,則選中所有子節點 $('#tree').treeview('checkNode', [selectNodes, { silent: true }]); } var parentNode = $("#tree").treeview("getNode", node.parentId); setParentNodeCheck(node); }, onNodeUnchecked: function (event, node) { //取消選中節點 // 取消父節點 子節點取消 var selectNodes = setChildNodeUncheck(node); //獲取未被選中的子節點 var childNodes = getChildNodeIdArr(node); //獲取所有子節點 if (selectNodes && selectNodes.length == 0) { //有子節點且未被選中的子節點數目為0,則取消選中所有子節點 console.log("反選"); $('#tree').treeview('uncheckNode', [childNodes, { silent: true }]); } // 取消節點 父節點取消 var parentNode = $("#tree").treeview("getNode", node.parentId); //獲取父節點 var selectNodes = getChildNodeIdArr(node); setParentNodeCheck(node); } }) }