gpt4 book ai didi

javascript - 从对象制作树

转载 作者:行者123 更新时间:2023-11-27 23:57:38 26 4
gpt4 key购买 nike

对象:

    var src = {
0: {child: [1], title: "Books"},
1: {child: [2,3], title: "Programming"},
2: {title: "Languages"},
3: {child: [4,5],title: "Databases"},
4: {title: "MongoDB"},
5: {title: "dbm"}
};

如何按照这个对象的形式构建一棵树

<div id="tree">
<ul>
<li id="0">
<span>Books</span>
<ul>
<li id="1">
<span>Programming</span>
<ul>
<li id="2">
<span>Languages</span>
</li>
<li id="3">
<span>Databases</span>
<ul>
<li id="4">
<span>MongoDB</span>
</li>
<li id="5">
<span>dbm</span>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>

To simplify the structure of the tree is changed, but the essence remains. Please tell me.

我试过了,但是数据结构不同

var data = {
0: {title: "Books"},
1: {pid: 0, title: "Programming"},
2: {pid: 1, title: "Languages", ch: 0},
3: {pid: 1, title: "Databases"},
4: {pid: 3, title: "MongoDB", ch: 0},
5: {pid: 3, title: "dmb", ch: 0}
};
function makeTree(data) {
var child = [];
var i = 0;
for (var key in data) {
if (data[key].hasOwnProperty('pid')) {
if (data[key].hasOwnProperty('ch')) {
child[i] = document.createElement('li');
child[i].setAttribute('id', key);
child[i].innerHTML = data[key].title + ' <span></span></li>';
}
else {
child[i] = document.createElement('li');
child[i].setAttribute('id', key);
child[i].innerHTML = data[key].title + '<span></span>';
child[i].innerHTML += '<ol><li id=' + key + '>' + data[key].title + '<span></span></li></ol>';
}
document.getElementById(data[key].pid + "").appendChild(child[i]);
i++;
}
else {
var li = document.createElement('li');
li.setAttribute('id', key);
li.innerHTML = data[key].title + '<span></span>'
tree.appendChild(li);
}
}
}

它可以工作,但不正确

最佳答案

你可以这样做。它会像您想要的那样生成 HTML。它从父级递归地迭代到子级。

var outputHtml = '<div id="tree">';
function buildTree(parrent)
{
var currentParent = parrent;
outputHtml += '<ul>';
if(parrent === -1)
{
outputHtml += '<li id="' + 0 + '">';
outputHtml += '<span>'+ src[0].title +'</span>';
buildTree(0);
outputHtml += '</li>';
}
else{
for(var i = 0, childArray = src[currentParent].child, iLength = childArray.length; i < iLength; ++i)
{
outputHtml += '<li id="' + childArray[i]+ '">';
outputHtml += '<span>'+ src[childArray[i]].title +'</span>';
if(src[childArray[i]].child)
buildTree(childArray[i]);
outputHtml += '</li>';
}
}

outputHtml += '</ul>';
}
buildTree(-1);
outputHtml += '</div>';
  • 添加开头的div
  • 检查它是否是 root 并添加它,然后调用 buildTree 打印 children。
  • 对于 parent 的每个 child ,打印出来。
  • 如果它有 child ,调用 buildTree 也打印它们。
  • 添加结尾部分。

如您所见,它在这里工作正常:

http://jsfiddle.net/ALUVu/1/

关于javascript - 从对象制作树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23076530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com