リストのソート方法
- 前のページ: フィルタリングダウンメニュー:
- 次のページ: ソートテーブル:
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; } } 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 ++; } /* 交換が行われていない場合で、方向が「昇順」の場合、方向を「降順」に設定し、whileループを再び実行します。 */ if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } </script>
リストを数字でソートします
例
if (Number(b[i].innerHTML) > Number(b[i + 1].innerHTML)) { shouldSwitch = true; break; }
- 前のページ: フィルタリングダウンメニュー:
- 次のページ: ソートテーブル: