当前位置:首页 > 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实现日历表格需要处理日期数据生成、渲染和交互逻辑。以下是核心实现方法: 安装依赖(可选) 若需复杂功能可引入date-fns或dayjs等日期库: npm…

uniapp 表格导入

uniapp 表格导入

uniapp 表格导入的实现方法 使用 uni.chooseFile 选择文件 在 uniapp 中,可以通过 uni.chooseFile API 让用户选择本地文件。该 API 支持多平台,包括…

vue表格动态实现

vue表格动态实现

Vue 表格动态实现方法 动态表格的实现通常涉及数据绑定、列配置动态化以及交互功能的灵活处理。以下是几种常见场景的具体实现方式: 动态数据绑定 通过v-for指令循环渲染表格行数据,数据变化时表格自…

vue实现表格选择

vue实现表格选择

Vue 实现表格选择功能 在 Vue 中实现表格选择功能可以通过多种方式完成,常见的方法包括使用复选框、单选框或通过点击行高亮选中。以下是几种常见的实现方式。 使用复选框实现多选 在表格的每一行添加…

vue表格实现多选

vue表格实现多选

实现多选表格的基础方法 在Vue中实现表格多选功能,通常需要结合el-table组件(Element UI)或v-data-table组件(Vuetify)。以下是基于Element UI的实现示例:…

vue实现复杂表格

vue实现复杂表格

Vue 实现复杂表格的方法 在 Vue 中实现复杂表格通常需要结合组件化、动态渲染和数据处理的能力。以下是几种常见的方法和实现技巧: 使用 Element UI 或 Ant Design Vue 的…