JS如何操作DOM基于表格动态展示数据

yizhihongxing

操作DOM基于表格动态展示数据是Web开发中常用的技术。JavaScript是DOM操作的主力军。下面是操作DOM基于表格动态展示数据的完整攻略:

1. 数据渲染

在JavaScript中,可以通过插值表达式、DOM操作等方式将数据渲染到HTML页面。下面我们将介绍两个渲染数据的示例。

1.1 使用innerHTML渲染表格

使用innerHTML属性,可以将一个字符串插入到指定DOM元素中。我们可以根据数据动态生成HTML字符串,并使用innerHTML属性把字符串插入到表格的tbody中,从而渲染表格。

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody id="table-data">

  </tbody>
</table>

<script>
  // 数据
  const data = [
    { name: 'Alice', age: 20, email: 'alice@example.com' },
    { name: 'Bob', age: 30, email: 'bob@example.com' },
    { name: 'Charlie', age: 40, email: 'charlie@example.com' }
  ];

  // 渲染表格
  const tableDataEl = document.getElementById('table-data');
  let tableHtml = '';
  for (let i = 0; i < data.length; i++) {
    const item = data[i];
    tableHtml += `
      <tr>
        <td>${item.name}</td>
        <td>${item.age}</td>
        <td>${item.email}</td>
      </tr>
    `;
  }
  tableDataEl.innerHTML = tableHtml;
</script>

上面代码中,使用innerHTML属性将tableHtml插入到tbody元素中,从而渲染出表格。

1.2 使用DocumentFragment渲染表格

将HTML字符串插入到innerHTML属性的缺点在于,会导致页面进行重排和重绘,性能不佳。我们可以使用DocumentFragment对象来避免这种性能问题。

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody id="table-data">

  </tbody>
</table>

<script>
  // 数据
  const data = [
    { name: 'Alice', age: 20, email: 'alice@example.com' },
    { name: 'Bob', age: 30, email: 'bob@example.com' },
    { name: 'Charlie', age: 40, email: 'charlie@example.com' }
  ];

  // 渲染表格
  const tableDataEl = document.getElementById('table-data');
  const tableFragment = document.createDocumentFragment();
  for (let i = 0; i < data.length; i++) {
    const item = data[i];
    const tr = document.createElement('tr');
    const nameTd = document.createElement('td');
    nameTd.textContent = item.name;
    const ageTd = document.createElement('td');
    ageTd.textContent = item.age;
    const emailTd = document.createElement('td');
    emailTd.textContent = item.email;
    tr.appendChild(nameTd);
    tr.appendChild(ageTd);
    tr.appendChild(emailTd);
    tableFragment.appendChild(tr);
  }
  tableDataEl.appendChild(tableFragment);
</script>

上面代码中,使用document.createFragment()创建了一个DocumentFragment对象。然后,使用document.createElement()创建了tr和td元素,使用textContent属性设置文本内容,最后将tr和td元素依次添加到DocumentFragment中,然后通过tableDataEl.appendChild()方法将DocumentFragment插入到table中。

2. 数据更新

当数据发生变化时,我们需要根据最新的数据更新表格。下面我们将介绍两个数据更新的示例。

2.1 直接更新innerHTML

与渲染时使用innerHTML一样,当数据更新时,我们也可以再次使用innerHTML来更新表格。

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody id="table-data">

  </tbody>
</table>

<script>
  // 数据
  let data = [
    { name: 'Alice', age: 20, email: 'alice@example.com' },
    { name: 'Bob', age: 30, email: 'bob@example.com' },
    { name: 'Charlie', age: 40, email: 'charlie@example.com' }
  ];

  // 渲染表格
  const tableDataEl = document.getElementById('table-data');
  let tableHtml = '';
  for (let i = 0; i < data.length; i++) {
    const item = data[i];
    tableHtml += `
      <tr>
        <td>${item.name}</td>
        <td>${item.age}</td>
        <td>${item.email}</td>
      </tr>
    `;
  }
  tableDataEl.innerHTML = tableHtml;

  // 更新数据
  setTimeout(() => {
    data[0].name = 'Alex';
    data[1].age = 35;
    data[2].email = 'charlie234@example.com';
    tableHtml = '';
    for (let i = 0; i < data.length; i++) {
      const item = data[i];
      tableHtml += `
        <tr>
          <td>${item.name}</td>
          <td>${item.age}</td>
          <td>${item.email}</td>
        </tr>
      `;
    }
    tableDataEl.innerHTML = tableHtml;
  }, 3000);
</script>

上面代码中,当数据发生变化时,我们再次使用innerHTML将最新的HTML内容插入到tbody元素中,实现了数据更新的效果。

2.2 只更新发生变化的那些项

当数据发生变化时,只更新发生变化的那些项,可以减少DOM操作的数量,提高性能。

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody id="table-data">

  </tbody>
</table>

