排序(按字母顺序)以忽略空单元格:dataTables

所以问题已在这里提出,但解决方案对我不起作用(我可能做错了)。 我想按字母顺序(“类型”:“自然”)对表格进行排序,但我希望空单元格位于底部(对于desc和asc)。

我尝试了fbas给出的先前解决方案:

jQuery.fn.dataTableExt.oSort['mystring-asc'] = function(x,y) { var retVal; x = $.trim(x); y = $.trim(y); if (x==y) retVal= 0; else if (x == "" || x == " ") retVal= 1; else if (y == "" || y == " ") retVal= -1; else if (x > y) retVal= 1; else retVal = -1; //  y) retVal= 1; else retVal = -1; // <- this was missing in version 1 return retVal; } 

用:

 $(document).ready(function() { $('#classement').dataTable({ "aoColumns": [ null, null, { "type" : "mystring" }, { "type" : "mystring" }, null ] } ); } ); 

用像| N° | Edit | Song | Singer | Url |的表 | N° | Edit | Song | Singer | Url | 仅对歌曲和歌手进行排序。

emty单元位于底部(如预期的那样),但现在排序没有逻辑(没有字母顺序,我应该在dataTable中使用另一个属性吗?)。

有没有人有办法解决吗?

编辑:如果我们动态添加一行,如何刷新排序?

 $("#example").find('tbody') .append($('') .append($('') .text('Boro') ) ); 

JsFiddle(使用isim的一个)

更新:嵌入式堆栈代码段。

我认为aoColumns是DataTables v 1.9的遗留选项 。 话虽这么说,您可能还需要使用$ .extend来包含您的自定义排序function。

请查看下面的Stack Snippet,或者在jsfiddle上的这个现场演示。 简而言之,我在表初始化期间将name列定义non-empty-string类型。 然后我使用non-empty-string-ascnon-empty-string-desc排序函数扩展了jQuery.fn.dataTableExt.oSort API。 看看这是不是你想要的。

Stack Snippet:

 jQuery.extend( jQuery.fn.dataTableExt.oSort, { "non-empty-string-asc": function (str1, str2) { if(str1 == "") return 1; if(str2 == "") return -1; return ((str1 < str2) ? -1 : ((str1 > str2) ? 1 : 0)); }, "non-empty-string-desc": function (str1, str2) { if(str1 == "") return 1; if(str2 == "") return -1; return ((str1 < str2) ? 1 : ((str1 > str2) ? -1 : 0)); } } ); var dataTable = $('#example').dataTable({ columnDefs: [ {type: 'non-empty-string', targets: 0} // define 'name' column as non-empty-string type ] }); dataTable.api().row.add(['John Smith', 'Intern', 'San Francisco', 19, 2011/05/25, 62000]).draw(); 
    
Name Position Office Age Start date Salary
Tiger Nixon System Architect Edinburgh 61 2011/04/25 $320,800
Garrett Winters Accountant Tokyo 63 2011/07/25 $170,750
Ashton Cox Junior Technical Author San Francisco 66 2009/01/12 $86,000
Cedric Kelly Senior Javascript Developer Edinburgh 22 2012/03/29 $433,060
Junior Technical Author San Francisco 66 2009/01/12 $86,000
Senior Javascript Developer Edinburgh 22 2012/03/29 $433,060

好的,我找到了第二个问题的解决方案,请参阅此处

所以在我的ajax请求之前销毁dataTable并在成功时重建它:

  else{ // Destroy dataTable $('#classement').dataTable().fnDestroy(); $.ajax({ type: "POST", url: "ajax.php", data: {}, success: function(msg){ // Reload dataTable with sorting $('#classement').dataTable({ columnDefs: [ {type: 'non-empty-string', targets: [2,3]} // define 'name' column as non-empty-string type ] }); } }); } 

示例: JsFiddle

Interesting Posts