当前位置:首页 > 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" }
  ]
});

性能优化建议

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

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

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

怎么用js实现树状表格

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

相关文章

vue 实现表格单选

vue 实现表格单选

实现表格单选的方法 在Vue中实现表格单选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-model绑定选中项 通过v-model绑定一个变量来记录当前选中的行数据。当用户点击某一行…

怎么制作css表格

怎么制作css表格

使用HTML和CSS创建表格 HTML提供<table>标签用于创建表格结构,CSS用于控制样式。以下是一个基础示例: <table class="styled-table">…

vue实现表格

vue实现表格

Vue实现表格的方法 在Vue中实现表格可以通过多种方式完成,包括使用原生HTML表格、第三方组件库或自定义组件。以下是几种常见的方法: 使用原生HTML表格 在Vue模板中直接使用HTML的&l…

vue实现子表格

vue实现子表格

实现子表格的基本思路 在Vue中实现子表格通常需要结合组件化思想和动态渲染技术。常见的场景是在主表格的行内嵌套子表格,展开主表行时显示对应的子表数据。 使用el-table实现子表格(Element…

vue表格实现单选

vue表格实现单选

实现 Vue 表格单选功能 使用 v-model 绑定选中状态 在表格的每一行添加单选按钮或点击行触发选中,通过 v-model 绑定一个变量存储当前选中行的唯一标识(如 id)。 示例代码: &…

vue实现分组表格

vue实现分组表格

Vue 实现分组表格的方法 使用 v-for 嵌套循环实现分组 通过嵌套的 v-for 循环可以轻松实现分组表格。外层循环遍历分组数据,内层循环遍历每组中的具体项。 <template>…