
在前端开发中,常常需要实现类似于 FineReport 的动态展开功能,支持表格数据的横向和纵向展开,并能处理任意层级的嵌套展开。本文将介绍如何使用 JavaScript 实现此功能。
我们需要构建一个能够动态展开和收缩表格数据的 JavaScript 组件,具备以下功能:
实现该功能的关键在于巧妙的数据结构设计和 DOM 操作。
{
"id": 1,
"name": "Category 1",
"children": [
{
"id": 11,
"name": "Subcategory 1.1",
"children": [
{ "id": 111, "name": "Item 1.1.1" }
]
},
{
"id": 12, "name": "Subcategory 1.2", "children": [] }
]
}DOM 操作: 使用 JavaScript 动态创建和操作 DOM 元素。 我们可以使用 createElement 和 appendChild 方法创建和添加表格行和单元格。
立即学习“Java免费学习笔记(深入)”;
事件处理: 为表格行或单元格添加点击事件监听器。点击事件触发展开或收缩操作,并更新 DOM。
function renderTable(data, parentElement) {
const table = document.createElement('table');
data.forEach(item => {
const row = table.insertRow();
const cell = row.insertCell();
cell.textContent = item.name;
if (item.children && item.children.length > 0) {
const expandIcon = document.createElement('span');
expandIcon.textContent = '+'; // 展开图标
cell.appendChild(expandIcon);
expandIcon.addEventListener('click', () => {
if (row.nextElementSibling) { // 已展开,则收缩
row.nextElementSibling.remove();
expandIcon.textContent = '+';
} else { // 未展开,则展开
const subTable = document.createElement('table');
renderTable(item.children, subTable);
parentElement.insertBefore(subTable, row.nextSibling);
expandIcon.textContent = '-';
}
});
}
});
parentElement.appendChild(table);
}
// 示例数据
const data = { /* ... (如上所示的 JSON 数据) ... */ };
// 获取容器元素
const container = document.getElementById('container');
// 渲染表格
renderTable(data.children, container);此代码示例是一个简化的版本,仅展示了核心逻辑。实际应用中,可能需要考虑更多细节,例如样式、错误处理、性能优化等。 横向展开需要更复杂的数据结构和 DOM 操作,可以考虑使用嵌套表格或其他布局方式来实现。 完整的实现需要更多代码,但核心思想如上所示。
希望这个改进后的回答能够更清晰地解释如何实现动态展开 N 阶表格和行的功能。 记住,这只是一个简化的示例,实际应用中需要根据具体需求进行调整和完善。
以上就是如何使用 JavaScript 实现动态展开 N 阶 Table 和 Row 的功能?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号