2011-07-19 87 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,如果存在的话。