将URL添加到jQuery Datatables数据集?

时间:2011-07-19 15:12:53

标签: php jquery mysql ajax datatables

我有一个动态构建的jquery数据表,这意味着每行都是使用php mysql数据库调用构建的。创建表本身没有问题,但有时我想添加超链接到集合中显示的数据。

例如:

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视为一个数据元素,从而搞砸了事后我可以在桌面上做的任何排序。

以前有人遇到过这个问题吗?我似乎无法在网上找到任何东西。

3 个答案:

答案 0 :(得分: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));
};

答案 1 :(得分: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”

oObj.aData返回该行的列数据。您可以返回一些额外的HIDDEN列,其中包含执行该逻辑所需的数据。然后你的排序仍然有效,你也可以访问你需要的网址。

答案 2 :(得分:0)

我的猜测是,如果没有链接,这样排序就好了,但因为列中有链接(html),它不会像你期望的那样工作。对我而言,它听起来与日期关系不大,而与HTML有关...

我发现了这个: jquery datatable plugin doesn't seem to sort columns with links properly