点击表头,按该列的元素进行排序
<body>
<table class="container">
<thead>
<th>ID</th>
<th>QQ</th>
<th>score</th>
</thead>
<tbody>
<tr><td>1</td><td>10.0</td><td>800</td></tr>
<tr><td>2</td><td>30.0</td><td>600</td></tr>
<tr><td>3</td><td>20.5</td><td>700</td></tr>
<tr><td>4</td><td>40.5</td><td>500</td></tr>
<tr><td>5</td><td>60.5</td><td>300</td></tr>
<tr><td>6</td><td>50.0</td><td>400</td></tr>
<tr><td>7</td><td>70.0</td><td>200</td></tr>
<tr><td>8</td><td>80.5</td><td>100</td></tr>
</tbody>
</table>
<script>
const order = {
init(param) {
const that = this;
const table = param.el;
if (!table) return;
const tbody = table.getElementsByTagName('tbody')[0];
console.log(tbody);
const ths = Array.prototype.slice.call(table.getElementsByTagName('th'))
const trs = Array.prototype.slice.call(table.getElementsByTagName('tr'))
const list = this.getBodyList(trs.slice(1));
ths.forEach((th, index) => {
th.addEventListener('click', () => {
const isAsc = this.isAsc(list, index);
list.sort((a, b) => isAsc ? b.value[index] - a.value[index] : a.value[index] - b.value[index]);
for (let i = 0; i < list.length; i++) {
let str = ''
for (let j = 0; j < list[i].value.length; j++) {
str += `<td>${list[i].value[j]}</td>`;
}
list[i].tr.innerHTML = str;
}
let htmlstr = ''
for (let i = 0; i < list.length; i++) {
htmlstr += "<tr>" + list[i].tr.innerHTML + "</tr>";
}
tbody.innerHTML = htmlstr
});
});
},
getBodyList(trs) {
return trs.map((tr, index) => {
const tds = Array.prototype.slice.call(tr.children)
const val = tds.map(td => td.innerHTML);
return { tr: tr, value: val };
});
},
isAsc(list, index) {
for (let i = 1; i < list.length; i++) {
if (Number.parseInt(list[i].value[i]) < Number.parseInt(list[i].value[i - 1])) {
return false;
}
}
return true;
}
};
order.init({
el: document.getElementsByClassName('container')[0]
});
</script>
</body>