2011-07-19 86 views
0

我有一個動態構建的jquery數據表,這意味着每行都是使用php mysql數據庫調用構建的。創建表本身沒有問題,但有時候我想添加超鏈接到集合中顯示的數據。將URL添加到jQuery Datatables數據集?

例如:

ID | Date  | Amount 
---------------------------- 
1 | April 1, 2011 | 3.95 
2 | April 5, 2011 | 4.55 
3 | May 9, 2011 | 19.32 

漁獲是,上面的日期爲一個超鏈接和在URL中的日期格式將是YYYY-MM-DD的格式。

當我這樣做時,datatables希望將整個URL作爲一個數據元素,從而在事實之後將任何可以在表上完成的排序搞砸。

以前有人有過這個問題嗎?我似乎無法在網上找到任何東西。

+0

所以Date列看起來像這樣:​​May 9, 2011 ?? ?? – kasdega

+0

@kasdega - 你知道了 – JM4

+0

所以幫我理解,因爲那會根據YYYY-mm-dd的日期進行排序。你能澄清你在找什麼嗎? – kasdega

回答

1

非標列進行排序,你可以定義特殊功能:在這裏你可以找到其中的一些:http://datatables.net/plug-ins/sorting

你的情況

你定義自己的排序功能是這樣的:

jQuery.fn.dataTableExt.oSort['my-date-asc'] = function(a,b) { 
    var x = a.match(/date=(.*?)"/)[1].toLowerCase(); 
    var y = b.match(/title="(.*?)"/)[1].toLowerCase(); 
     x = x.replace(/-/g, ''); 
     y = y.replace(/-/g, ''); 
    return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
}; 

jQuery.fn.dataTableExt.oSort['title-string-desc'] = function(a,b) { 
    var x = a.match(/date=(.*?)"/)[1].toLowerCase(); 
    var y = b.match(/date=(.*?)"/)[1].toLowerCase(); 
     x = x.replace(/-/g, ''); 
     y = y.replace(/-/g, ''); 
    return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
}; 
0

我的猜測是,如果沒有鏈接,這種排序很好,但因爲在列中有一個鏈接(html),它不會像你所期望的那樣工作。對我來說,這聽起來像有少做的日期和更多的HTML做...

我發現這一點: jquery datatable plugin doesn't seem to sort columns with links properly

+0

沒錯,我提到上面但肯定相信有一種方法可以忽略html元素。當試圖鏈接上面時,我不幸遇到同樣的問題。我感謝幫助,並會繼續環顧四周。 – JM4

1

你可以在該列中使用fnRender()返回你想要的列中顯示的任何HTML。

bUseRendered: true, 
fnRender: function(oObj) { 
    var id = oObj.aData[0]; 
    var normalDate = oObj.aData[1]; 
    var amount = oObj.aData[2]; 
    var urlDate = oObj.aData[3]; 
    var isUrlDate = oObj.aData[4]; 

    if (isUrlDate) { 
     return urlDate; 
    } 
    else { 
     return normalDate; 
    } 
} 

注意

bUseRendered: false 

這種「排序使用傳回的數據未呈現的HTML時,此列」講述的DataTable

oObj.aData返回從該行的列數據。您可以返回一些額外的HIDDEN列,其中包含執行該邏輯所需的數據。然後你的排序仍然有效,你也可以訪問你需要的url,如果存在的話。