良い一日私のコードに何が問題なのか尋ねたいと思います。ここに状況があります。私はこのようなオブジェクトがあることを考える:html要素へ内部オブジェクト配列を持つオブジェクト配列から要素を追加する
var nav = [
{name:"home", subNav: []},
{name:"shop",
subNav: [
{name:"inner1", subNav: []},
{name:"inner2",
subNav: [
{name:"inner3", subNav: []},
{name:"inner4", subNav: []}
]}
]},
{name:"about", subNav: []},
{name:"contact", subNav: []},
];
追加各オブジェクトの名前をが、そのsubnavは長さマップを持っている場合には、その後、あまりになどなど、それを追加します。私が今持っているものは、このようなものです。
$('.nav').html('');
var navs = "";
var nav = [
{name:"home", subNav: []},
{name:"shop",
subNav: [
\t {name:"inner1", subNav: []},
\t {name:"inner2",
subNav: [
{name:"inner3", subNav: []},
{name:"inner4", subNav: []}
]}
]},
{name:"about", subNav: []},
{name:"contact", subNav: []},
];
nav.forEach(function(n) {
if (n.subNav.length > 0) {
navs = '<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">' + n.name + '<span class="caret"></span></a>';
navs += '<ul class="dropdown-menu">';
//map subnav of first parent
n.subNav.map(function(i) {
navs += '<li><a href="/' + i.name + '">' + i.name + '</a></li>';
});
navs += '</ul>';
navs += '</li>';
//Edit
//this is where I will use getSubnav(n,ele)
} else {
navs = '<li class=""><a href="/' + n.name + '">' + n.name + '</a></li>';
}
$('.nav').append(navs);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">
WebSiteName
</a>
</div>
<ul class="nav navbar-nav">
</ul>
</div>
</nav>
私はそれはそれの内部配列を持っているのでinner2メニュー、ドロップダウンとその親と同じようにしたいです。 subNavに配列がなくなるまで自身を呼び出すように自身を繰り返す関数を使用しようとしました。この場合は、getSubnav(n,navs)
<というif文に挿入されるnavオブジェクトと要素を渡します。
function getSubnav(nav,ele){
ele ='<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">' + nav.name+ '<span class="caret"></span></a>';
ele +='<ul class="dropdown-menu">';
nav.subNav.map(function(i){
ele += '<li><a href="/' + i.name+ '">' + i.name + '</a></li>';
getSubNav(i,ele);
});
ele += '</ul>';
ele += '</li>';
}
あなたは再帰関数と同じロジックを実装する考えを持っていますか?これは、既存のコードロジックを使用してこの作業を行うことから離れているからです。 – divine
@ divine yea、私は 'getSubnav()'を実行しようとしましたが、それは起こっていませんが、情報に感謝します。私は戻ってきます:D – icedoge