版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39581226/article/details/80829494
本次的工作主要是计算节点橙色部分标记的子节点数量,没有橙色部分的节点,只是隐藏了橙色部分
json数据格式类似这种:
{
"name": "aaa",
"Children": [
{
"name": "aaa",
"Children": [
{
"name": "ccc",
"Children": [
{
"name": "ccc",
"Children": []
}
]
},
{
"name": "eee",
"Children": []
}
]
}
]
}
实现代码:
计算节点数:
function getLeafCountTree(data, level) {
if (data.Children.length == 0) {
data.colspan = 1;
return 1;
} else {
var leafCount = 0;
for (var i = 0; i < data.Children.length; i++) {
leafCount = leafCount + getLeafCountTree(data.Children[i]);
}
data.colspan = leafCount;
if (data.EmpLevel == "Special" || data.EmpLevel == "Hidename") {//特殊节点不计算在内
return leafCount;
} else {
return leafCount + 1;
}
}
}
创建节点,显示
function createNode(nodeData, level, opts) {
var dtd = $.Deferred();
getLeafCountTree(nodeData);
var childNodesLength = getLeafCountTree(nodeData);
// construct the content of node
var $nodeDiv = $('<div' + (opts.draggable ? ' draggable="true"' : '') + (nodeData[opts.nodeId] ? ' id="' + nodeData[opts.nodeId] + '"' : '') + '>')
.addClass('node ' + (nodeData.EmpLevel || '') + (level >= opts.depth ? ' slide-up' : ''))
.append('<div class="title">' + nodeData[opts.nodeTitle] + '(' + childNodesLength + ')' + '</div>').append('<div class="name">' + nodeData[opts.nodeName] + '</div>')
.append(typeof opts.nodeContent !== 'undefined' ? "<div class=content>" + (nodeData[opts.nodeEmpInfo] || '') + "<br>" + (nodeData[opts.nodeContent] || '') + "</div>" : '');
// append 4 direction arrows
// var flags = nodeData.relationship || '';
// allow user to append dom modification after finishing node create of orgchart
if (opts.createNode) {
opts.createNode($nodeDiv, nodeData);
}
dtd.resolve($nodeDiv);
return dtd.promise();
}