使用js实现一个tree树形单选组件
时间: 2024-03-27 16:38:24 浏览: 55
jquery_tree 树形组件
好的,以下是一个使用 JavaScript 实现的 tree 树形单选组件的示例代码:
HTML:
```html
<div id="tree"></div>
```
JS:
```javascript
// 树形数据
const treeData = [
{
id: '1',
label: '节点1',
children: [
{
id: '1-1',
label: '节点1-1',
children: [
{
id: '1-1-1',
label: '节点1-1-1'
},
{
id: '1-1-2',
label: '节点1-1-2'
}
]
},
{
id: '1-2',
label: '节点1-2'
}
]
},
{
id: '2',
label: '节点2'
}
]
// 递归生成树形节点
function createTreeNode(data) {
const ul = document.createElement('ul')
for (let i = 0; i < data.length; i++) {
const li = document.createElement('li')
const label = document.createElement('label')
const checkbox = document.createElement('input')
checkbox.type = 'checkbox'
checkbox.name = 'tree-node'
checkbox.value = data[i].id
label.appendChild(checkbox)
label.appendChild(document.createTextNode(data[i].label))
li.appendChild(label)
if (data[i].children && data[i].children.length) {
li.appendChild(createTreeNode(data[i].children))
}
ul.appendChild(li)
}
return ul
}
// 获取选中的节点
function getSelectedNode() {
const nodeList = document.getElementsByName('tree-node')
for (let i = 0; i < nodeList.length; i++) {
if (nodeList[i].checked) {
return nodeList[i].value
}
}
return null
}
// 渲染树形组件
function renderTree() {
const tree = document.getElementById('tree')
tree.appendChild(createTreeNode(treeData))
tree.addEventListener('click', function (event) {
const target = event.target
if (target.nodeName === 'INPUT' && target.type === 'checkbox') {
const nodeList = document.getElementsByName('tree-node')
for (let i = 0; i < nodeList.length; i++) {
if (nodeList[i] !== target) {
nodeList[i].checked = false
}
}
}
})
}
renderTree()
```
这段代码会渲染一个树形节点,并且支持单选功能。每个节点都有一个复选框,选中一个节点时,会取消其他节点的选中状态。你可以根据自己的需求修改代码,实现更加复杂的功能。
阅读全文