gpt4 book ai didi

javascript - 如何将 JSON 动态插入到 Accordion 菜单中?

转载 作者:行者123 更新时间:2023-12-03 01:22:58 26 4
gpt4 key购买 nike

我需要用 JSON 制作一个多级 Accordion 动态菜单。我下载了一个模板,并尝试在此菜单中调整我的 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>&nbsp; '+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>&nbsp; ' + item.name + '</a></li>';
}
})
return html; //return html outside of the loop
}

关于javascript - 如何将 JSON 动态插入到 Accordion 菜单中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674063/

26 4 0