当前位置:首页 > JavaScript

怎么用js实现树状表格

2026-01-31 08:44:40JavaScript

实现树状表格的 JavaScript 方法

数据结构准备

树状表格需要嵌套结构的数据,通常使用包含 children 属性的对象数组。例如:

const treeData = [
  {
    id: 1,
    name: "Parent 1",
    children: [
      { id: 2, name: "Child 1" },
      { id: 3, name: "Child 2" }
    ]
  }
];

HTML 结构搭建

创建基础的表格结构,并预留动态生成内容的容器:

<table id="treeTable">
  <thead>
    <tr><th>ID</th><th>Name</th></tr>
  </thead>
  <tbody></tbody>
</table>

递归渲染函数

通过递归遍历数据生成带缩进的表格行:

function renderTree(data, parentElement, level = 0) {
  data.forEach(item => {
    const tr = document.createElement('tr');
    tr.innerHTML = `
      <td style="padding-left: ${level * 20}px">${item.id}</td>
      <td>${item.name}</td>
    `;
    parentElement.appendChild(tr);

    if (item.children) {
      renderTree(item.children, parentElement, level + 1);
    }
  });
}

初始化调用

在页面加载时触发渲染:

document.addEventListener('DOMContentLoaded', () => {
  renderTree(treeData, document.querySelector('#treeTable tbody'));
});

带折叠功能的实现方案

添加折叠控制元素

修改渲染函数,为父节点添加可点击的折叠图标:

function renderCollapsibleTree(data, parentElement, level = 0) {
  data.forEach(item => {
    const tr = document.createElement('tr');
    const hasChildren = item.children && item.children.length > 0;

    tr.innerHTML = `
      <td style="padding-left: ${level * 20}px">
        ${hasChildren ? `<span class="toggle">+</span>` : ''}
        ${item.id}
      </td>
      <td>${item.name}</td>
    `;

    parentElement.appendChild(tr);

    if (hasChildren) {
      const childContainer = document.createElement('tbody');
      childContainer.classList.add('child-container');
      childContainer.style.display = 'none';
      parentElement.parentNode.insertBefore(childContainer, tr.nextSibling);

      tr.querySelector('.toggle').addEventListener('click', function() {
        const isHidden = childContainer.style.display === 'none';
        childContainer.style.display = isHidden ? '' : 'none';
        this.textContent = isHidden ? '-' : '+';
      });

      renderCollapsibleTree(item.children, childContainer, level + 1);
    }
  });
}

CSS 样式增强

添加基本样式提升用户体验:

.toggle {
  cursor: pointer;
  margin-right: 5px;
  user-select: none;
}
tr:hover {
  background-color: #f5f5f5;
}

使用现成库的方案

推荐库选择

  • jsTree:适合复杂树形结构
  • Tabulator:支持树状表格的专业表格库
  • AG Grid:企业级表格解决方案

Tabulator 示例实现

new Tabulator("#treeTable", {
  data: treeData,
  dataTree: true,
  dataTreeStartExpanded: true,
  columns: [
    { title: "ID", field: "id" },
    { title: "Name", field: "name" }
  ]
});

性能优化建议

大数据量时考虑虚拟滚动技术,只渲染可视区域内的节点。可通过以下方式实现:

怎么用js实现树状表格

  • 计算滚动位置
  • 动态加载可见节点
  • 回收不可见节点的DOM元素

使用第三方库如 react-windowvue-virtual-scroller 可简化实现。

标签: 树状表格
分享给朋友:

相关文章

vue实现表格内容

vue实现表格内容

Vue实现表格内容的方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签构建表格结构,通过v-for指令动态渲染数据。 <template> &…

vue实现表格树

vue实现表格树

Vue 实现表格树的方法 使用递归组件实现树形表格 在 Vue 中可以通过递归组件实现树形表格结构。定义一个组件,该组件可以调用自身来渲染子节点。 <template> &l…

vue实现表格修改

vue实现表格修改

Vue 实现表格修改的方法 使用 v-model 绑定数据 在 Vue 中可以通过 v-model 实现双向数据绑定,适用于表格单元格的编辑。 为表格的每个单元格绑定 v-model,动态修改数据。…

vue实现表格计算

vue实现表格计算

Vue 表格计算实现方法 使用计算属性 在 Vue 中可以通过计算属性来实现表格数据的动态计算。计算属性会自动缓存结果,只有当依赖的数据发生变化时才会重新计算。 computed: { tota…

vue实现表格导出

vue实现表格导出

Vue 实现表格导出方法 使用 xlsx 库导出 Excel 安装 xlsx 库: npm install xlsx 在 Vue 组件中使用: import XLSX from 'xlsx' m…

vue实现表格减少

vue实现表格减少

Vue 实现表格行减少的方法 在 Vue 中减少表格行通常涉及数据绑定和动态操作数组。以下是几种常见实现方式: 基于 v-for 的动态渲染 通过修改绑定的数组数据自动更新表格行数: &l…