当前位置:首页 > JavaScript

怎么用js实现树状表格

2026-04-05 00:44:18JavaScript

使用原生JavaScript实现树状表格

创建HTML结构,定义表格的基本框架,使用<table>标签,并为树状结构预留缩进空间。

<table id="treeTable">
  <thead>
    <tr>
      <th>名称</th>
      <th>值</th>
    </tr>
  </thead>
  <tbody id="treeBody"></tbody>
</table>

定义树形数据,使用嵌套数组或对象表示层级关系,每个节点包含名称、值和子节点。

const treeData = [
  {
    name: '节点1',
    value: '100',
    children: [
      {
        name: '子节点1',
        value: '50',
        children: []
      }
    ]
  }
];

递归渲染函数,遍历树形数据生成表格行,为子节点添加缩进样式。

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

    if (item.children && item.children.length > 0) {
      renderTree(item.children, parentElement, level + 1);
    }
  });
}

document.addEventListener('DOMContentLoaded', () => {
  renderTree(treeData, document.getElementById('treeBody'));
});

使用第三方库实现树状表格

安装zTree库,通过npm或CDN引入资源文件。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/zTree.v3/3.5.48/css/zTreeStyle/zTreeStyle.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/zTree.v3/3.5.48/js/jquery.ztree.core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/zTree.v3/3.5.48/js/jquery.ztree.exhide.min.js"></script>

配置zTree参数,设置回调函数和显示样式。

const setting = {
  view: {
    showLine: true,
    selectedMulti: false
  },
  data: {
    simpleData: {
      enable: true
    }
  },
  callback: {
    onClick: function(event, treeId, treeNode) {
      console.log(treeNode);
    }
  }
};

初始化树状结构,将数据绑定到DOM元素。

const zNodes = [
  {id:1, pId:0, name:"父节点", open:true},
  {id:11, pId:1, name:"子节点"}
];

$(document).ready(function(){
  $.fn.zTree.init($("#treeDemo"), setting, zNodes);
});

添加交互功能

实现展开/折叠功能,通过CSS类控制子节点显示状态。

function toggleChildren(row) {
  const children = row.parentNode.querySelectorAll('.child-of-' + row.dataset.id);
  children.forEach(child => {
    child.style.display = child.style.display === 'none' ? 'table-row' : 'none';
  });
}

添加事件监听器,点击节点时触发展开/折叠。

document.getElementById('treeBody').addEventListener('click', function(e) {
  if (e.target.classList.contains('toggle')) {
    toggleChildren(e.target.closest('tr'));
  }
});

性能优化建议

虚拟滚动技术,只渲染可视区域内的节点,减少DOM元素数量。

const container = document.getElementById('treeBody');
const visibleHeight = container.clientHeight;
let startIndex = 0;
let endIndex = Math.ceil(visibleHeight / rowHeight);

function renderVisibleItems() {
  const visibleData = treeData.slice(startIndex, endIndex);
  // 渲染逻辑
}

数据懒加载,当展开节点时再请求子节点数据。

怎么用js实现树状表格

function loadChildren(parentId, callback) {
  fetch(`/api/nodes?parentId=${parentId}`)
    .then(response => response.json())
    .then(callback);
}

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

相关文章

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

h5实现表格样式

h5实现表格样式

实现H5表格样式的方法 使用HTML和CSS创建基础表格 在HTML中,表格通过<table>标签定义,配合<tr>(行)、<td>(单元格)和<th>…

vue实现分组表格

vue实现分组表格

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

css怎么制作表格

css怎么制作表格

使用HTML和CSS制作表格 在HTML中,表格由<table>标签定义,结合CSS可以灵活控制样式。 基本HTML结构: <table> <tr>…

vue实现表格透明

vue实现表格透明

实现表格透明的方法 在Vue中实现表格透明效果,可以通过CSS样式调整表格的背景透明度。以下是几种常见的方法: 设置表格背景透明度 通过CSS的background-color属性配合rgba()…

vue实现表格刷新

vue实现表格刷新

Vue 实现表格刷新的方法 使用 v-if 强制重新渲染 通过 v-if 控制表格的显示与隐藏,切换时 Vue 会重新渲染组件。 <template> <button @cli…