bootstrap-treeview实现全选和反向选择以及选中所有子项父类默认选中

//treeview的选中和未选中方法中的参数
onNodeChecked: function(event, node) {
var selectNodes = getChildNodeIdArr(node); //获取所有子节点
if (selectNodes) { //子节点不为空,则选中所有子节点
$('#using_json').treeview('checkNode', [selectNodes, { silent: true }]);
}
var parentNode = $("#using_json").treeview("getNode", node.parentId);
setParentNodeCheck(node);
},
onNodeUnchecked: function (event, node) {
// checkmenus.removevalue(node);
// 取消父节点 子节点取消
var selectNodes = setChildNodeUncheck(node); //获取未被选中的子节点
var childNodes = getChildNodeIdArr(node); //获取所有子节点
if (selectNodes && selectNodes.length==0) { //有子节点且未被选中的子节点数目为0,则取消选中所有子节点
console.log("反选");
$('#using_json').treeview('uncheckNode', [childNodes, { silent: true }]);
}
// 取消节点 父节点取消
var parentNode = $("#using_json").treeview("getNode", node.parentId); //获取父节点
var selectNodes = getChildNodeIdArr(node);
setParentNodeCheck(node);
}


// 选中父节点时,选中所有子节点
function getChildNodeIdArr(node) {
var ts = [];
if (node.nodes) {
for (var x in node.nodes) {
ts.push(node.nodes[x].nodeId);
if (node.nodes[x].nodes) {
var getNodeDieDai = getChildNodeIdArr(node.nodes[x]);
for (var j in getNodeDieDai) {
ts.push(getNodeDieDai[j]);
}
}
}
} else {
ts.push(node.nodeId);
}
return ts;
}

// 选中所有子节点时,选中父节点 取消子节点时取消父节点
function setParentNodeCheck(node) {
var parentNode = $("#using_json").treeview("getNode", node.parentId);
if (parentNode.nodes) {
var checkedCount = 0;
for (var x in parentNode.nodes) {
if (parentNode.nodes[x].state.checked) {
checkedCount ++;
} else {
break;
}
}
if (checkedCount == parentNode.nodes.length) { //如果子节点全部被选 父全选
$("#using_json").treeview("checkNode", parentNode.nodeId);
setParentNodeCheck(parentNode);
}else { //如果子节点未全部被选 父未全选
$('#using_json').treeview('uncheckNode', parentNode.nodeId);
setParentNodeCheck(parentNode);
}
}
}

// 取消父节点时 取消所有子节点
function setChildNodeUncheck(node) {
if (node.nodes) {
var ts = []; //当前节点子集中未被选中的集合
for (var 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];
for (var j in getNodeDieDai) {
            /**
             * 原转载文章中写的是!getNodeDieDai.nodes[x].state.checked
             * 但是测试不可用、去掉.nodes[x]可用
             */
if (!getNodeDieDai.state.checked) {
ts.push(getNodeDieDai[j]);
}
}
}
}
}
return ts;
}

本文主要内容转自http://www.cnblogs.com/happyguo/p/7338136.html
posted @ 2017-10-31 14:52  小灰狼先生  阅读(1469)  评论(1编辑  收藏  举报