Skip to content

Commit 9d13a96

Browse files
committed
7 实现树形组件
1 parent a847446 commit 9d13a96

File tree

8 files changed

+165
-0
lines changed

8 files changed

+165
-0
lines changed

7 实现树形组件/css/style.css

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
* {
2+
margin: 0;
3+
padding: 0;
4+
}
5+
body {
6+
font-family: "Microsoft Yahei";
7+
}
8+
ul {
9+
list-style: none;
10+
}
11+
.menu {
12+
width: 170px;
13+
padding: 20px 0;
14+
margin-left: 200px;
15+
}
16+
.node ul {
17+
margin-left: 20px;
18+
}
19+
.node .tree {
20+
width: 100px;
21+
height: 30px;
22+
line-height: 30px;
23+
padding-left: 22px;
24+
font-size: 16px;
25+
cursor: pointer;
26+
}
27+
.node .span {
28+
background: url(../img/span.png) no-repeat left center;
29+
}
30+
.node .close {
31+
background: url(../img/close.png) no-repeat left center;
32+
}
33+
.node .nomore {
34+
background: url(../img/nomore.png) no-repeat left center;
35+
}
36+
.node .node {
37+
display: none;
38+
}

7 实现树形组件/img/close.png

1.14 KB
Loading

7 实现树形组件/img/del.png

1.15 KB
Loading

7 实现树形组件/img/nomore.png

1.03 KB
Loading

7 实现树形组件/img/span.png

1.12 KB
Loading

7 实现树形组件/index.html

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>实现树形组件</title>
6+
<link rel="stylesheet" href="css/style.css">
7+
</head>
8+
<body>
9+
<div class="menu" id="menu">
10+
11+
</div>
12+
<script src="js/data.js"></script>
13+
<script src="js/script.js"></script>
14+
</body>
15+
</html>

7 实现树形组件/js/data.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var nodes =[{
2+
name: "父节点1",
3+
children: [{
4+
name: "子节点11"
5+
},
6+
{
7+
name: "子节点12"
8+
},
9+
{name: "子节点13",
10+
children:[{name:"叶子节点131"}]
11+
}]
12+
},
13+
{
14+
name: "父节点2",
15+
children: [{name: "子节点21"},
16+
{name: "子节点22",
17+
children:[{name:"叶子节点221"},
18+
{name:"叶子节点222",children:[{name:"叶子节点2221"}]}]
19+
}]
20+
},
21+
{
22+
name: "父节点3",
23+
children: [{name: "子节点31"},
24+
{name: "子节点32",
25+
children:[{name:"叶子节点321"}]
26+
}]
27+
}];

7 实现树形组件/js/script.js

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// 获取菜单
2+
var menu = document.getElementById("menu");
3+
4+
// 读取数据,构建页面
5+
findChild(nodes,menu);
6+
7+
// 获取menu下的所有的tree
8+
var divs = menu.getElementsByTagName('div');
9+
10+
// 点击时显示和隐藏
11+
for(var i=0;i<divs.length;i++){
12+
divs[i].id = i; //设置tree的id,便于onclick时获取对应的tree
13+
14+
// 获取没有children的分支
15+
var file = document.getElementById(i);
16+
if(file.nextSibling == null){
17+
file.style.color = "#999";
18+
file.className = "tree nomore";
19+
}
20+
21+
divs[i].onclick = function() {
22+
var tree = document.getElementById(this.id), //获取点击的tree
23+
node = tree.nextSibling; //获取tree的主分支
24+
25+
// 如果tree上存在分支,即children,则点击时展开和收起
26+
if(node!=null){
27+
var uls = node.getElementsByTagName('ul'); //获取该tree下的主分支的所有小分支
28+
29+
// 如果是展开的,点击时收起,否则点击时展开
30+
if(node.style.display == "block") {
31+
node.style.display = "none";
32+
tree.className = "tree close";
33+
// 将主分支上的所有小分支也收起
34+
for(var j=0;j<uls.length;j++) {
35+
uls[j].style.display = "none";
36+
}
37+
} else {
38+
node.style.display = "block";
39+
tree.className = "tree span";
40+
}
41+
}
42+
}
43+
}
44+
45+
// 读取数据函数
46+
/*
47+
* nodes Array 数据
48+
* parentnode 要插入树形结构的父元素节点
49+
*/
50+
function findChild(nodes,parentnode) {
51+
var node = document.createElement("ul");
52+
node.className = "node";
53+
parentnode.appendChild(node);
54+
55+
for(var i=0;i<nodes.length;i++) {
56+
var li = document.createElement("li");
57+
var ul = parentnode.getElementsByTagName('ul')[0]; //获取node
58+
var tree = document.createElement("div"); //创建tree
59+
ul.appendChild(li);
60+
tree.className = "tree close";
61+
tree.innerHTML = nodes[i].name;
62+
63+
var lis = childNode(ul)[i]; //获取ul下的li,作为children的父节点
64+
lis.appendChild(tree); //插入children
65+
66+
//如果存在子节点,则遍历子节点信息
67+
if(nodes[i].children){
68+
findChild(nodes[i].children, lis);
69+
}
70+
}
71+
}
72+
73+
74+
// 查找指定父节点下的所有子节点
75+
// pNode 父节点
76+
function childNode(pNode) {
77+
var cNode = [];
78+
var childNode = pNode.childNodes;
79+
for(var i=0;i<childNode.length;i++) {
80+
if(childNode[i].nodeType == 1) {
81+
cNode.push(childNode[i]);
82+
}
83+
}
84+
return cNode;
85+
}

0 commit comments

Comments
 (0)