테이블을 어떻게 정렬하나요
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; {}