본문 바로가기

HTML 예제

동적 테이블 정렬: JavaScript를 사용하여 동적으로 테이블 열 정렬

반응형

동적으로 테이블 열을 정렬하는 예제를 만들어보겠습니다. 이 예제는 HTML, CSS 및 JavaScript를 사용하여 동적으로 테이블을 정렬하는 방법을 보여줍니다.

1. HTML 코드 작성:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="euc-kr">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>동적 테이블 정렬</title>
</head>
<body>
    <table id="sortable-table">
        <thead>
            <tr>
                <th data-column="name">이름</th>
                <th data-column="age">나이</th>
                <th data-column="city">도시</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td data-type="name">John</td>
                <td data-type="age">30</td>
                <td data-type="city">New York</td>
            </tr>
            <tr>
                <td data-type="name">Alice</td>
                <td data-type="age">25</td>
                <td data-type="city">Los Angeles</td>
            </tr>
            <tr>
                <td data-type="name">Bob</td>
                <td data-type="age">35</td>
                <td data-type="city">Chicago</td>
            </tr>
        </tbody>
    </table>
    <script src="script.js"></script>
</body>
</html>


위 코드에서는 정렬할 테이블과 테이블 헤더를 작성합니다.

2. CSS 코드 작성:


/* styles.css */
table {
    border-collapse: collapse;
    width: 100%;
}

th, td {
    border: 1px solid #ddd;
    padding: 8px;
    text-align: left;
}

th {
    background-color: #f2f2f2;
    cursor: pointer;
}

 


3. JavaScript 코드 작성:

// script.js
const table = document.getElementById("sortable-table");
const headers = table.querySelectorAll("th");
const rows = Array.from(table.querySelectorAll("tbody tr"));

function sortTable(columnIndex) {
    const dataType = headers[columnIndex].getAttribute("data-column");

    rows.sort((a, b) => {
        const aValue = a.querySelector(`td[data-type="${dataType}"]`).textContent;
        const bValue = b.querySelector(`td[data-type="${dataType}"]`).textContent;

        if (dataType === "name") {
            return aValue.localeCompare(bValue);
        } else {
            return Number(aValue) - Number(bValue);
        }
    });

    rows.forEach((row) => table.tBodies[0].appendChild(row));
}

headers.forEach((header, index) => {
    header.addEventListener("click", () => {
        sortTable(index);
    });
});

 


위 코드는 다음과 같은 작업을 수행합니다.

테이블 헤더를 클릭하면 해당 열을 기준으로 테이블을 정렬합니다.
이름 열은 문자열로, 나이 열은 숫자로 정렬됩니다.
이제 페이지를 열고 테이블의 열을 클릭하여 동적으로 정렬해보세요.

반응형