好多天前,领导让我实现一个树形图拖拽插件,这个插件用来描述各部门领导与员工之间的关系,每个父节点显示其子结点数量,拖拽任意一个叶结点上的人到另一个结点,他们之间的关系发生改变,树形图重新渲染。用户操作都完成后,点击保存根据树形图生成JSON,将JSON发送给后端,后端根据JSON修改数据库中的人员对应关系。
接下来就跟大家下分享下我实现的这个插件,欢迎各位感兴趣的开发者阅读本文。
这一部分的实现代码位置: 「plugins/treeDrag/js/jquery.treeDrag.js」
需要生成的dom规则如下:
<li data-id="1000"><p>中国</p>
<ul>
<li data-id="1001"><p>广东</p>
<ul>
<li data-id="1002"><p>广州</p>
<ul>
<li data-id="1003"><p>天河区</p></li>
</ul>
</li>
<li data-id="1007"><p>深圳</p>
<ul>
<li data-id="1008"><p>福田区</p></li>
</ul>
</li>
</ul>
</li>
<li data-id="1011"><p>陕西</p>
<ul>
<li data-id="1017"><p>商洛</p>
<ul>
<li data-id="1018"><p>洛南</p></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
这一部分的实现代码位置:「plugins/treeDrag/js/JsonToDomParser.js」
json规则如下:
{
"name":"国家",
"value":"中国",
"id": "1000",
"children":[
{
"name":"省份",
"value":"广东",
"id": "1001",
"children": [
{
"name":"城市",
"value": "深圳",
"id": "1007",
"children": [
{
"name":"行政区",
"value": "福田区",
"id": "1008"
}
]
}
]
},
{
"name":"省份",
"value":"陕西",
"id": "1011",
"children": [
{
"name":"城市",
"value": "西安",
"id": "1012",
"children": [
{
"name":"行政区",
"value": "莲湖区",
"id": "1013"
}
]
}
]
}
]
}
这一部分的实现代码位置:「plugins/treeDrag/js/JsonToDomParser.js」
❝JSON转DOM的解析器,我搞了好久没弄出来,最后求助了一个网友,成功解决了这个问题,感谢 @安慕希 提供的解决方案。 ❞
<!--树形拖拽插件样式文件-->
<link rel="stylesheet" href="plugins/treeDrag/css/jquery.treeDrag.css">
<link rel="stylesheet" href="src/assets/css/custom.css">
<!--JQuery依赖-->
<script src="plugins/jquery/1.7.1/jquery.min.js"></script>
<script src="plugins/jqueryui/1.8.16/jquery-ui.min.js"></script>
<!--树形拖拽插件-->
<script src="plugins/treeDrag/js/jquery.treeDrag.js"></script>
<!--JSON转DOM解析器-->
<script type="text/javascript" src="plugins/treeDrag/js/JsonToDomParser.js"></script>
<!--业务逻辑-->
<script type="text/javascript" src="src/assets/js/index.js"></script>
<link rel="stylesheet" href="src/assets/css/index.css">
<!--渲染树形拖拽的容器-->
<div id="chart" class="orgChart"></div>
<!--生成JSON按钮-->
<div class="btn-panel">
<button type="button" class="btn" onclick="generateJSON()">
<span>生成JSON</span>
</button>
</div>
/**
* 渲染页面
* @param dataTree 需要渲染的树形JSON
* @param DomNode 接收渲染结果的dom结点
* @param isDrag
*/
const renderPage = function(dataTree={},DomNode="#chart",isDrag=true){
// Dom字符串转Dom对象
const org = $(JsonToDomParser(dataTree));
// 渲染页面
return org.treeDrag({
chartElement: DomNode,
dragAndDrop: isDrag
});
};
let treeData = {};
let treeDom = {};
// 生成json数据
const generateJSON = function(){
const jsonTree = new DomToJsonParser(treeDom);
console.log(jsonTree);
alert("json已生成,请在控制台查看");
};
jQuery(document).ready(function () {
$.ajax({
url:"src/config/treeDragData.json",
type:"get",
dataType:"JSON",
success:(res)=>{
treeData = res;
// 渲染页面
treeDom = renderPage(treeData);
}
})
});
❝至此,插件的使用介绍就完成了。 ❞
「GitHub地址」: tree-drag
「在线体验地址」: tree-drag-demo