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

操作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日

相关文章

  • element UI 中的 el-tree 实现 checkbox 单选框及 bus 传递参数功能

    要实现 element UI 中的 el-tree 实现 checkbox 单选框及 bus 传递参数功能,需要按照下面的步骤进行操作: 1.引入依赖:首先需要在项目中安装 element-ui 和 vue-bus,command:npm install element-ui vue-bus –save;2.在 main.js 中完成直接注册 bus:Vu…

    JavaScript 2023年6月10日
    00
  • 关于B/S判断浏览器断开的问题讨论

    关于 B/S 判断浏览器断开的问题讨论 问题背景 在 B/S 架构中,当浏览器与服务器之间建立连接后,如何判断浏览器是否已经断开连接? 问题分析 服务器无法直接获取浏览器的状态,因此需要以下三种方法来判断浏览器连接是否仍然有效: 心跳检测 长轮询 WebSocket 1. 心跳检测 心跳检测的原理是在一定时间间隔内,服务器发送一个特定的信息(如特定数据包)到…

    JavaScript 2023年5月28日
    00
  • python中altair可视化库实例用法

    下面是“python中altair可视化库实例用法”的完整攻略: 1. Altair 库简介 Altair 是一个基于 Python 的声明式可视化库,用于创建交互式可视化图表。 声明式语法是指你通过直接描述所需图表的方式来创建它们,而无需编写细节代码。 Altair 是对 Vega-Lite 的 Python 封装,Vega-Lite 是基于 Vega 开…

    JavaScript 2023年5月28日
    00
  • myEvent.js javascript跨浏览器事件框架

    【Introduction】 myEvent.js是一款使用纯原生JavaScript编写的跨浏览器事件框架,可以方便地添加、删除和触发事件,支持所有现代浏览器和IE6及以上版本。 【Installation】 通过以下步骤将myEvent.js添加到您的项目中: 1.将myEvent.js下载到您的项目目录中 2.将以下代码添加到您的HTML文件中: &l…

    JavaScript 2023年6月11日
    00
  • 理解javascript中的with关键字

    当我们在使用JS进行开发时,可能会遇到使用with关键字的代码。with可以被用来打破常规的JS作用域规则,允许我们更方便地访问某些对象中的属性和方法。然而,with关键字在使用上很容易出错,也容易导致代码不易阅读和维护。因此,在使用with语句时,需要谨慎使用,遵循一些约定和最佳实践,下面将详细讲解“理解JavaScript中的with关键字”,帮助读者更…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript的push(),pop(),concat()方法

    浅谈JavaScript的push(),pop(),concat()方法 JavaScript作为一种脚本语言,其内建函数在数组和字符串方面功能十分强大。其中,push(),pop()和concat()方法在数组操作中非常重要。 push()方法 push()方法用于向数组的末尾添加一个或多个元素,并返回更新后的数组长度。 语法: array.push(el…

    JavaScript 2023年5月27日
    00
  • 归纳下js面向对象的几种常见写法总结

    针对“归纳下js面向对象的几种常见写法总结”的完整攻略,我给出如下的详细讲解: 1. 面向对象编程 面向对象编程(OOP,Object Oriented Programming)是一种编程范式,它将任务分解成一些个体,这些个体通过彼此分工协作来完成任务。在 JavaScript 中,对象、构造函数、原型链和继承都是实现 OOP 的关键元素。 2. JS面向对…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript逻辑And运算符

    详解JavaScript逻辑And运算符 什么是And运算符? And运算符,也叫逻辑与运算符,是JavaScript中的一种逻辑运算符。当两个操作数都为真(truthy)时,And运算符返回真;否则返回假(false)。 And运算符的使用 语法格式为: expression1 && expression2 其中,expression1和e…

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