javascript - 如何从 JavaScript 对象呈现 HTML 中的嵌套列表?

标签 javascript html json parsing object

我有一个对象,它看起来像这样:

let obj = {
  name: "name1",
  nest: [
    {
      name: "name2",
      nest: [
        {
          name: "name3"
        },
        {
          name: "name4",
          nest: [
            {
              name: "name5",
              nest: [
                {
                  name: "name6"
                }
              ]
            },
            {
              name: "name7"
            },
            {
              name: "name8"
            }
          ]
        }
      ]
    }
  ]
}

let parent = document.querySelector("ul");

function forOf (obj) {
	for (let key in obj) {
		if ( typeof obj[key] === "object" && obj.hasOwnProperty("nest") ) {
			createList(obj[name], obj[key]);
		} else if ( typeof obj[key] !== "object" ) {
			let item = document.createElement("li");
			item.textContent = obj[key];
			parent.appendChild(item);
		} else {
			forOf(obj[key]);
		}
	}
}

function createList(obj, skills) {
	let item = document.createElement("ul");
	item.textContent = obj;
	parent.appendChild(item);
	parent = item;
	forOf(skills);
}

forOf(obj);

我需要渲染嵌套无序列表的树。我解析了我的对象,但无法以正确的方式呈现它。我无法解决每个嵌套列表的父项问题。也许,您有任何解决方法?

我想得到这样的结果:example

最佳答案

您可以使用单个循环,仅将定义的值键和嵌套数组作为子项。

function createList(parent, array) {
    array.forEach(function (o) {
        var li = document.createElement("li"),
            ul;

        li.textContent = o.name;
        parent.appendChild(li);
        if (o.nest) {
            ul = document.createElement("ul");
            li.appendChild(ul);
            createList(ul, o.nest);
        }
    });
}

var  object = { name: "name1", nest: [{ name: "name2", nest: [{ name: "name3" }, { name: "name4", nest: [{ name: "name5", nest: [{ name: "name6" }] }, { name: "name7" }, { name: "name8" }] }] }] }

createList(document.querySelector("ul"), [object]);
<ul></ul>

关于javascript - 如何从 JavaScript 对象呈现 HTML 中的嵌套列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801210/

相关文章:

javascript - Node.js tcpsocket 上的 ('data' ) 事件

php - css 显示页面划分的问题

php - 为什么通过 PHP heredoc 生成简单的 HTML?

javascript - 如何分配 JSON 对象

json - 我如何使用继承向Play框架中的许多类编写写操作

mysql - 如何将 MySQL 5.7 JSON NULL 转换为 native MySQL NULL?

javascript - 本地 Javascript 代码如何执行?

javascript - 如何使用 Angular.js 从表中获取值?

javascript - 收集多个元素并在输入时触发对所选元素的单击

html - 如何在不影响其父级的情况下使用 css 定位四层深度 UL