Примерно такая функция sortTable
сделает работу:
function sortTable(tbody, index, ascending) {
Array.prototype.slice.call(tbody.children).sort(
(tr1, tr2) => tr1.children[index].textContent.localeCompare(tr2.children[index].textContent) * (ascending ? 1 : -1)
).forEach(tr => tbody.appendChild(tr));
}
// demonstration
(function(){
const thead_tr = document.getElementById('thdtr');
const tbody = document.getElementById('tbd');
function makeCell() {
const td = document.createElement('td');
td.appendChild(document.createTextNode(Math.round(Math.random() * 999999999).toString(36)));
return td;
}
function makeRow() {
const tr = document.createElement('tr');
for(let i = 0; i < thead_tr.children.length; i++) tr.appendChild(makeCell());
return tr;
}
// adds click-to-sort functionality
Array.prototype.forEach.call(thead_tr.children, (th, index) => {
let asc_toggle = false; // false will start off in ascending order
th.addEventListener('click', event => sortTable(tbody, index, asc_toggle = !asc_toggle));
});
// fills the table with random alphanumeric data
for(let i = 0; i < 100; i++) tbody.appendChild(makeRow());
}());
<table>
<thead>
<tr id="thdtr">
<th>col 1</th>
<th>col 2</th>
<th>col 3</th>
</tr>
</thead>
<tbody id="tbd">
</tbody>
<table>
Моя sortTable
- это универсальная функция сортировки таблиц на месте, которая должна работать с любой таблицей.Он принимает 3 параметра:
tbody
- DOMElement
- ссылка либо на элемент tbody
, либо на сам элемент table
, в зависимости от того, что содержит элементы tr
(строка). index
- Number
- индекс сортируемого столбца (начинается с 0
). ascending
- Boolean
- возрастает ли порядок (true
) или по убыванию (false
)
Пример использования для вашего текущего кода:
sortTable(document.querySelector('.people__table tbody'), 0, true);