效果图:
先创建一个JSON文件
[
{
"name":"一级菜单1",
"child":[
{
"name":"二级菜单1-1"
},{
"name":"二级菜单1-2",
"child":[
{
"name":"三级菜单1-2-1"
},{
"name":"三级菜单1-2-2"
},{
"name":"三级菜单1-2-3"
}
]
},{
"name":"二级菜单1-3"
}
]
},{
"name":"一级菜单2",
"child":[
{
"name":"二级菜单2-1"
},{
"name":"二级菜单2-2",
"child":[
{
"name":"三级菜单2-2-1"
},{
"name":"三级菜单2-2-2"
},{
"name":"三级菜单2-2-3"
}
]
},{
"name":"二级菜单2-3"
}
]
},{
"name":"一级菜单3",
"child":[
{
"name":"二级菜单3-1"
},{
"name":"二级菜单3-2",
"child":[
{
"name":"三级菜单3-2-1"
},{
"name":"三级菜单3-2-2"
},{
"name":"三级菜单3-2-3"
}
]
},{
"name":"二级菜单3-3"
}
]
},{
"name":"一级菜单4",
"child":[
{
"name":"二级菜单4-1"
},{
"name":"二级菜单4-2",
"child":[
{
"name":"三级菜单4-2-1"
},{
"name":"三级菜单4-2-2"
},{
"name":"三级菜单4-2-3"
}
]
},{
"name":"二级菜单4-3"
}
]
},{
"name":"一级菜单5",
"child":[
{
"name":"二级菜单5-1"
},{
"name":"二级菜单5-2",
"child":[
{
"name":"三级菜单5-2-1"
},{
"name":"三级菜单5-2-2"
},{
"name":"三级菜单5-2-3"
}
]
},{
"name":"二级菜单5-3"
}
]
}
]
js部分
<script>
// ajax请求JSON文件
let xhr = new XMLHttpRequest();
// 创建 XMLHttpRequest 对象
xhr.open('get', 'js/index.json', true);
// 使用 open 方法指定要请求的地址、类型和方式。
xhr.send();
// 使用 send 方法发送请求,如果需要传参:
// get 方式要将参数拼接到 URL 后边,参数间&分割。例:’index.php?name=张三&age=18’
// post 方式可以将参数放到 send()里。例:send(‘name=张三&age=18’)
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// 绑定 onreadystatechange 事件,判断 readyState 和 status 的状态
let text = xhr.responseText;
// console.log(text);
let data = JSON.parse(text);
// 接收数据,通过 json 转换使用
console.log(data);
reders(data)
}
};
let str = ""
// 创建一个空变量
// 渲染函数需要用到递归函数
function reders(data) {
for (let item of data) {
if (item.child) {
str += `<p class="one" onclick="but(this)">${item.name}<img src="./img/下拉.png" style="height: 20px;"></p>
<div style="display: none;" class="bill">`
reders(item.child)
str += `</div>`
} else {
str += `<p class="one">${item.name}</p>`
}
}
document.getElementsByClassName("text")[0].innerHTML = str
}
// 点击显示判断和隐藏
function but(e) {
let childItem = e.nextSibling.nextSibling
if (childItem.style.display == "block") {
childItem.style.display = "none"
} else {
childItem.style.display = "block"
}
}
</script>
html和css
<style>
* {
margin: 0;
padding: 0;
}
body {
background-color: #019588;
}
.text {
width: 80%;
height: 500px;
margin-left: 10%;
color: #ffffff;
}
em {
background-color: #ffffff;
height: 2px;
display: block;
}
.one {
margin-top: 2%;
}
.bill {
margin-left: 5%;
}
</style>
<h3 style="text-align: center;">数据分类</h3>
<i style="background-color: #ffffff; display: block; height: 1px;"></i>
<div class="text">
</div>