私のjSonデータ構造:
var data = {
"FolderList": [
{
"FolderID": 1,
"FolderName": "parent1",
"ParentFolderID": -1
},
{
"FolderID": 2,
"FolderName": "parent1 Child1",
"ParentFolderID": 1
},
{
"FolderID": 3,
"FolderName": "parent2",
"ParentFolderID": -1
},
{
"FolderID": 4,
"FolderName": "parent1 Child1 Child1",
"ParentFolderID": 2
},
{
"FolderID": 5,
"FolderName": "parent1 Child1 Child2",
"ParentFolderID": 2
},
{
"FolderID": 6,
"FolderName": "parent2 Child1",
"ParentFolderID": 3
}
]
};
今、私は次のようなフォルダー階層htmlを作成したかった:
parent1
parent1 child1
parent1 child1 child1
parent1 child1 child2
parent2
parent2 child1
実際には、このようなHTMLコードを生成したかった
<ul> <li>Parent1 <ul> <li>parent1 child1 <ul> <li>parent1 child1 child1</li> <li>parent1 child1 child2</li> </ul> </li> </ul> </li> <li>parent2 <ul> <li>parent2 child1</li> </ul> </li> </ul>
JavaScript または jQuery を使用してこれを行うにはどうすればよいですか? 前もって感謝します。再帰関数を使用しようとしましたが、途中で行き詰まりました。ただし、私のコードは次のようになります。
function populatedata() {
$.each(data.FolderList, function (i, folder) {
if (folder.ParentFolderID == -1) {
html += '<li>' + folder.FolderName;
checkChild(folder.FolderID);
html += '</li>';
}
});
}
function checkChild(parentid) {
$.each(data.FolderList, function (i, folder) {
if (folder.ParentFolderID == parentid) {
html += '<li><ul>' + folder.FolderName;
checkChild(folder.FolderID);
html+=</ul></li>
return html;
}
else {
return ;
}
});
}
最後に、FANgel の助けを借りて以下のコードを使用して、プロジェクトで実際に必要な構造を作成しました。
私の変更されたコードは次のようなものです:
function populatedata() { var list = $("<ul>").attr({ class: "collapsibleList", id: "folder" }); $.each(data.FolderList, function (i, folder) { if (folder.ParentFolderID == -1) { var item = $("<li>"). css("border-top","0").html('<span>'+folder.FolderName +'</span><a href="Docs.html"> <div class="view-docs pull-right">View</div></a>'); list.append(item); var children = $('<ul>'); item.append(children); checkChild(folder.FolderID, children); } }); $('#folderList').append(list); } function checkChild(parentid, parent) { $.each(data.FolderList, function (i, folder) { if (folder.ParentFolderID == parentid) { var item = $("<li>"). html('<span>'+folder.FolderName +'</span><a href="Docs.html"> <div class="view-docs pull-right">View</div></a>'); var children = $('<ul>'); parent.append(item); item.append(children); checkChild(folder.FolderID, children); } else { return; } }); }