如何排序列表
学习如何使用 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; }