<script>
  // 数据
  let data = [
    { name: 'Alice', age: 20, email: 'alice@example.com' },
    { name: 'Bob', age: 30, email: 'bob@example.com' },
    { name: 'Charlie', age: 40, email: 'charlie@example.com' }
  ];

  // 渲染表格
  const tableDataEl = document.getElementById('table-data');
  let tableHtml = '';
  for (let i = 0; i < data.length; i++) {
    const item = data[i];
    tableHtml += `
      <tr>
        <td data-key="name">${item.name}</td>
        <td data-key="age">${item.age}</td>
        <td data-key="email">${item.email}</td>
      </tr>
    `;
  }
  tableDataEl.innerHTML = tableHtml;

  // 更新数据
  setTimeout(() => {
    data[0].name = 'Alex';
    data[1].age = 35;
    data[2].email = 'charlie234@example.com';

    for (let i = 0; i < data.length; i++) {
      const item = data[i];
      const tr = tableDataEl.children[i];
      for (let j = 0; j < tr.children.length; j++) {
        const td = tr.children[j];
        const key = td.dataset.key;
        if (item[key] !== td.textContent) {
          td.textContent = item[key];
        }
      }
    }
  }, 3000);
</script>

上面代码中,当数据发生变化时,我们首先给每个td元素添加了data-key属性,表示该元素对应的数据项。然后,我们遍历每个数据项和每个td元素,如果数据项和td元素中对应的值不一样,就更新td元素的textContent属性,实现了数据更新的效果。

以上就是JavaScript如何操作DOM基于表格动态展示数据的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS如何操作DOM基于表格动态展示数据 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS 页面内容搜索,类似于 Ctrl+F功能的实现代码

    实现类似于 Ctrl+F 功能的 JS 页面内容搜索,需要基于两个核心 API:window.find() 和 window.getSelection()。 window.find() window.find() 方法用于在当前页面中查找指定的字符串,并返回一个布尔值表示是否检索到该字符串。该方法可以接收三个参数,依次为: 要查找的字符串 是否区分大小写(可…

    JavaScript 2023年5月19日
    00
  • 浅谈JSON.stringify()和JOSN.parse()方法的不同

    当我们需要在不同的系统或应用程序之间传递数据时,使用JSON(JavaScript Object Notation)是很常见的。JSON.stringify()和JSON.parse()是两个JavaScript内置函数,用于将JavaScript对象转换为JSON格式的字符串,以及将JSON格式的字符串转换回JavaScript对象。虽然它们的作用看起来相…

    JavaScript 2023年5月27日
    00
  • 一个JavaScript递归实现反转数组字符串的实例

    JavaScript递归实现反转数组字符串的实例 本攻略将提供如何使用JavaScript递归方法来反转字符串数组的详细步骤。反转字符串数组实现过程如下: 创建一个新函数 reverseArr 来实现反转字符串数组。 在 reverseArr 函数内, 检查当前数组中的第一个和最后一个元素,并交换它们的位置,以此反转数组。 接下来,使用递归将 reverse…

    JavaScript 2023年5月27日
    00
  • Three.js实现雪糕地球的使用示例详解

    首先,为了使用Three.js实现雪糕地球,我们需要在网站中引入Three.js库,可以通过以下代码在HTML文件中引入: <script src="./js/three.min.js"></script> 为了呈现一个球形地球,我们使用Three.js中的球体(SphereGeometry)并将其放置在场景(Sc…

    JavaScript 2023年6月11日
    00
  • 常用ASP函数集【经验才是最重要的】

    常用ASP函数集【经验才是最重要的】 ASP是一种动态网页开发语言,常用于构建企业级Web应用程序。在ASP中,预定义了许多函数,可以帮助我们简化代码、提高开发效率。本文将介绍一些常用的ASP函数,以便开发人员更加方便、快速地创建 Web 应用程序。 字符串操作 Left、Right、Mid 函数 这三个函数都是对字符串进行截取操作的函数。 Left 函数:…

    JavaScript 2023年6月11日
    00
  • JS动态创建Table,Tr,Td并赋值的具体实现

    下面是“JS动态创建Table,Tr,Td并赋值的具体实现”的攻略。 实现方法 使用JavaScript可以很方便地动态创建表格,具体步骤如下: 创建一个 元素,用于存放动态创建的表格。 使用JavaScript的循环语句,例如for循环或while循环,根据需要动态创建需要的行(tr)和列(td)。 在创建每个行(tr)时,使用循环语句动态创建所需的列(t…

    JavaScript 2023年6月11日
    00
  • JavaScript方法和技巧大全

    JavaScript方法和技巧大全 JavaScript是现代Web开发必备的一种编程语言。在使用JavaScript进行Web开发时,我们经常会遇到各种各样的问题,如浏览器间兼容性、代码的性能优化等。本篇文章将介绍一些在日常开发中常用的JavaScript技巧和方法,帮助Web开发者更好地应对开发难题。 1. 使用对象解构进行变量赋值 对象解构可以帮助我们…

    JavaScript 2023年5月18日
    00
  • 原生Js实现按的数据源均分时间点幻灯片效果(已封装)

    首先我们先来介绍一下“原生Js实现按的数据源均分时间点幻灯片效果(已封装)”这个内容的基本概念和核心思路。 概念 “原生Js实现按的数据源均分时间点幻灯片效果(已封装)”是一种基于JavaScript的动态网页效果,它能够将一组图片或其他内容按照时间轴分隔显示,形成一种轮播的效果,具有视觉感受强烈、增加动态感的特点。 核心思路 该功能的实现核心思想是,将网页…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部