J'ai écrit un code qui permet de trier une table par ligne, en supposant qu'il n'y ait qu'une seule ligne. <tbody>
et les cellules n'ont pas de colspan .
function sortTable(table, col, reverse) {
var tb = table.tBodies[0], // use `<tbody>` to ignore `<thead>` and `<tfoot>` rows
tr = Array.prototype.slice.call(tb.rows, 0), // put rows into array
i;
reverse = -((+reverse) || -1);
tr = tr.sort(function (a, b) { // sort rows
return reverse // `-1 *` if want opposite order
* (a.cells[col].textContent.trim() // using `.textContent.trim()` for test
.localeCompare(b.cells[col].textContent.trim())
);
});
for(i = 0; i < tr.length; ++i) tb.appendChild(tr[i]); // append each row in order
}
// sortTable(tableNode, columId, false);
Si vous ne voulez pas faire les hypothèses ci-dessus, vous devez réfléchir à la façon dont vous voulez vous comporter dans chaque circonstance. (par exemple, tout mettre dans un <tbody>
ou additionner tous les éléments précédents colspan valeurs, etc.)
Vous pourriez alors l'attacher à chacune de vos tables, par exemple en supposant que les titres sont dans <thead>
function makeSortable(table) {
var th = table.tHead, i;
th && (th = th.rows[0]) && (th = th.cells);
if (th) i = th.length;
else return; // if no `<thead>` then do nothing
while (--i >= 0) (function (i) {
var dir = 1;
th[i].addEventListener('click', function () {sortTable(table, i, (dir = 1 - dir))});
}(i));
}
function makeAllSortable(parent) {
parent = parent || document.body;
var t = parent.getElementsByTagName('table'), i = t.length;
while (--i >= 0) makeSortable(t[i]);
}
puis en invoquant makeAllSortable
onload .
Exemple violon d'elle travaillant sur une table.