我試圖創建一個插件,它將改變列的排序行爲。該列中的數據是一個<ul>
元素。在列表的每個<li>
元素中,都有一些文本和一個十進制數。我想根據單元格列表中最大的十進制數對錶格進行排序。這裏顯示了插件中的jsfiddle,正如你所看到的,當你要按第二列,它不能正常工作:Jquery DataTables自定義排序插件不工作
http://jsfiddle.net/flyingL123/1whzq1w2/3/
如果它的工作,從大到小的順序應該是山姆(97.50)喬(80.50),邁克(17.50)和上升當然是相反的。基於我的調試,該插件爲每個單元返回正確的數值。你有什麼想法爲什麼表不會相應地排序?
這裏是從插件代碼:
$.fn.dataTable.ext.order['number-list'] = function (settings, col)
{
return this.api().column(col, {order:'index'}).nodes().map(function (td, i) {
//get all numbers from the cell into an array and parseFloat each one
var nums = $(td).html().match(/(\d+.\d+)/);
if(nums){
nums = nums.map(function(val){return parseFloat(val, 10);});
return Math.max.apply(null, nums);
}
else{
return 0;
}
});
}
這是有效的,但我不清楚它爲什麼起作用。我也使用這裏找到的'dom-text'插件:https://datatables.net/plug-ins/sorting/custom-data-source/dom-text。爲什麼這個定義不同?我的印象是,我試圖實現的自定義排序與這個「dom-text」插件所做的相同。那麼爲什麼它的定義不同呢? – flyingL123 2014-09-30 19:09:31
@ flyingL123 - 完全重寫了答案。瞭解你爲什麼想知道。儘管我的答案在功能方面起了作用,但它並不是真正的答案,因爲真正的答案非常簡單,不需要創建新的排序algortihm。一個好的答案必須以自己的方式解決問題,而不是重新發明輪子。顯然,我沒有想到當我做了第一個答案:( – davidkonrad 2014-09-30 22:39:03