无限层级目录树

2023-10-18 15:14:12 浏览数 (3)

题目

实现一个无限层级的目录树UI,要求不仅限于可对任意项进行勾选,且能实时获取到树的选择值。不限技术栈,但是不允许使用或复制(代码)任何第三方组件或UI库。你可以寻求一切你能寻求的帮助(开卷考)。

答案

实现一个无限层级的目录树UI并实现勾选功能,并能实时获取选择值是一个相对复杂的任务,需要使用HTML、CSS和JavaScript来完成。以下是一个简单的示例,你可以根据需要进行扩展和改进:

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>无限层级目录树</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="tree"></div>

    <script src="script.js"></script>
</body>
</html>

CSS (styles.css):

代码语言:javascript复制
.tree-item {
    margin-left: 20px;
}

.checkbox {
    margin-right: 10px;
}

JavaScript (script.js):

代码语言:javascript复制
const treeData = [
    {
        label: 'Item 1',
        children: [
            {
                label: 'Item 1.1',
                children: [
                    {
                        label: 'Item 1.1.1',
                        children: []
                    },
                    {
                        label: 'Item 1.1.2',
                        children: []
                    }
                ]
            },
            {
                label: 'Item 1.2',
                children: []
            }
        ]
    },
    {
        label: 'Item 2',
        children: [
            {
                label: 'Item 2.1',
                children: []
            }
        ]
    }
];

function createTreeItem(item) {
    const treeItem = document.createElement('div');
    treeItem.classList.add('tree-item');

    const checkbox = document.createElement('input');
    checkbox.type = 'checkbox';
    checkbox.classList.add('checkbox');
    treeItem.appendChild(checkbox);

    const label = document.createElement('label');
    label.textContent = item.label;
    treeItem.appendChild(label);

    checkbox.addEventListener('change', () => {
        updateSelectedValues();
    });

    if (item.children && item.children.length > 0) {
        const childrenContainer = document.createElement('div');
        item.children.forEach(child => {
            childrenContainer.appendChild(createTreeItem(child));
        });
        treeItem.appendChild(childrenContainer);
    }

    return treeItem;
}

function updateSelectedValues() {
    const selectedValues = [];
    const checkboxes = document.querySelectorAll('.checkbox');
    checkboxes.forEach(checkbox => {
        if (checkbox.checked) {
            selectedValues.push(checkbox.nextSibling.textContent);
        }
    });

    console.log('Selected Values:', selectedValues);
}

const treeContainer = document.getElementById('tree');
treeData.forEach(item => {
    treeContainer.appendChild(createTreeItem(item));
});

这个示例使用了HTML、CSS和JavaScript来实现了一个简单的无限层级目录树UI,并在勾选时实时获取了选择值。你可以根据实际需求对代码进行修改和扩展。如果你需要更复杂的功能或样式,可能需要进一步的开发和优化。

0 人点赞