gpt4 book ai didi

javascript - 使用 native javascript/HTML 创建 Html TreeView

转载 作者:行者123 更新时间:2023-12-02 21:07:23 24 4
gpt4 key购买 nike

我需要使用 native JavaScript 从已创建的对象中创建一个 HTML/CSS TreeView ,如示例中所示。

请提出建议,

BR

最佳答案

您可以首先构建嵌套结构,然后使用递归方法从该数据创建 html,如果当前元素具有 Children 属性,您可以使用该 Children 数组作为数据参数再次调用该函数。

var data = [{"name":"container-1","type":"container","description":"container description"},{"name":"category-1","type":"category","parent":"container-1"},{"name":"grid-1","type":"grid","parent":"category-1"},{"name":"chart-1","type":"chart","parent":"category-1"},{"name":"container-2","type":"container"},{"name":"category-2","type":"category","parent":"container-2"},{"name":"category-3","type":"category","parent":"container-2"},{"name":"grid-2","type":"grid","parent":"category-2"},{"name":"chart-2","type":"chart","parent":"category-2"},{"name":"grid-3","type":"grid","parent":"category-3"}]

function toTree(data, pid = undefined) {
return data.reduce((r, e) => {
if (pid == e.parent) {
const obj = { ...e }
const children = toTree(data, e.name)
if (children.length) obj.children = children;
r.push(obj)
}

return r
}, [])
}

function toHtml(data, isRoot = true) {
const ul = document.createElement('ul')

if (!isRoot) {
ul.classList.add('hide')
}

data.forEach(e => {
let isVisible = isRoot;
const li = document.createElement('li')
const text = document.createElement('span')
const button = document.createElement('button')

if (e.children) {
button.textContent = '+'
li.appendChild(button)
}

text.textContent = e.name
li.appendChild(text)

if (e.children) {
const children = toHtml(e.children, false)
li.appendChild(children)

button.addEventListener('click', function() {
if (isRoot) {
isVisible = !isVisible
}

button.textContent = isVisible ? '+' : '-'
children.classList.toggle('hide')

if (!isRoot) {
isVisible = !isVisible
}
})
}

ul.appendChild(li)

})

return ul;
}

const tree = toTree(data)
const html = toHtml(tree)

document.body.appendChild(html)
.hide {
display: none;
}

button {
margin-right: 10px;
}

关于javascript - 使用 native javascript/HTML 创建 Html TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61192082/

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