我有一个动态构建的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视为一个数据元素,从而搞砸了事后我可以在桌面上做的任何排序。
以前有人遇到过这个问题吗?我似乎无法在网上找到任何东西。
答案 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