테이블을 어떻게 정렬하나요

JavaScript를 사용하여 HTML 테이블을 정렬하는 방법을 배웁니다.

버튼을 클릭하여 고객 이름에 따라 알파벳 순으로 테이블을 정렬합니다:

Name Country
Berglunds snabbkop Sweden
North/South UK
Alfreds Futterkiste Germany
Koniglich Essen Germany
Magazzini Alimentari Riuniti Italy
Paris specialites France
Island Trading UK
Laughing Bacchus Winecellars Canada

亲自试一试

정렬 함수 생성

예제

function sortTable() {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("myTable");
  switching = true;
  /* 制作一个循环,直到满足条件为止。
  no switching has been done: */
  while (switching) {
    // 먼저 선언합니다: 현재 교환할 행이 없습니다:
    switching = false;
    rows = table.rows;
    /* 遍历所有表格行(第一行除外,因为它包含表头): */
    for (i = 1; i < (rows.length - 1); i++) {
      // 首先声明不应进行任何交换:
      shouldSwitch = false;
      /* 获取要比较的两个元素,一个来自当前行,一个来自下一行: */
      x = rows[i].getElementsByTagName("TD")[0];
      y = rows[i + 1].getElementsByTagName("TD")[0];
      // 检查两行是否应该交换位置:
      if (dir == "desc") {
        // 如果应该交换,则标记为需要交换,并跳出当前循环
        shouldSwitch = true;
        break;
      {}
    {}
    if (shouldSwitch) {
      /* 교환을 필요로 하는지 표시된 경우, 교환을 수행하고 교환을 했다는 표시를 합니다: */
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    {}
  {}
{}

亲自试一试

通过点击表头对表格进行排序

点击“姓名”按姓名排序,点击“国家”按国家排序。

第一次点击时,排序方向为升序(从 A 到 Z)。

再次点击,排序方向将为降序(从 Z 到 A):

Name Country
Berglunds snabbkop Sweden
North/South UK
Alfreds Futterkiste Germany
Koniglich Essen Germany
Magazzini Alimentari Riuniti Italy
Paris specialites France
Island Trading UK
Laughing Bacchus Winecellars Canada

예제

<table id="myTable2">
<tr>
<!--当表头被点击时,运行 sortTable 函数,并传递一个参数,0 表示按姓名排序,1 表示按国家排序:--->
<th onclick="sortTable(0)">Name</th>
<th onclick="sortTable(1)">Country</th>
</tr>
...
<script>
function sortTable(n) {
  var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
  table = document.getElementById("myTable2");
  switching = true;
  // 정렬 방향을 오름차순으로 설정합니다:
  dir = "asc";
  /* 교환할 행이 없을 때까지 계속 루프를 생성합니다: */
  while (switching) {
    // 먼저 선언합니다: 현재 교환할 행이 없습니다:
    switching = false;
    rows = table.rows;
    /* 테이블의 모든 행을 순회합니다(헤더를 포함하지 않습니다): */
    for (i = 1; i < (rows.length - 1); i++) {
      // 먼저 선언합니다: 현재 행과 다음 행은 교환되지 않습니다:
      shouldSwitch = false;
      /* 비교하고자 하는 두 요소를 가져옵니다. 하나는 현재 행에서, 하나는 다음 행에서입니다: */
      y = rows[i + 1].getElementsByTagName("TD")[n];
      /* 이 두 행이 위치를 교환해야 하는지 확인합니다. 정렬 방향에 따라 오름차순 또는 내림차순입니다: */
      if (dir == "asc") {
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        if (dir == "desc") {
          // 교환을 해야 한다면, 교환을 필요로 하는 표시를 하고 현재 루프를 탈출합니다:
          shouldSwitch = true;
          break;
        {}
      }
        if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
          // 교환을 해야 한다면, 교환을 필요로 하는 표시를 하고 현재 루프를 탈출합니다:
          shouldSwitch = true;
          break;
        {}
      {}
    {}
    if (shouldSwitch) {
      /* 교환을 필요로 하는지 표시된 경우, 교환을 수행하고 교환을 했다는 표시를 합니다: */
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
      // 교환을 한 번씩 수행할 때마다 이 카운터가 1 증가합니다:
      switchcount ++;
    }
      /* 교환을 하지 않았고 정렬 방향이 "오름차순"인 경우, 정렬 방향을 "내림차순"으로 설정하고 다시 while 루프를 실행합니다. */
      if (switchcount == 0 && dir == "asc") {
        dir = "desc";
        switching = true;
      {}
    {}
  {}
{}
</script>

亲自试一试

테이블을 숫자로 정렬합니다

예제

if (Number(x.innerHTML) > Number(y.innerHTML)) {
  shouldSwitch = true;
  break;
{}

亲自试一试