对未显示可排序值的列上的HTML表进行排序.任何现有的解决方案



我知道有很多表排序器。例如,tablesorter、datatables等。但我没有找到任何可以根据内部关联值对列进行排序的东西。易于解释的示例:日期和时间被检索为简单的UNIX整数时间,但显示是使用格式化字符串进行格式化的,如果按ASCII显示的字符串排序,则该字符串可能不提供升序或降序日期。例如,在2011年12月31日这样显示的日期进行排序将不提供临时排序。我知道排序器中有一些选项可以专门按日期排序,但我正在寻找一种通用的解决方案,用于超出标准类型(如日期)的数据类型。

欢迎提出任何建议。我想在JQuery中编码。我正在寻找更多的算法方法,而不是如何编码。例如,在哪里维护隐藏值?数据xxx属性,例如在列的"td"中,并在该列的"th"中将相同的属性设置为布尔值Y或N,以指示显示的排序类型或数据值?

如果存在现有的解决方案,请提及它们。我没有找到,但我可能又错过了一个。

我使用Jquery数据表(http://datatables.net/)。您可以扩展插件来添加新的"数据格式"。

示例:

我来自西班牙,日期的格式为:dd/mm/yyyy hh:mm:ss。

如果我使用插件用于排序日期的排序器,则日期的排序方式类似于字符串(插件支持数据格式为yyyy-mm-dd hh:mm:ss)。

您必须执行一个函数来返回一个整数,该整数是日期的"权重","20/10/2013"的权重小于"15/11/2013",因此20/10/2013小于15/11/2013。

对于dd/mm/yyyy的格式,计算权重的函数为:(您可以更改为mm/dd/yyyy,更改frDateParts的索引)

function dateHeight(dateStr){
        if (trim(dateStr) != '') {
                var frDate = trim(dateStr).split(' ');
                var frTime = frDate[1].split(':');
                var frDateParts = frDate[0].split('/');
                var day = frDateParts[0] * 60 * 24; /*<--- in mm/dd/yyyy is frDateParts[1]*/
                var month = frDateParts[1] * 60 * 24 * 31; /*<--- in mm/dd/yyyy is frDateParts[0]*/
                var year = frDateParts[2] * 60 * 24 * 366;
                var hour = frTime[0] * 60;
                var minutes = frTime[1];
                var x = day+month+year+hour+minutes;
        } else {
                var x = 99999999999999999; 
        }
        return x;
}

以及插件的扩展:

/* NOTE: the new format is called "date-euro" (why not? xD) so:
you have to do the "date-euro-asc" for ascendent order and the "date-euro-desc"
 for descendent order. the return of the function has to be 
-1 (lesser), 0 (equal) or 1 (greater)*/
jQuery.fn.dataTableExt.oSort['date-euro-asc'] = function(a, b) {
        var x = dateHeight(a);
        var y = dateHeight(b);
        var z = ((x < y) ? -1 : ((x > y) ? 1 : 0));
        return z;
};
jQuery.fn.dataTableExt.oSort['date-euro-desc'] = function(a, b) {
        var x = dateHeight(a);
        var y = dateHeight(b);
        var z = ((x < y) ? 1 : ((x > y) ? -1 : 0));
        return z;
};

当您使用该列的日期表插件定义表时:

 { "sType": "date-euro"},

示例(表中有5列(Int、string、Date、string、string):

  "aoColumns": [
         { "sType": 'numeric' },
           null,
           { "sType": "date-euro"},
           null,
           null 
     ],

yes解决方案已经存在。您必须在html中使用简单的jquery表分类器。它也将在开发时使用。您可以轻松地对所有字段或一个字段进行排序。

jQuery表排序程序

最新更新