javascript - 单击HTML表格列以在Javascript中进行排序时如何显示向上/向下箭头
问题描述
在我的页面中,我有一个由 ajax post 调用填充的 html 动态表。在该表上,我想按列对列标题的 on_click 值进行排序。使用下面的共享代码也可以正常工作。
现在,我想在单击时在列名旁边显示下面提到的小图标(fontawesome 图标)。如果未单击该列进行排序,则不应显示该图标。在我的 javascript 代码中,makeAllSortable() 应该在 Windows 加载时调用,第一次单击任何列将以 asc 顺序显示值,第二次单击它将按 desc 顺序显示。
图标:
<i class="fa fa-caret-up" aria-hidden="true"></i> - for ascending order
<i class="fa fa-caret-down" aria-hidden="true"></i> - for descending order
Javascript代码:
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
}
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]);
}
我没有任何出路。请帮忙。
提前致谢 !!
解决方案
示例代码...
const sortOrder = document.getElementById('sort-order')
function changeOrder(evt)
{
this.className = (this.className==='')? 'upOrder' : (this.className==='upOrder') ? 'downOrder' : ''
}
sortOrder.addEventListener('click',changeOrder )
#sort-order {
font-size: 40px;
display: inline-block;
width:30px;
height:50px;
border: 1px solid grey;
padding: 0 7px;
}
#sort-order > i { display:none; }
#sort-order.upOrder > i.fa-caret-up { display:inline; }
#sort-order.downOrder > i.fa-caret-down { display:inline; }
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css" />
<div id="sort-order">
<i class="fa fa-caret-up" aria-hidden="true"></i>
<i class="fa fa-caret-down" aria-hidden="true"></i>
</div>
<-- click in!
推荐阅读
- c++ - 为什么我在“push_back”对向量的第二个元素中出现 C3867 错误?
- javascript - React re-rendering components twice?
- c# - C# 如何使用 HTTP URI 获取 o365 附件
- java - 如何通过 optaplanner 引擎获得没有任何硬分的解决方案
- c++ - 在数组中查找元素,找到则返回找到,否则返回未找到
- c++ - 将函数指针作为函数参数传递的目的
- asp.net-web-api - 如何通过我们的 .net web api 访问在 azure 门户中创建的 CosmosDb 存储过程
- spring-boot - 在 @ComponentScan 中使用多个路径不起作用
- python - 使用 groupby 方法中的计数作为 if 条件在 pandas 中进行分析
- mysql - 显示高于平均值和现场数据的值