w3.css
목록 정렬
JavaScript를 사용하여 HTML 목록을 정렬하는 방법을 알아보자.
정렬 함수 생성
1단계) HTML 추가
<ul id="id01"> <li>Oslo</li> <li>Stockholm</li> <li>Helsinki</li> <li>Berlin</li> <li>Rome</li> <li>Madrid</li> </ul> <script> function sortList() { var list, i, switching, b, shouldSwitch; list = document.getElementById("id01"); switching = true; /* Make a loop that will continue until no switching has been done: */ while (switching) { // Start by saying: no switching is done: switching = false; b = list.getElementsByTagName("LI"); // Loop through all list items: for (i = 0; i < (b.length - 1); i++) { // Start by saying there should be no switching: shouldSwitch = false; /* Check if the next item should switch place with the current item: */ if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) { /* If next item is alphabetically lower than current item, mark as a switch and break the loop: */ shouldSwitch = true; break; } } if (shouldSwitch) { /* If a switch has been marked, make the switch and mark the switch as done: */ b[i].parentNode.insertBefore(b[i + 1], b[i]); switching = true; } } } </script>
기본 예시
예제 보기오름차순 및 내림차순 정렬
버튼을 처음 클릭하면 정렬 방향이 오름차순(A~Z)으로 설정된다.
다시 클릭하면 정렬 방향이 내림차순(Z에서 A)으로 변경된다.
예제
<ul id="id01"> <li>Oslo</li> <li>Stockholm</li> <li>Helsinki</li> <li>Berlin</li> <li>Rome</li> <li>Madrid</li> </ul> <script> function sortListDir() { var list, i, switching, b, shouldSwitch, dir, switchcount = 0; list = document.getElementById("id01"); switching = true; // Set the sorting direction to ascending: dir = "asc"; // Make a loop that will continue until no switching has been done: while (switching) { // Start by saying: no switching is done: switching = false; b = list.getElementsByTagName("LI"); // Loop through all list-items: for (i = 0; i < (b.length - 1); i++) { // Start by saying there should be no switching: shouldSwitch = false; /* Check if the next item should switch place with the current item, based on the sorting direction (asc or desc): */ if (dir == "asc") { if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) { /* If next item is alphabetically lower than current item, mark as a switch and break the loop: */ shouldSwitch = true; break; } } else if (dir == "desc") { if (b[i].innerHTML.toLowerCase() < b[i + 1].innerHTML.toLowerCase()) { /* If next item is alphabetically higher than current item, mark as a switch and break the loop: */ shouldSwitch= true; break; } } } if (shouldSwitch) { /* If a switch has been marked, make the switch and mark that a switch has been done: */ b[i].parentNode.insertBefore(b[i + 1], b[i]); switching = true; // Each time a switch is done, increase switchcount by 1: switchcount ++; } else { /* If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again. */ if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } </script>
기본 예시
예제 보기목록을 숫자순으로 정렬
if (Number(b[i].innerHTML) > Number(b[i + 1].innerHTML)) { shouldSwitch = true; break; }
기본 예시
예제 보기참고
W3C School - How TO - Sort a List