当前位置:首页 > JavaScript

js实现tableview

2026-02-01 22:35:59JavaScript

实现基本的 TableView 结构

使用 HTML 和 JavaScript 创建一个简单的 TableView,需要定义表格的 DOM 结构并通过 JavaScript 动态填充数据。

<div id="tableViewContainer">
  <table id="tableView">
    <thead>
      <tr>
        <th>Name</th>
        <th>Age</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody></tbody>
  </table>
</div>
const data = [
  { name: 'Alice', age: 25, email: 'alice@example.com' },
  { name: 'Bob', age: 30, email: 'bob@example.com' },
  { name: 'Charlie', age: 35, email: 'charlie@example.com' }
];

function renderTableView(data) {
  const tbody = document.querySelector('#tableView tbody');
  tbody.innerHTML = '';

  data.forEach(item => {
    const row = document.createElement('tr');
    row.innerHTML = `
      <td>${item.name}</td>
      <td>${item.age}</td>
      <td>${item.email}</td>
    `;
    tbody.appendChild(row);
  });
}

renderTableView(data);

添加排序功能

为 TableView 实现点击表头排序的功能,增强用户体验。

const table = document.getElementById('tableView');
const headers = table.querySelectorAll('th');

headers.forEach((header, index) => {
  header.style.cursor = 'pointer';
  header.addEventListener('click', () => {
    const column = header.textContent.toLowerCase();
    const sortedData = [...data].sort((a, b) => {
      if (a[column] < b[column]) return -1;
      if (a[column] > b[column]) return 1;
      return 0;
    });
    renderTableView(sortedData);
  });
});

实现分页功能

对于大量数据,添加分页功能可以提高性能并改善用户体验。

let currentPage = 1;
const rowsPerPage = 5;

function paginateData(data, page, rowsPerPage) {
  const start = (page - 1) * rowsPerPage;
  const end = start + rowsPerPage;
  return data.slice(start, end);
}

function renderPaginationControls(totalPages) {
  const paginationDiv = document.createElement('div');
  paginationDiv.className = 'pagination';

  for (let i = 1; i <= totalPages; i++) {
    const pageButton = document.createElement('button');
    pageButton.textContent = i;
    pageButton.addEventListener('click', () => {
      currentPage = i;
      const paginatedData = paginateData(data, currentPage, rowsPerPage);
      renderTableView(paginatedData);
    });
    paginationDiv.appendChild(pageButton);
  }

  const container = document.getElementById('tableViewContainer');
  container.appendChild(paginationDiv);
}

const totalPages = Math.ceil(data.length / rowsPerPage);
renderPaginationControls(totalPages);

添加搜索过滤功能

实现搜索框来过滤表格数据,提高数据查找效率。

<input type="text" id="searchInput" placeholder="Search...">
const searchInput = document.getElementById('searchInput');

searchInput.addEventListener('input', (e) => {
  const searchTerm = e.target.value.toLowerCase();
  const filteredData = data.filter(item => 
    item.name.toLowerCase().includes(searchTerm) ||
    item.email.toLowerCase().includes(searchTerm)
  );
  renderTableView(filteredData);
});

响应式设计优化

通过 CSS 媒体查询确保 TableView 在不同设备上都能良好显示。

@media (max-width: 600px) {
  #tableView {
    width: 100%;
  }

  #tableView th, #tableView td {
    padding: 8px 4px;
    font-size: 14px;
  }
}

性能优化技巧

对于大型数据集,采用虚拟滚动技术可以显著提高性能。

js实现tableview

function renderVirtualScroll(data, containerHeight, rowHeight) {
  const visibleRows = Math.ceil(containerHeight / rowHeight);
  let startIndex = 0;

  function updateVisibleRows() {
    const scrollTop = container.scrollTop;
    startIndex = Math.floor(scrollTop / rowHeight);
    const endIndex = startIndex + visibleRows;

    const visibleData = data.slice(startIndex, endIndex);
    renderTableView(visibleData);

    // Adjust padding to maintain scroll height
    const tbody = document.querySelector('#tableView tbody');
    tbody.style.paddingTop = `${startIndex * rowHeight}px`;
    tbody.style.paddingBottom = `${(data.length - endIndex) * rowHeight}px`;
  }

  const container = document.getElementById('tableViewContainer');
  container.style.height = `${containerHeight}px`;
  container.style.overflowY = 'auto';
  container.addEventListener('scroll', updateVisibleRows);

  // Initial render
  updateVisibleRows();
}

// Usage example with 1000 items
const largeData = Array.from({ length: 1000 }, (_, i) => ({
  name: `User ${i + 1}`,
  age: Math.floor(Math.random() * 50) + 18,
  email: `user${i + 1}@example.com`
}));

renderVirtualScroll(largeData, 500, 50);

标签: jstableview
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…