javascript - 如何将 JSON 动态插入手风琴菜单?
问题描述
我需要用 JSON 制作一个多级手风琴动态菜单。我下载了一个模板,并试图在这个菜单中调整我的 JSON 文件,但是当我创建子菜单时,它只返回一个未定义的值。
$.getJSON("menu.json", function(data) {
createHtml(data.menu);
});
function createHtml(menuJson) {
var html = '';
$.each(menuJson, function(i, item) {
if (item.sub) {
html += '<li class="has-children">'+
'<input type="checkbox" checked/>'+
'<label><span class="'+item.icon+'"></span> '+
item.name+'</label><ul>'
html += createHtml(item.sub);
html += '</ul></li>';
} else {
html += '<li><a href="'+item.link+'"><i class="'+item.icon
+ 'mmenu-icon"></i> '+item.name+'</a></li>';
}
return html;
})
$(".cd-accordion-menu").html(html);
}
HTML:
<ul class="cd-accordion-menu animated">
<li class="has-children">
<input type="checkbox" name ="group-1" id="group-1" checked>
<label for="group-1">Group 1</label>
<ul>
<li class="has-children">
<input type="checkbox" name ="sub-group-1" id="sub-group-1">
<label for="sub-group-1">Sub Group 1</label>
<ul>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
</ul>
</li>
<li class="has-children">
<input type="checkbox" name ="sub-group-2" id="sub-group-2">
<label for="sub-group-2">Sub Group 2</label>
<ul>
<li class="has-children">
<input type="checkbox" name ="sub-group-level-3" id="sub-group-level-3">
<label for="sub-group-level-3">Sub Group Level 3</label>
<ul>
<li><a href="#0">Image</a></li>
<li><a href="#0">Image</a></li>
</ul>
如何修改函数以更好地适应模板?
解决方案
这个菜单的逻辑是有缺陷的。您在 forEach 内部返回,这没有任何意义,并且您正在为菜单设置 html,以便主菜单和递归调用。那也是错误的。
返回需要在 forEach 之外,并且菜单调用的设置需要在其他地方完成。
$.getJSON("menu.json", function(data) {
var html = createHtml(data.menu);
$(".cd-accordion-menu").html(html); //set html here
});
function createHtml(menuJson) {
var html = '';
$.each(menuJson, function(i, item) {
if (item.sub) {
html += '<li class="has-children">' +
'<input type="checkbox" checked/>' +
'<label><span class="' + item.icon + '"></span> ' +
item.name + '</label><ul>'
html += createHtml(item.sub);
html += '</ul></li>';
} else {
html += '<li><a href="' + item.link + '"><i class="' + item.icon +
'mmenu-icon"></i> ' + item.name + '</a></li>';
}
})
return html; //return html outside of the loop
}
推荐阅读
- java - ARM 上的 Windows 上的 Java(Snapdragon 835/850)?
- android - Android Adapter 在 onDataSetChanged 有时间处理数据之前格式化布局
- powershell - 在 powershell 中打印参数
- c# - 为什么点击MVC中的提交按钮后数据没有变化?
- sql - 为什么我不断收到此错误消息 ORA-00928:缺少 SELECT 关键字?
- algorithm - 如何找到特定高度二叉搜索树的节点数?
- html - CSS - 水平滚动菜单不滚动
- c - 如何在不直接在c中调用函数的情况下调用函数
- c# - 使用 c# 的 Lambda 函数无法调用外部 HTTPS API
- php - fopen(C:\xampp\htdocs\prolearning\storage\fonts/