使用jquery按表中的每列对表进行排序

时间:2015-03-11 10:44:32

标签: jquery

我在MVC4中工作,使用c#和jquery我的任务是通过单击列标题对表进行排序我已经使用了一些jquery方法来完美地排序文本和数字但是它没有按照日期排序表我已经尝试过不同的日期(2/12 / 2014,12 / 15 / 2010,3 / 10 / 2014,14 / 05/2014)

我的jquery代码是:

$Sorting = function ($ele) {
    var table = $ele.parents('table').eq(0);
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($ele.index()));
    this.asc = !this.asc;
    if (!(this.asc)) { rows = rows.reverse(); }
    for (var i = 0; i < rows.length; i++) { table.append(rows[i]); }
}
function comparer(index) {
    return function (a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index);
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
    }
}
function getCellValue(row, index) { return $(row).children('td').eq(index).html() }

请帮我解决如何使用日期,文本和整数值对表进行排序

1 个答案:

答案 0 :(得分:0)

这里的问题是您要对基于文本的值进行排序,而您希望在其数字内容上解释这些值。

过去,我在日期栏(每行)中设置了一个隐藏字段,日期写为YYYYMMDD(例如今天是20150311)。

<td>
    <span class="invisibleSpan">20150311</span>
    11/03/2015
<td>

如果对该隐藏值进行排序,则排序为文本和数值都将完全相同,这将简化您的基本排序算法,因为您不必再​​解析日期字符串。

修改确保为一位数的月份和日期添加前导0。否则,排序将无法按预期工作。

另一方面,有很多JS / jQuery库已经实现了更好的解决方案 我总是对DataTables有很好的体验,虽然我不得不承认如果你寻找排序选项可能会有点过分。 DataTables具有很多功能,并且会对CSS和表处理产生一些干扰。