提问者:小点点

如何在Javascript中点击HTML表格列进行排序时显示向上/向下箭头


在我的页面中,我有一个html动态表,它由ajax post调用填充。 在该表上,我想对列标题的_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]);
}

我找不到任何出路。 请帮帮我。

提前感谢!!


共1个答案

匿名用户

示例代码。。。

null

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!