I'm sorting a table when a user clicks on the table head, and I'm using vanilla Javascript to do this. I'm trying to capture the column number by clicking the <th> table head and pass it to the sortTable(n) function. Also, I'm trying to start the sortTable(n) function after column data is captured. I'm not sure where my error is at?
document.getElementById('myTable2').addEventListener('click', function() {
myFunction(event)
}, true);
function myFunction() {
var col = window.event.target.cellIndex;
var n = col;
sortTable(n);
return n;
}
function sortTable(n) {
var n = myFunction();
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
table = document.getElementById("myTable2");
switching = true;
dir = "asc";
while (switching) {
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 (x.textContenttextContent.toLowerCase() > y.textContent.toLowerCase()) {
shouldSwitch = true;
break;
}
} else if (dir === "desc") {
if (x.textContent.toLowerCase() < y.textContent.toLowerCase()) {
// If so, mark as a switch and break the loop:
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
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 (switchcount === 0 && dir === "asc") {
dir = "desc";
switching = true;
}
}
}
}