排序(按字母顺序)以忽略空单元格: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-asc
和non-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