2 回答

TA貢獻1817條經驗 獲得超14個贊
你需要通過二叉樹算法即深度優先來繪制dom。
算法是:
繪制根元素,找到它的子元素
從第一個孩子開始,畫它,找到它的孩子
繼續重復步驟 2,直到到達樹的底部。
然后從步驟 2 轉到下一個子項,并執行與第一個子項相同的步驟。
通過執行上述步驟,我認為您可以使用深度優先二叉樹算法輕松繪制 DOM。
看看下面的示例
<body>
<div id="root"></div>
</body>
const graph = {
A: ['B', 'C'],
B: ['D', 'E'],
C: ['F', 'G'],
D: [],
E: [],
F: [],
G: [],
}
const root = document.getElementById("root");
const findchildren = (node) => graph[node]
const drawNode = (node) => {
const input = document.createElement("input");
input.setAttribute("type", "text");
input.setAttribute("placeholder", node);
root.appendChild(input);
const children = findchildren(node)
if (children.length > 0) {
children.forEach(item => drawNode(item))
}
}
drawNode("A")

TA貢獻1775條經驗 獲得超11個贊
我這樣做,但并不享受。草稿,也許我會改進它,但我已經做了一整天,所以我累了。
const dataset = {
A: ['B', 'C'],
B: ['D', 'E'],
C: ['F', 'G'],
D: [],
E: [],
F: [],
G: [],
}
const $tree = document.querySelector('.tree')
function graphToHTML(node, root) {
if (Object.values(node)[0].length === 0) return
let ul = document.createElement('ul')
let input = document.createElement('input')
input.placeholder = Object.values(node)[0][0]
root.append(ul)
ul.append(input)
graphToHTML(
{ [Object.values(node)[0][0]]: dataset[Object.values(node)[0][0]] },
ul
)
ul = document.createElement('ul')
input = document.createElement('input')
input.placeholder = Object.values(node)[0][1]
root.append(ul)
ul.append(input)
graphToHTML(
{ [Object.values(node)[0][1]]: dataset[Object.values(node)[0][1]] },
ul
)
}
let ul = document.createElement('ul')
let input = document.createElement('input')
input.placeholder = Object.keys(dataset)[0]
ul.append(input)
$tree.append(ul)
graphToHTML({ A: ['B', 'C'] }, ul)
添加回答
舉報