回到课程

对表格进行排序

重要程度: 5

下面是一个表格:

<table>
<thead>
  <tr>
    <th>Name</th><th>Surname</th><th>Age</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>John</td><td>Smith</td><td>10</td>
  </tr>
  <tr>
    <td>Pete</td><td>Brown</td><td>15</td>
  </tr>
  <tr>
    <td>Ann</td><td>Lee</td><td>5</td>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
</tbody>
</table>

可能会有更多行。

编写代码,按 "name" 列对其进行排序。

打开一个任务沙箱。

这个解决方案虽然很短,但可能看起来有点难理解,因此,在这里我提供了一些扩展性的注释:

let sortedRows = Array.from(table.tBodies[0].rows) // 1
  .sort((rowA, rowB) => rowA.cells[0].innerHTML.localeCompare(rowB.cells[0].innerHTML));

table.tBodies[0].append(...sortedRows); // (3)

对此算法一步一步进行讲解:

  1. <tbody> 获取所有 <tr>
  2. 然后将它们按第一个 <td>name 字段)中的内容进行比较。
  3. 然后使用 .append(...sortedRows) 按正确的顺序插入节点。

我们不必删除行元素,只需要“重新插入”,它们就会自动离开原来的位置。

P.S. 在我们的例子中,表格中有一个明确的 <tbody>,但即使 HTML 中的表格没有 <tbody>,DOM 结构也总是具有它。

使用沙箱打开解决方案。