getElementsByTagName("TD")[0]
означает доступ к элементу first TD
, но вам не всегда нужен первый. Вместо этого вам нужно добавить colNum
параметр , который можно использовать для ввода другого числа в те квадратные скобки, которые вы определяете при вызове функции. Вы также захотите рассматривать сортировку чисел иначе, чем сортировку по алфавиту. Когда вы рассматриваете числа как строки, они сортируются по-разному, как показано здесь:
console.log( ["19", "20", "3", "35", "1", "25", "300"].sort() );
Итак, добавьте второй параметр, в котором вы сообщаете функции, должна ли она использовать алфавитную или числовую сортировку. Затем в функции определите параметр и выполните соответствующую сортировку следующим образом:
function sortTable(colNum, sortType) {
var table, rows, switching, i, x, y, shouldSwitch;
table = document.getElementById("phones");
switching = true;
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = rows[i].getElementsByTagName("TD")[colNum];
y = rows[i + 1].getElementsByTagName("TD")[colNum];
if (sortType == "alphabetical") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
} else {
if (Number(x.innerHTML) > Number(y.innerHTML)) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
}
}
}
<table id="phones">
<tr>
<th><button onclick="sortTable(0, 'alphabetical');">Sort this column</button></th>
<th><button onclick="sortTable(1, 'alphabetical');">Sort this column</button></th>
<th><button onclick="sortTable(2, 'numerical');">Sort this column</button></th>
</tr>
<tr>
<td>C</td>
<td>A</td>
<td>100</td>
</tr>
<tr>
<td>D</td>
<td>Z</td>
<td>1</td>
</tr>
<tr>
<td>E</td>
<td>D</td>
<td>19</td>
</tr>
<tr>
<td>A</td>
<td>C</td>
<td>55</td>
</tr>
</table>