当前位置:首页 > 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>

递归渲染函数

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

怎么用js实现树状表格

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'));
});

带折叠功能的实现方案

添加折叠控制元素

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

怎么用js实现树状表格

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" }
  ]
});

性能优化建议

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

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

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

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

相关文章

vue 表格实现

vue 表格实现

Vue 表格实现方法 基础表格实现 使用 el-table 组件(Element UI)实现基础表格: <template> <el-table :data="tableDat…

vue实现表格拖动列宽

vue实现表格拖动列宽

实现表格列宽拖动的核心思路 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽逻辑,动态修改列宽。需要处理表头与表体的联动,确保拖动时视觉一致。 基础HTML结构 &…

css表格制作

css表格制作

CSS表格制作方法 使用CSS创建表格可以通过多种方式实现,以下是常见的几种方法: 使用HTML原生表格标签结合CSS样式 <table class="styled-table">…

vue实现表格输入

vue实现表格输入

Vue实现表格输入的方法 基础表格实现 使用v-for指令动态渲染表格行和列,结合v-model实现双向数据绑定。 <template> <table> <…

elementui树状

elementui树状

ElementUI 树形组件使用指南 ElementUI 提供了 el-tree 组件,用于展示树形结构数据,支持节点展开/折叠、多选、懒加载等功能。以下是其核心用法及示例代码。 基础树形结构…

vue实现多级表格

vue实现多级表格

Vue 实现多级表格的方法 使用递归组件实现多级表格 递归组件是处理嵌套数据的理想方式,特别适合展示树形结构的数据。 <template> <table> <…