// 選中父節點時,選中所有子節點
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);
}
})
}