树形数据,如果父级全选返回父级的名称,如果子级勾选返回名称为:父级-子级
时间: 2024-05-06 07:16:57 浏览: 61
可以使用递归的方式来实现。具体步骤如下:
1. 遍历整个树形数据,找到所有被选中的节点。
2. 对于每个被选中的节点,判断其父级节点是否也被选中。
3. 如果该节点的所有父级节点都被选中,则返回该节点的父级节点名称。
4. 如果该节点的父级节点未被选中,则递归处理其父级节点,直到找到所有被选中的父级节点。
5. 对于每个被选中的子级节点,返回其名称以及父级节点名称,用“-”连接。
下面是一个示例代码(假设树形数据存储在一个名为tree的变量中):
```python
def get_checked_nodes(node, checked_nodes):
# 判断当前节点是否被选中
if node['checked']:
# 判断父级节点是否被选中
if not node['parent'] or node['parent'] in checked_nodes:
return node['parent'] or ''
else:
# 递归处理父级节点
parent_node = next(
(n for n in tree if n['id'] == node['parent']), None)
if parent_node:
return get_checked_nodes(parent_node, checked_nodes)
else:
# 处理子级节点
for child_node in node.get('children', []):
if child_node['checked']:
checked_nodes.add(child_node['id'])
return '{}-{}'.format(
node['name'], child_node['name'])
else:
result = get_checked_nodes(child_node, checked_nodes)
if result:
return '{}-{}'.format(node['name'], result)
return ''
checked_nodes = set(n['id'] for n in tree if n['checked'])
result = [get_checked_nodes(n, checked_nodes) for n in tree if n['checked']]
```
其中,get_checked_nodes函数的第一个参数为当前节点,第二个参数为已经被选中的节点的ID集合。最后返回的是一个列表,每个元素对应一个被选中的节点的名称。
阅读全文