Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 HTML 테이블 정렬하기: 버튼 클릭 한 번으로 이름순 정렬 구현

웹 개발을 하다 보면 테이블에 담긴 데이터를 사용자가 원하는 기준으로 정렬해야 하는 경우가 자주 있습니다. JavaScript를 활용하면 서버 요청 없이 브라우저에서 바로 테이블 행을 재배치할 수 있습니다. 이 글에서는 버튼 클릭 한 번으로 HTML 테이블을 이름순(알파벳순)으로 정렬하는 방법을 예제 코드와 함께 살펴보겠습니다.

JavaScript 테이블 정렬 예제 코드

아래 예제는 이름과 생일 월이 담긴 테이블을 대상으로, Sort 버튼을 누르면 첫 번째 열(이름)을 기준으로 오름차순 정렬됩니다.

<!DOCTYPE html>
<html>
<head>
<title>Sort a HTML Table Alphabetically</title>
<style>
    button {
        padding: 10px;
        margin-bottom: 5px;
        font-size: 16px;
        font-weight: bold;
    }
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    table {
        border-spacing: 0;
        width: 100%;
        border: 1px solid #ddd;
    }
    th, td {
        border-top: 1px solid black;
        text-align: left;
        padding: 16px;
    }
</style>
</head>
<body>
<h1>Sorting table example</h1>
<button onclick="sortTable()">Sort</button>
<table class="filterTable">
<tr>
<th>Name</th>
<th>BirthDay Month</th>
</tr>
<tr>
<td>Ron</td>
<td>January</td>
</tr>
<tr>
<td>Shawn</td>
<td>April</td>
</tr>
<tr>
<td>Caleb</td>
<td>December</td>
</tr>
<tr>
<td>Bruno</td>
<td>February</td>
</tr>
<tr>
<td>Jack</td>
<td>October</td>
</tr>
<tr>
<td>Max</td>
<td>November</td>
</tr>
</table>
<script>
    function sortTable() {
        var filterTable, rows, sorted, i, x, y, sortFlag;
        filterTable = document.querySelector(".filterTable");
        sorted = true;
        while (sorted) {
            sorted = false;
            rows = filterTable.rows;
            for (i = 1; i < rows.length - 1; i++) {
                sortFlag = false;
                x = rows[i].getElementsByTagName("TD")[0];
                y = rows[i + 1].getElementsByTagName("TD")[0];
                if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
                    sortFlag = true;
                    break;
                }
            }
            if (sortFlag) {
                rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
                sorted = true;
            }
        }
    }
</script>
</body>
</html>

실행 결과

위 코드를 브라우저에서 실행하면 다음과 같은 초기 화면이 나타납니다.

JavaScript로 HTML 테이블 정렬하기: 버튼 클릭 한 번으로 이름순 정렬 구현

여기서 Sort 버튼을 클릭하면 −

JavaScript로 HTML 테이블 정렬하기: 버튼 클릭 한 번으로 이름순 정렬 구현

테이블의 모든 행이 첫 번째 열(이름)을 기준으로 Bruno → Caleb → Jack → Max → Ron → Shawn 순서, 즉 알파벳 오름차순으로 재배치된 것을 확인할 수 있습니다.

코드 작동 원리

정렬 로직은 버블 정렬(Bubble Sort) 방식으로 동작합니다. 핵심 흐름은 다음과 같습니다.

  • document.querySelector(".filterTable")로 정렬 대상 테이블을 선택합니다.
  • while 반복문 안에서 인접한 두 행(rows[i], rows[i + 1])의 첫 번째 셀 값을 비교합니다.
  • toLowerCase()를 사용해 대소문자 차이 없이 비교하므로, 'Ron'과 'ron'처럼 표기가 달라도 올바르게 정렬됩니다.
  • 앞 행이 더 크면 insertBefore()로 두 행의 위치를 교환하고, 교환이 발생했음을 표시해 반복을 계속합니다.
  • 더 이상 교환이 일어나지 않으면 정렬이 완료된 것으로 판단하고 반복문을 종료합니다.

루프는 헤더 행을 건너뛰기 위해 인덱스 1부터 시작하며, 이렇게 하면 제목 행은 그대로 유지되고 데이터 행만 정렬됩니다.

마무리 및 확장 아이디어

이 방식은 별도의 외부 라이브러리 없이 순수 JavaScript만으로 테이블 정렬을 구현할 수 있다는 점에서 유용합니다. 실무에서는 여기에 다음과 같은 기능을 추가해 확장할 수 있습니다.

  • 열 머리글(th) 클릭 시 해당 열을 기준으로 정렬하도록 이벤트 연결
  • 오름차순/내림차순 토글 기능 추가
  • 숫자나 날짜 형식 데이터에 맞는 비교 함수 적용

데이터 양이 많다면 성능을 고려해 Array.prototype.sort()를 활용한 방식으로 최적화하는 것도 좋은 선택입니다.