js递归获取某个父节点下面的所有子节点

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
	}

猜你喜欢

转载自blog.csdn.net/weixin_39581226/article/details/80829494