有一个懒加载的机构树,选中父节点的时候,子节点就全部选中并且禁止再次选择,这个功能能实现吗,怎么实现呢,能否有一个小demo
1条回答 默认 最新
淡然自若_blog 2022-12-27 18:56关注效果图如下:

<html> <head> <style> /* 设置一些样式 */ .tree { display: flex; flex-direction: column; } .node { display: flex; align-items: center; cursor: pointer; } .node>input[type="checkbox"] { margin-right: 8px; } </style> </head> <body> <!-- 在页面中添加一个机构树的容器 --> <div id="tree"></div> <script> // 定义一个机构树的节点数据模型 class Node { constructor(id, name, children, onChange) { this.id = id; this.name = name; this.children = children || []; this.onChange = onChange; } setChecked(checked) { this.checked = checked; if (this.checkbox) { console.log('rrr', this.checkbox) this.checkbox.checked = checked; } if (this.onChange) { this.onChange(this); } } setDisabled(disabled) { this.disabled = disabled; if (this.checkbox) { this.checkbox.disabled = disabled; } } } function renderTree(node, parentNode) { if (!node) return; const nodeElement = document.createElement("div"); nodeElement.className = "node"; const checkbox = document.createElement("input"); checkbox.type = "checkbox"; checkbox.addEventListener("change", (event) => { node.setChecked(event.target.checked); if (event.target.checked) { node.children.forEach((child) => { child.setChecked(true); child.setDisabled(true); }); } else { node.children.forEach((child) => { child.setDisabled(false); }); } }); node.checkbox = checkbox; const label = document.createElement("span"); label.textContent = node.name; nodeElement.appendChild(checkbox); nodeElement.appendChild(label); if (node.children.length > 0) { const childrenElement = document.createElement("div"); childrenElement.className = "tree"; node.children.forEach((child) => { childrenElement.appendChild(renderTree(child, nodeElement)); }); nodeElement.appendChild(childrenElement); } parentNode.appendChild(nodeElement); return nodeElement; } function createTree(rootNode, container) { if (!rootNode || !(rootNode instanceof Node)) { throw new Error("Invalid root node"); } if (!container || !(container instanceof HTMLElement)) { throw new Error("Invalid container element"); } container.className = "tree"; return renderTree(rootNode, container); } const rootNode = new Node( 1, "Root", [ new Node(2, "Child 1", [ new Node(4, "Grandchild 1"), new Node(5, "Grandchild 2"), new Node(6, "Grandchild 3"), ]), new Node(3, "Child 2", [ new Node(7, "Grandchild 4"), new Node(8, "Grandchild 5"), new Node(9, "Grandchild 6"), ]) ], (node) => { console.log(`Node ${node.id} is ${node.checked ? "checked" : "unchecked"}`); } ); const treeElement = document.getElementById("tree"); createTree(rootNode, treeElement); </script> </body> </html>解决 无用评论 打赏 举报 编辑记录