DataTables API:由于渲染(在某些元素中插入字符串),数据表无法对整数列进行排序

时间:2017-08-10 21:19:22

标签: javascript jquery sorting datatable datatables

似乎渲染功能会损害DataTable对我的一个列的排序功能。此列包含所谓的“语料库排名”。语料库排名都是整数,但出于界面目的,我写了一个渲染函数来检测语料库排名何时超过4000.如果是这样,那么我有渲染功能将语料库排名条目更改为罕见的字符串。 / p>

这是因为当有人点击列的标题以尝试按语料库排名对其进行排序时,语料库排名被视为字符串而不是整数。如果我删除了渲染功能然后该列实际上被排序为整数而不是字符串。

                     columns.push({
              "name": $(this).data("fieldname"),
              "data": "fields."+$(this).data("fieldname"),
              /*"render": function( data, type, full, meta) {
                  if (data > 4000) {
                    return "rare";
                  } else {
                    return data;
                 }
               },*/
              "visible": $(this).data("visible"),

我知道DataTables通常使用其中的数据类型对列进行排序......但这是一个包含整数和字符串的列。我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:0)

你能添加另一列isRare吗?并且对于4000以下的所有等级保持0,对于4000以上的所有等级保持1?除非你有其他不允许你拥有这样一栏的限制,否则应该这样做。

答案 1 :(得分:0)

您可以将其用于排序html5-data-attributescolumns.createdCell

下面是代码示例。我是根据你上面的代码创建的:

"data": "fields."+$(this).data("fieldname"),
"render": function( data, type, full, meta) {
              if (data > 4000) {
                return "rare";
              } else {
                return data;
              }
           },
"createdCell": function (td, cellData, rowData, row, col) {
                   $(td).attr('data-order', cellData);
               }

答案 2 :(得分:0)

我过去使用的一个选项(但可能不是当前最受欢迎的方法)是使用ref标记将单元格内容包装在一个span中,并添加一个比较ref值的自定义排序类型: / p>

$.fn.dataTableExt.oSort['ref-numeric-asc'] = function (a, b) {
	var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
	var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
	x = parseFloat(x);
	y = parseFloat(y);
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
$.fn.dataTableExt.oSort['ref-numeric-desc'] = function (a, b) {
	var x = a ? a.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
	var y = b ? b.match(/ref=['"]*(-?[0-9\.]+)/)[1] : "0";
	x = parseFloat(x);
	y = parseFloat(y);
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};

然后,您可以指定“ref-numeric”作为该列的排序类型。