首先说下需求 父节点选中 子节点全部选中,子节点全部取消选中 父节点也取消选中状态,可easyui的级联效果就是下图给个方形 获取选中的节点时 也获取不到 所以,取消了级联 ,写了onCheck事件 模拟一下
$.extend($.fn.tree.methods, {//首先扩展一下获取节点方法 方便重写的时候 获取子节点
getLeafChildren: function (jq, params) {
var nodes = [];
$(params).next().children().children("div.tree-node").each(function () {
nodes.push($(jq[0]).tree('getNode', this));
});
return nodes;
}
});
onCheck:function(node,checked){
var tree = $('#permission_list');
if (!eventNode) {//是否已经有在oncheck事件了
eventNode = node;
treeup = true;
}else{
return;//已经有事件在进行了 就直接返回 防止 栈溢出
}
if(checked)
tree.tree("expand", node.target);
else
tree.tree("collapse", node.target);
if (treeup) {
var ParentNode = tree.tree("getParent", node.target);
if (ParentNode) {//存在父节点
if (checked)//是选中事件 就把父节点 选中
tree.tree("check", ParentNode.target);
else {
var isCheck = false;
var childNode = tree.tree("getLeafChildren", ParentNode.target);
for (var i = 0; i < childNode.length; i++) {//判断是否有兄弟节点处于选中状态
if (childNode[i].checked) {
isCheck = true;
break;
}
}
if (!isCheck)
tree.tree("uncheck", ParentNode.target);
}
}
treeup = false;
}
if (!treeup && eventNode) {
var childNode = tree.tree("getChildren", eventNode.target);
if (checked) {//选中子节点
for (var i = 0; i < childNode.length; i++) {
tree.tree("check", childNode[i].target);
tree.tree("expand", childNode[i].target);
}
}
else {//取消子节点
for (var i = 0; i < childNode.length; i++) {
tree.tree("uncheck", childNode[i].target);
}
}
}
eventNode = false;
}
这样就完成了。缺点是 只会级联直接父级节点