手写一个跟element Cascader 一样的组件
时间: 2024-12-14 08:13:39 浏览: 10
手写一个类似Element UI的级联选择器(Cascader)组件需要一些基本HTML、CSS和JavaScript知识。这里提供一个简化的静态版本,不包含完整的动态数据绑定和交互功能,但它能展示核心结构:
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<style>
.cascader {
display: flex;
width: 200px;
}
.cascader li {
list-style-type: none;
padding-left: 20px;
}
.cascader .selected {
color: blue;
font-weight: bold;
}
</style>
</head>
<body>
<div class="cascader">
<ul id="cascaderList">
<!-- 这里通过JavaScript填充数据 -->
</ul>
</div>
<script>
const data = [
{ value: '1', label: '一级', children: [{ value: '1-1', label: '二级' }, { value: '1-2', label: '二级' }] },
// 更多层级数据...
];
function createCascaderItem(item, level = 0) {
return `<li>${item.label} (${level})<span class="${item.value === selectedValue ? 'selected' : ''}">${item.value}</span></li>`;
}
let selectedValue = '';
const cascaderList = document.getElementById('cascaderList');
data.forEach((item, index) => {
cascaderList.innerHTML += createCascaderItem(item, index);
if (item.children && item.children.length > 0) {
const subItems = document.createElement('ul');
subItems.classList.add('sub-items');
cascaderList.appendChild(subItems);
item.children.forEach(child => {
subItems.innerHTML += createCascaderItem(child, index + 1);
});
}
});
// 模拟点击事件,假设点击当前项会更新selectedValue
cascaderList.addEventListener('click', event => {
if (event.target.tagName.toLowerCase() === 'span') {
selectedValue = event.target.innerText;
updateSelected(selectedValue);
}
});
function updateSelected(value) {
// 更新实际应用中的状态,这里仅打印
console.log(`Selected value changed to: ${value}`);
}
</script>
</body>
</html>
```
这个示例展示了如何创建一个多级的选择列表,用户可以点击选择项展开下级选项。为了实现完整的功能,你需要添加适当的事件处理和数据管理部分。
阅读全文