abc
unknown
javascript
a year ago
2.7 kB
7
Indexable
function stringToDate(string) { var date = string.split("/"); return new Date(date[2], date[1] - 1, date[0]); } function sortTableByDate(n) { var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0; table = document.getElementById("tbl"); switching = true; //Set the sorting direction to ascending: dir = "asc"; // Remove class asc and desc (arrow direction) // if (dir == "asc") { // table.rows[0].cells[n].classList.remove("desc"); // } else { // table.rows[0].cells[n].classList.remove("asc"); // } /*Make a loop that will continue until no switching has been done:*/ while (switching) { //start by saying: no switching is done: switching = false; rows = table.rows; /*Loop through all table rows (except the first, which contains table headers):*/ for (i = 1; i < rows.length - 1; i++) { //start by saying there should be no switching: shouldSwitch = false; /*Get the two elements you want to compare, one from current row and one from the next:*/ x = rows[i].getElementsByTagName("TD")[n]; y = rows[i + 1].getElementsByTagName("TD")[n]; /*check if the two rows should switch place, based on the direction, asc or desc:*/ if (dir == "asc") { if (stringToDate(x.innerHTML) > stringToDate(y.innerHTML)) { //if so, mark as a switch and break the loop: shouldSwitch = true; break; } } else if (dir == "desc") { if (stringToDate(x.innerHTML) < stringToDate(y.innerHTML)) { //if so, 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:*/ rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); switching = true; //Each time a switch is done, increase this count 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; } } } // table.rows[0].cells[n].classList.add(dir); }
Editor is loading...