我有一个(footable)表格,其中包含日期时间戳记格式的文本列,如:
05.04.2018 19:00
09.06.2018 20:00
10.06.2018 19:00
我想按列值对此表进行排序,但它不起作用。提供像201804051900这样的sortValue也不起作用。
我的所有数据都是由jquery在服务器上执行php文件加载的。日期/时间列以以下格式加载:
$cols[$i]['name']="sp_timestamp";
$cols[$i]['title']="Datum/Zeit";
$cols[$i]['sorted']=true;
$cols[$i]['direction']="DESC";
,行为:
$rows[$key]['sp_timestamp']['options']['sortValue']='201804051900';
$rows[$key]['sp_timestamp']['value']='05.04.2018 19:00';
$i
和$key
只是php中迭代器的索引。
有人可以帮我吗?
编辑:
编辑:通过调查footable.js我发现了以下行为。我已将F.Column.prototype.sorter
的参数打印到控制台。似乎正确使用了表sortValue
的初始加载。任何进一步的排序都不会使用sortValue
,而是使用列值本身。在DOM中,未设置data-sort-value属性。据我了解文档,这似乎是一个错误?
答案 0 :(得分:0)
肮脏的解决方案: 我已经更改了F.Column.prototype.sorter来快速解决我的问题,使用momentjs来正确格式化字符串。但这只是一种解决方法。
F.Column.prototype.sorter = function(a, b){
if ($.isNumeric(a)) {a=parseInt(a,10);} else if (typeof a === 'string') {a = a.toLowerCase()};
if ($.isNumeric(b)) {b=parseInt(b,10);} else if (typeof b === 'string') {b = b.toLowerCase()};
var m_a=moment(a, 'L LT');
var m_b=moment(b, 'L LT');
if (m_a.isValid()) {a=m_a.format('YYYYMMDDHHmm');}
if (m_b.isValid()) {b=m_b.format('YYYYMMDDHHmm');}
if (a === b) return 0;
if (a < b) return -1;
return 1;
};
正如您所看到的,如果sortvalue是数字,我已经重新覆盖了默认的字符串排序。