当前位置:首页 > JavaScript

怎么用js实现树状表格

2026-03-01 23:55:27JavaScript

实现树状表格的基本思路

树状表格的核心是通过递归或循环渲染嵌套结构的数据,通常结合DOM操作或前端框架(如Vue/React)实现。以下提供两种常见实现方式。

怎么用js实现树状表格

原生JavaScript实现

通过递归渲染嵌套的HTML结构,结合事件控制展开/折叠。

<!-- HTML结构 -->
<table id="treeTable">
  <thead>
    <tr><th>名称</th><th>操作</th></tr>
  </thead>
  <tbody id="treeBody"></tbody>
</table>
// 示例数据
const treeData = [
  {
    name: "父节点1",
    children: [
      { name: "子节点1-1" },
      { name: "子节点1-2" }
    ]
  },
  {
    name: "父节点2",
    children: [
      { 
        name: "子节点2-1",
        children: [{ name: "孙节点2-1-1" }]
      }
    ]
  }
];

// 渲染函数
function renderTree(data, parentElement, level = 0) {
  data.forEach(item => {
    const row = document.createElement('tr');
    row.innerHTML = `
      <td style="padding-left: ${level * 20}px">
        ${item.children ? '<span class="toggle">+</span>' : ''}
        ${item.name}
      </td>
      <td><button>操作</button></td>
    `;
    parentElement.appendChild(row);

    if (item.children) {
      const childRow = document.createElement('tr');
      childRow.className = 'child-container';
      childRow.style.display = 'none';
      parentElement.appendChild(childRow);

      const cell = document.createElement('td');
      cell.colSpan = 2;
      childRow.appendChild(cell);

      const nestedTable = document.createElement('table');
      cell.appendChild(nestedTable);
      renderTree(item.children, nestedTable, level + 1);

      row.querySelector('.toggle').addEventListener('click', function() {
        childRow.style.display = childRow.style.display === 'none' ? 'table-row' : 'none';
        this.textContent = this.textContent === '+' ? '-' : '+';
      });
    }
  });
}

// 初始化渲染
renderTree(treeData, document.getElementById('treeBody'));

Vue.js实现示例

利用Vue的递归组件特性更简洁地实现树状表格。

<template>
  <table>
    <thead><tr><th>名称</th></thead>
    <tbody>
      <tree-row v-for="node in treeData" :node="node" :key="node.name"></tree-row>
    </tbody>
  </table>
</template>

<script>
export default {
  components: {
    TreeRow: {
      template: `
        <tr>
          <td :style="{ paddingLeft: level * 20 + 'px' }">
            <span @click="toggle" v-if="hasChildren">{{ isOpen ? '-' : '+' }}</span>
            {{ node.name }}
          </td>
        </tr>
        <tr v-if="hasChildren && isOpen">
          <td :colspan="2">
            <table>
              <tree-row 
                v-for="child in node.children" 
                :node="child" 
                :level="level + 1"
                :key="child.name"
              ></tree-row>
            </table>
          </td>
        </tr>
      `,
      props: ['node', 'level'],
      data() {
        return { isOpen: false, level: this.level || 0 }
      },
      computed: {
        hasChildren() {
          return this.node.children && this.node.children.length
        }
      },
      methods: {
        toggle() { this.isOpen = !this.isOpen }
      }
    }
  },
  data() {
    return {
      treeData: [
        /* 同前文示例数据结构 */
      ]
    }
  }
}
</script>

关键注意事项

  • 数据格式:确保数据结构包含children字段表示嵌套关系
  • 性能优化:大数据量时建议使用虚拟滚动(如vue-virtual-scroller)
  • 样式控制:通过padding-left实现缩进视觉效果
  • 交互设计:展开/折叠状态需要本地存储时可结合localStorage

两种方式均可扩展添加复选框、懒加载等功能,框架实现通常更易于维护。

怎么用js实现树状表格

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

相关文章

vue 实现表格单选

vue 实现表格单选

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

vue实现多个树状图

vue实现多个树状图

Vue实现多个树状图的方法 在Vue中实现多个树状图可以通过组件化方式完成,通常使用递归组件或第三方库(如Element UI的Tree组件)。以下是具体实现方法: 使用递归组件实现基础树状结构 递…

css好看的表格制作

css好看的表格制作

使用CSS制作美观表格的方法 边框与间距优化 通过border-collapse属性合并边框,避免双边框效果。设置padding增加单元格内边距,提升可读性。 table { border-…

vue实现表格导入

vue实现表格导入

Vue 实现表格导入的方法 使用 Element UI 的 Upload 组件 Element UI 提供了 el-upload 组件,可以方便地实现文件上传功能。结合 xlsx 库解析 Excel…

vue实现表格追加

vue实现表格追加

实现表格数据追加的方法 在Vue中实现表格数据追加可以通过多种方式完成,主要涉及数据绑定和数组操作。以下是几种常见的方法: 数据绑定与v-for指令 通过v-for指令渲染表格数据,利用数组的co…

vue实现表格界面

vue实现表格界面

Vue 实现表格界面的方法 使用 Element UI 的表格组件 Element UI 提供了功能丰富的表格组件,适合快速开发表格界面。安装 Element UI 后,可以直接使用 el-table…