Javascript JQuery数据表:按数据排序

Javascript JQuery数据表:按数据排序,javascript,jquery,datatables,Javascript,Jquery,Datatables,如何按传递给数据的值而不是自定义呈现内容对列进行排序 我所做的 我使用jquery数据表来显示数据。从服务器到客户端,我只传递数字数据。在客户端,我使用自定义呈现函数创建表内容: { "targets": [9], "visible": true, "searchable": true, "render": function(data, type, row) { if (row[9] == -2) { return '';

如何按传递给数据的值而不是自定义呈现内容对列进行排序

我所做的

我使用jquery数据表来显示数据。从服务器到客户端,我只传递数字数据。在客户端,我使用自定义呈现函数创建表内容:

{
    "targets": [9],
    "visible": true,
    "searchable": true,
    "render": function(data, type, row) {

        if (row[9] == -2) {
            return '';
        }
        if (row[9] == -1) {
            return '<img width="20px" src="/~home/www/images/loader.gif" />';
        }
        var result = row[9];
        if (row[10] > 0) {
            result += '<strong><span class="text-success">';
            result += '(+' + row[10] + ')';
            result += '</span></strong>';
        }
        if (row[10] < 0) {
           result += '<strong><span class="text-danger">';
           result += '(' + row[10] + ')';
           result += '</span></strong>';
        }
        return result;
    },
}, 
{
    "targets": [10, 11],
    "visible": false,
    "searchable": false,
},
{
“目标”:[9],
“可见”:真实,
“可搜索”:正确,
“渲染”:函数(数据、类型、行){
如果(第[9]行==-2){
返回“”;
}
如果(第[9]行==-1){
返回“”;
}
var结果=第[9]行;
如果(第[10]行>0){
结果+='';
结果+='(+'+行[10]+')';
结果+='';
}
如果(第[10]行<0){
结果+='';
结果+='('+行[10]+')';
结果+='';
}
返回结果;
},
}, 
{
“目标”:[10,11],
“可见”:假,
“可搜索”:错误,
},
即使第9、10和11列也只包含数值。根据提供的JS函数生成的字符串值,将第9列排序为字符串


如何指示datatables按原始“行[9]”排序,但将自定义呈现的内容保留在单元格中?

您可以将原始数据包装在不可见标记中,并将其附加到输出中,如下所示:

    if (row[9] == -2) {
        return '<span style="display:none"></span>';
    }
    if (row[9] == -1) {
        return '<span style="display:none">'+ row[9] +'</span><img width="20px" src="/~home/www/images/loader.gif" />';
    }
    var result = '<span style="display:none">'+ row[9] +'</span>' + row[9];
if(第[9]行)=-2行){
返回“”;
}
如果(第[9]行==-1){
返回“”+行[9]+“”;
}
var结果=“”+行[9]+“”+行[9];
所以,行将按数据排序,隐藏在
span

"render": function(data, type, row) {
                         ^^^^
类型的目的是能够为不同的操作返回不同的值。默认情况下,
类型可以是
'filter'
'display'
'sort'
。在所有情况下,您都会返回希望在列中显示的内容,因此会根据渲染内容进行alpha排序,而不是根据数据值进行数字排序。仅当请求类型为“显示”时才返回不同的标记字符串,否则返回原始数据:

{
  "targets": [9],
  "visible": true,
  "searchable": true,
  "render": function(data, type, row) {
    if (type == 'display') {
      if (row[9] == -2) {
        return '';
      }
      if (row[9] == -1) {
        return '<img width="20px" src="/~home/www/images/loader.gif" />';
      }
      var result = row[9];
      if (row[10] > 0) {
        result += '<strong><span class="text-success">';
        result += '(+' + row[10] + ')';
        result += '</span></strong>';
      }
      if (row[10] < 0) {
        result += '<strong><span class="text-danger">';
        result += '(' + row[10] + ')';
        result += '</span></strong>';
      }
      return result;
    } else {
      return data
    } 
  }
}
{
“目标”:[9],
“可见”:真实,
“可搜索”:正确,
“渲染”:函数(数据、类型、行){
如果(类型==“显示”){
如果(第[9]行==-2){
返回“”;
}
如果(第[9]行==-1){
返回“”;
}
var结果=第[9]行;
如果(第[10]行>0){
结果+='';
结果+='(+'+行[10]+')';
结果+='';
}
如果(第[10]行<0){
结果+='';
结果+='('+行[10]+')';
结果+='';
}
返回结果;
}否则{
返回数据
} 
}
}