JS动态渲染表格

动态渲染表格 0.0

  • 意义: 根据一个数据 (数组 / 对象), 把页面的 html 结构渲染完成
    ( 渲染页面就是通过 数据 把页面渲染出来, 页面中的大部分内容都是靠渲染上去的, 而不是真实写死在页面上的 )

分析数据:
+ 最外层是一个 数组 [ ]
=> 数组 表示了表格内的所有数据
1: 一个表格有多少个 tr 标签
=> 由 数组内 有多少个 对象 { } 来决定
=> 一个 对象 对应一个 tr 标签
2: 一个 tr 内有多少个 td 标签
=> 由 对象内 有多少个 成员 key 就是多少个 td 标签
=> 一个 成员 对应一个 td 标签
3: 把数组反应成为一个页面上的内容
=> 利用 innerHTML 来渲染页面
=> 因为这个属性可以识别和解析 html 结构
=> 我们只要把 userList 这个数组变成一个 html 结构的字符串

代码实现:
1. 获取元素
=> tbody 标签: 因为最终组装完毕的内容需要填充到 tbody 标签内
2. 把 userList 数组转换成 html 格式的字符串
=> 需要多少个 tr ?=> 数组的 length 是多少, 就是多少个 tr
=> 循环遍历 数组 , 生成 tr
=> 每一个 tr 内需要多少个 td ? => 循环遍历 每一个 对象, 生成 td
=> 在 td 开合标签中间加上文本内容 item[key]
3. 在循环遍历结束以后
=> 把 str 填充到 tbody 内部

HTML 结构

<table border="1" cellspacing="0">
    <thead>
      <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
      </tr>
    </thead>
    <tbody>
      <!-- js 渲染 -->
      <!-- <tr>
        <td>1</td>
        <td>张思瑞</td>
        <td>18</td>
        <td></td>
      </tr>
      <tr>
        <td>2</td>
        <td>李四</td>
        <td>20</td>
        <td></td>
      </tr>
      <tr>
        <td>3</td>
        <td>王五</td>
        <td>22</td>
        <td></td>
      </tr> -->
    </tbody>
  </table>

CSS 样式

<style>
    /* 
    ( 我们需要渲染表格的地方 :
      tbody 里面的东西 , 需要我们先把表格的样式调整好,
      比如说表格需要哪些元素, tr 设置的宽高, 表格内是否需要文本居中显示,
      表格内的字体大小颜色等等, 都得我们提前设置好了再利用 JS 渲染页面 )
     */
    * {
      margin: 0;
      padding: 0;
    }

    table {
      width: 500px;
      text-align: center;
      margin: 50px auto;
    }

    /* table > tbody > tr:nth-child(odd) {
      background-color: pink;
    }

    table > tbody > tr:nth-child(even) {
      background-color: skyblue;
    }

    table > tbody > tr:hover {
      background-color: #ccc;
    } */
  </style>

JS 交互

// 0 . 准备好一个数据 (userList), 利用这个数据把表格渲染完整
(以后可以向后端请求数据来进行页面渲染)

var userList = [
      { id: 1, name: 'Jack', age: 18, gender: '男' },
      { id: 2, name: 'Rose', age: 20, gender: '女' },
      { id: 3, name: 'Tom', age: 22, gender: '男' },
      { id: 4, name: 'Jerry', age: 24, gender: '女' }
    ]

// 1 . 获取元素

var tbody = document.querySelector('tbody')

// 2 . 准备拼接字符串

// 2-1. 准备一个变量, 接受拼接结果
    var str = ''

    // 2-2. 循环遍历 userList
    userList.forEach(function (item) {
      // userList 内有多少个对象, 执行多少回
      // 有多少对象就需要多少个 tr 标签
      // 每执行一回, 向 str 身上拼接一个 tr
      str += '<tr>'

      // 2-3. 遍历每个对象 item, 根据 item 内的成员 key 来生成 td 标签
      for (var key in item) {
        // 对象内有多少个成员, 执行多少回
        // 有多少成员, 就需要多少个 td 标签
        // 每执行一次 拼接一个 td
        // 在 td 开合标签中间加上文本内容 item[key]
        str += '<td>' + item[key] + '</td>'
      }

      str += '</tr>'
    })

// 3. 填充内容

tbody.innerHTML = str

动态渲染表格 1.0

  • 0.0 内的步骤 2 并不友好 , 接下来用模板字符串进行优化

知识点: 模板字符串
=> JS 定义字符串的一种方式
=> 只不过是使用 反引号(``) 来定义
=> 区别:
1. 反引号 定义的字符串 可以换行书写
2. 可以直接在字符串内解析变量
+ 当你需要解析变量的时候, 直接书写 ${变量}
在这里插入图片描述

<script>
    // 0. 要准备好一个数据
    var userList = [
      { id: 1, name: 'Jack', age: 18, gender: '男' },
      { id: 2, name: 'Rose', age: 20, gender: '女' },
      { id: 3, name: 'Tom', age: 22, gender: '男' },
      { id: 4, name: 'Jerry', age: 24, gender: '女' }
    ]

    // 1. 获取元素
    var tbody = document.querySelector('tbody')

    // 2. 准备拼接字符串
    var str = ''

    userList.forEach(function (item) {
      // 这个函数执行多少回, 需要多少个 tr 标签
      str += `
        <tr>
          <td>
            <span>${ item.id }</span>
          </td>
          <td>
            <span>${ item.name }</span>
          </td>
          <td>
            <span>${ item.age }</span>
          </td>
          <td>
            <span>${ item.gender }</span>
          </td>
        </tr>
      `
    })

    // 3. 填充内容
    tbody.innerHTML = str
  </script>
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值