javascript - 在JQ中打印obj数组

标签 javascript jquery html drop-down-menu

首先要说的是,我是 JQ 和 JS 的新手,我需要一些帮助。 我怎样才能打印这个数组

var menu = [
            {
                name: 'Item1',
                submenuName: 'submenu-1',
                subMenu:[
                         {
                            name: 'Item1_1',
                            submenuName: 'submenu-1-1',
                            subMenu:[
                                 {
                                    name: 'Item1_1_1',
                                    submenuName: 'submenu-1-1-1',
                                    subMenu:[
                                             {
                                                name: 'Item1_1_1_1',
                                                submenuName: 'submenu-1-1-1-1',
                                                subMenu:[
                                                         {
                                                            name: 'Item1_1_1_1_1',
                                                            //submenuName: 'submenu-1-1-2',
                                                         },
                                                ]
                                             },
                                             {
                                                name: 'Item1_1_1_2',
                                                //submenuName: 'submenu-1-1-2',
                                             }
                                    ]
                                 },
                                 {
                                    name: 'Item1_1_2',
                                    //submenuName: 'submenu-1-1-2',
                                 },
                            ]
                         },
                         {
                            name: 'Item1_2',
                            //submenuName: 'submenu-1-2',
                         },
                         {
                            name: 'Item1_3',
                            //submenuName: 'submenu-1-3',
                         }
                ]
            },
            {
                name: 'Item2',
                //submenuName: 'submenu-2',
            }
];

像这样查看 html

<ul data-menu="main" class="menu__level">
    <li class="menu__item"><a class="menu__link" data-submenu="submenu-1" href="#">Item1</a></li>
        <ul data-menu="submenu-1" class="menu__level">
            <li class="menu__item"><a class="menu__link" data-submenu="submenu-1-1" href="#">Item1_1</a></li>
                <ul data-menu="submenu-1-1" class="menu__level">
                    <li class="menu__item"><a class="menu__link" data-submenu="submenu-1-1-1" href="#">Item1_1_1</a></li>   
                        <ul data-menu="submenu-1-1-1" class="menu__level">
                            <li class="menu__item"><a class="menu__link" data-submenu="submenu-1-1-1-1" href="#">Item1_1_1_1</a></li>
                                <ul data-menu="submenu-1-1-1-1" class="menu__level">
                                    <li class="menu__item"><a class="menu__link" href="#">Item1_1_1_1_1</a></li>
                                </ul>

                            <li class="menu__item"><a class="menu__link" href="#">Item1_1_1_2</a></li>
                        </ul>
                    <li class="menu__item"><a class="menu__link" href="#">Item1_1_2</a></li>
                </ul>
            <li class="menu__item"><a class="menu__link" href="#">Item1_2</a></li>
            <li class="menu__item"><a class="menu__link" href="#">Item1_3</a></li>

        </ul>
        <li class="menu__item"><a class="menu__link" href="#">Item2</a></li>
</ul>

我知道我的问题很愚蠢,但我不知道如何提出。这将是一个下拉菜单。

最佳答案

使用递归:

function getMenuHTML(arr, name) {
  var result = '<ul data-menu="' + (name || 'main') + '" class="menu__level">';
  for (var i = 0; i < arr.length; i++) {
     result += '<li class="menu__item"><a class="menu__link"' + (arr[i].submenuName ? 'data-submenu="' + arr[i].submenuName + '"' : '') + ' href="#">' + arr[i].name + '</a></li>';
     if (arr[i].subMenu && arr[i].subMenu.length) {
        result += getMenuHTML(arr[i].subMenu, arr[i].submenuName);
     }
  }
  result += "</ul>";
  return result;
}

var menu=[{name:'Item1',submenuName:'submenu-1',subMenu:[{name:'Item1_1',submenuName:'submenu-1-1',subMenu:[{name:'Item1_1_1',submenuName:'submenu-1-1-1',subMenu:[{name:'Item1_1_1_1',submenuName:'submenu-1-1-1-1',subMenu:[{name:'Item1_1_1_1_1'},]},{name:'Item1_1_1_2'}]},{name:'Item1_1_2'},]},{name:'Item1_2'},{name:'Item1_3'}]},{name:'Item2'}];

var html = getMenuHTML(menu);
document.getElementById('resultplain').value = html;
document.getElementById('result').insertAdjacentHTML('beforeend', html);
<nav id="result"></nav>
<textarea id="resultplain" style="height: 250px;width:100%"></textarea>

关于javascript - 在JQ中打印obj数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924557/

相关文章:

html - 将两个 <p> 元素对齐在同一行

javascript - 如何在多个 ASP.NET 验证控件上显示/隐藏错误消息?

javascript - (JavaScript) 获取数组中交替值的总和并从中获取最大值

javascript - 有没有办法通过属性获取元素?

javascript - Windows 8 商店 javascript 应用程序,从网络下载并保存图像

php - 充电 前一个变量

javascript - 本地安装的 PDF.JS 不渲染

javascript - 带有在存储中管理的参数的 Flux 调用操作

javascript - 如何在 JQuery Steps 中有两个按钮

javascript - xml dom解析