如何排序列表
學習如何使用 JavaScript 對 HTML 列表進行排序。
單擊該按鈕可按字母順序對列表進行排序:
- Oslo
- Stockholm
- Helsinki
- Berlin
- Rome
- Madrid
創建排序函數
實例
<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; /* 創建一個循環,該循環將持續進行,直到沒有需要交換的項為止: */ while (switching) { // 首先聲明:當前沒有需要交換的項 switching = false; b = list.getElementsByTagName("LI"); // 遍歷所有列表項: for (i = 0; i < (b.length - 1); i++) { // 首先聲明:當前項與下一項不應該交換位置 shouldSwitch = false; /* 檢查下一項是否應該與當前項交換位置: */ if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) { /* 如果下一項的字母順序在當前項之前,則標記為需要交換,并跳出當前循環: */ shouldSwitch = true; break; } } if (shouldSwitch) { /* 如果已標記為需要交換,則執行交換操作,并標記已進行了交換: */ b[i].parentNode.insertBefore(b[i + 1], b[i]); switching = true; } } } </script>
升序和降序排序
第一次單擊該按鈕時,排序方向為升序(A 到 Z)。
再次點擊,排序方向為降序(Z 到 A):
- Oslo
- Stockholm
- Helsinki
- Berlin
- Rome
- Madrid
實例
<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; // 設置排序方向為升序: dir = "asc"; // 創建一個循環,該循環將持續進行,直到沒有需要交換的項為止: while (switching) { // 首先聲明:當前沒有需要交換的項: switching = false; b = list.getElementsByTagName("LI"); // 遍歷所有列表項: for (i = 0; i < (b.length - 1); i++) { // 首先聲明:當前項與下一項不應該交換位置: shouldSwitch = false; /* 根據排序方向(升序或降序)檢查下一項是否應該與當前項交換位置: */ if (dir == "asc") { if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) { /* 如果下一項的字母順序在當前項之前,則標記為需要交換,并跳出當前循環: */ shouldSwitch = true; break; } } else if (dir == "desc") { if (b[i].innerHTML.toLowerCase() < b[i + 1].innerHTML.toLowerCase()) { /* 如果下一項的字母順序在當前項之后,則標記為需要交換,并跳出當前循環: */ shouldSwitch= true; break; } } } if (shouldSwitch) { /* 如果已標記為需要交換,則執行交換操作,并標記已進行了交換: */ b[i].parentNode.insertBefore(b[i + 1], b[i]); switching = true; // 每次進行交換時,switchcount 增加 1: switchcount ++; } else { /* 如果沒有進行交換并且方向是“升序”,則將方向設置為“降序”并再次運行 while 循環。 */ if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } </script>
按數字對列表進行排序
實例
if (Number(b[i].innerHTML) > Number(b[i + 1].innerHTML)) { shouldSwitch = true; break; }