我的思路是这样的:1. 首先将所有数据全部取出转化为JSON格式
2. 然后加载到页面
3. 通过css的display 来控制显示和隐藏
代码案例如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>树形菜单</title>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
<style type="text/css">
.hidden{
display: none;
}
</style>
</head>
<body>
<div>
<ul>
<li id="main">
<span id="buttenClick">总菜单<span>
</li>
</ul>
</div>
<script type="text/javascript">
$(function(){
//初始化加载所有数据
init();
//主菜单点击事件
$("#buttenClick").click(function(){
if($(".ul").hasClass("hidden")){
$(".ul").removeClass("hidden");
}else{
$(".ul").addClass("hidden");
}
//二级菜单点击事件
$(".liclick").click(function(){
//找到同辈的ul1元素
if($(this).siblings(".ul1").hasClass("hidden")){
$(this).siblings(".ul1").removeClass("hidden");
}else{
$(this).siblings(".ul1").addClass("hidden");
}
});
});
});
function init(){
$.ajax({
type: 'POST',
url: 'test.json',
data: null,
dataType: 'json',
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success:function(data){
//得到json对象,加载到页面
var ul1 = data.item1;
//遍历,并添加对应数量的二级菜单
$("#main").append("<ul class='ul'></ul>");
for(var i=0;i<ul1.length;i++){
$(".ul").append("<li class='li1'><span class='liclick'>"+ul1[i].name+"</span></li>");
//遍历,添加对应数量的三级菜单
var ul11 = ul1[i].item11;
$(".li1").eq(i).append("<ul class='ul1'></ul>");
for(var j=0;j<ul11.length;j++){
//加载子类菜单
$(".ul1").eq(i).append("<li class='li11'><span class='liclick11'>"+ul11[j].name+"</span></li>");
}
}
//展示出来没有问题后,默认将他们隐藏
$(".ul").addClass("hidden");
$(".ul1").addClass("hidden");
}
});
}
</script>
</body>
</html>
test.json文件内容:
{"item1":[
{"name":"副菜单1","item11":[{"name":"副菜单1的菜单1"},{"name":"副菜单1的菜单2"},{"name":"副菜单1的菜单3"}]},
{"name":"副菜单2","item11":[{"name":"副菜单2的菜单1"},{"name":"副菜单2的菜单2"},{"name":"副菜单2的菜单3"}]},
{"name":"副菜单3","item11":[{"name":"副菜单3的菜单1"},{"name":"副菜单3的菜单2"},{"name":"副菜单3的菜单3"}]}
]}