2012-04-28 67 views
0

自定義排序科學記數法,我想這樣的分類編號:使用jQuery插件數據表

< 1E-8

0.000027

0.000061

0.0018

0.0094

< 8.64e-12

0.049

'<' 意味着真值小於給定的數量。

這裏是我的「血統功能,」我有一個非常高的信心:

$.fn.dataTableExt.oSort['scientific-desc'] = function(a,b) { 
        var x = a.replace(/^[<>]/g,""); 
        var y = b.replace(/^[<>]/g,""); 
        x = parseFloat(x); 
        y = parseFloat(y); 

        return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
} 

我定義的「上升功能」類似:

$.fn.dataTableExt.oSort['scientific-asc'] = function(a,b) { 
        var x = a.replace(/^[<>]/g,""); 
        var y = b.replace(/^[<>]/g,""); 
        x = parseFloat(x); 
        y = parseFloat(y); 

        return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
} 

我已經打了幾乎所有的初始化代碼和上面的排序功能,但似乎沒有什麼能夠讓數字在表中正確排序。數字< 1E-8總是傾向於保持在一起,並且小寫字母'e'也是如此。

初始化dataTable的代碼如下。這也可能是值得注意的是,這是代碼被稱爲AJAX調用內:

$.get('xyz.json', 
    function(data) { 
     // deal with json data 
     // get it ready for dataTable 
     // ... 

    $('.table').dataTable({ 
        "sScrollY": "200px", 
        "aoColumns": [ 
         null, 
         null, 
         {"bSortable": true, "sType": "scientific"}, 
         {"bSortable": false} 
        ], 
        "aaSorting": [ [2,'asc'] ], 
        "bPaginate": false, 
        "bFilter": false, 
        "iDisplayLength": 5, 
        "bRetrieve": true, 
        "bDestroy": true 
    }); 
}); 

回答

0

爲我的排序功能提供了「高可信度」。快速打印出控制檯上a和b透露,分揀職能獲得通過HTML實體

&lt; 

,而不是「<」。

感謝另一個stackoverflow thread

varTitle = $('<div />').html("Chris&apos; corner").text(); 
0

在你的榜樣,以「<」的招牌彼此相鄰的排序列表中的號碼。

var A= ['<1E-8', 0.000027, 0.000061, 0.0018, 0.0094, '<8.64e-12', 0.049]; 

A.sort(function(a, b){ 
    var a1= String(a).replace(/^(<|>)/, ''), 
    b1= String(b).replace(/^(<|>)/, ''); 
    return a1-b1; 
}).join('\n'); 

<8.64e-12 
<1E-8 
0.000027 
0.000061 
0.0018 
0.0094 
0.049 

//To have a decending sort, just reverse it- 

A.sort(function(a, b){ 
    var a1= String(a).replace(/^(<|>)/, ''), 
    b1= String(b).replace(/^(<|>)/, ''); 
    return a1-b1; 
}).reverse().join('\n'); 


0.049 
0.0094 
0.0018 
0.000061 
0.000027 
<1E-8 
<8.64e-12 
+0

你是說正則表達式需要'|'嗎?我認爲不管你寫^ [<>]還是^(<|>)都不重要。排序功能似乎工作。令我困惑的是,當我嘗試使用這些排序功能時,dataTables插件不會。 – gideonite 2012-04-30 03:13:15

0

另一種方式來定製做數據表的排序是包括一些隱藏在表格單元格:

<tr> 
    <td>Large<input type="hidden" value="3"></td> 
</tr> 
<tr> 
    <td>Small<input type="hidden" value="1"></td> 
</tr> 
<tr> 
    <td>Medium<input type="hidden" value="2"></td> 
</tr> 

然後排序的潛在價值,而不是顯示值:

// Tell DataTables to use this sort type always 
$.fn.dataTableExt.aTypes.unshift(
    function() { 
     return 'custom-sort'; 
    } 
); 


$.extend($.fn.dataTableExt.oSort, { 
    // The selector 
    "custom-sort-pre": function(a) { 
     var sortValue = $(a).val(); 
     if (sortValue === undefined) { 
      return a; 
     } 

     if (sortValue == 'NaN') { 
      return NaN; 
     } 

     var floatValue = parseFloat(sortValue); 
     if (isNaN(floatValue)) { 
      return sortValue; 
     } 
     return floatValue; 
    }, 

    // Asc sorting 
    "custom-sort-asc": function (a, b) { 
     if (isNaN(a) && !isNaN(b)) return 1; 
     if (!isNaN(a) && isNaN(b)) return -1; 
     if (isNaN(a) && isNaN(b)) return 0; 

     if (a > b) return 1; 
     if (a < b) return -1; 
     return 0; 
    }, 

    // Desc sorting 
    "custom-sort-desc": function(a, b) { 
     return $.fn.dataTableExt.oSort['custom-sort-asc'](a, b) * -1; 
    } 
}); 

這個例子將w ork在字符串和數字上。