แบบเรียงลำดับ
เรียนรู้วิธีการใช้ 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; /* ตรวจสอบว่าช่องต่อไปนี้ควรเปลี่ยนตำแหน่งกับช่องปัจจุบันหรือไม่: */ /* ถ้าตัวอักษรต่อไปของรายการอยู่ก่อนตัวอักษรปัจจุบัน ก็จะทำเคียงและออกจากวงล้อมวนปัจจุบัน: */ shouldSwitch = true; else if (dir == "desc") { 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") { /* ถ้าตัวอักษรต่อไปของรายการอยู่ก่อนตัวอักษรปัจจุบัน ก็จะทำเคียงและออกจากวงล้อมวนปัจจุบัน: */ shouldSwitch = true; else if (dir == "desc") { 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 ++; } /* ถ้าไม่มีการแก้ไขและทิศทางคือ “เพิ่มขึ้น” ก็จะตั้งทิศทางเป็น “ลดลง” และปฎิบัติรอบๆ อีกครั้ง */ if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } </script>
เรียงลำดับรายการด้วยตัวเลข
ตัวอย่าง
if (Number(b[i].innerHTML) > Number(b[i + 1].innerHTML)) { shouldSwitch = true; break; }