【发布时间】:2019-03-06 19:56:37
【问题描述】:
当用户单击表头时,我正在对表进行排序,并且我正在使用 vanilla Javascript 来执行此操作。我试图通过单击<th> 表头来捕获列号并将其传递给sortTable(n) 函数。另外,我正在尝试在捕获列数据后启动sortTable(n) 函数。我不确定我的错误在哪里?
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;
}
}
}
}
【问题讨论】:
标签: html html-table dom-events columnsorting