我正在使用jQuery DataTables来显示来自JSON编码的PHP响应的信息。 JSON响应包含对象“name”。 “name”包含“Full Name”,“Last Name”,“ID”。我一直在使用columns
以我想要的方式显示数据但是,我遇到了一个我无法弄清楚的问题。
在下面的代码中,示例1工作正常,并在按“姓氏”排序时显示“全名”。但是,示例2根本不起作用。所需的输出将包含HTML呈现的显示并按“姓氏”排序。在示例3中,显示以我想要的方式呈现,但是没有正确排序。
有谁知道如何调整示例2来输出我要查找的内容(渲染和排序数据)?
var oTable = $('#table').DataTable({
'ajax': {
url: 'PHP-file-returns-JSON.php',
type: "POST",
dataSrc: function ( data ) {
return data.cols;
},
data: function(d) {
///send additional values to POST
var frm_data = $('#val1, #val2').serializeArray();
$.each(frm_data, function(key, val) {
d[val.name] = val.value;
});
}
},
'columns':[
// exapmle 1 - works but not rendered with HTML
{ data: {
_: "name.Full Name",
sort: "name.Last Name",
}
},
// example 2 not working at all
{ data: 'name', "render": function ( data, type, row ) {
return '<span id="'+data.ID+'">'+data.Full Name+'</span>';
},
"sort" : "name.Last Name",
},
// example 3 works fine with HTML rendered display but not sorted
{ data: 'name', "render": function ( data, type, row ) {
return '<span id="'+data.ID+'">'+data.Full Name+'</span>';
}
},
]
});
更新:
HERE是JSFiddle,它显示了我正在使用的数据结构。工作示例仅显示按姓氏排序的全名。我试图找出如何使显示包含ID为id属性的span元素。
答案 0 :(得分:5)
事实证明使用name.Full Name
无效。它必须是name.FullName
没有空间。以下是最终为我工作的内容。
'columns': [
{
"data": "name",
"render": function ( data, type, row ) {
if(type === 'display'){
return '<span id="'+data.ID+'">'+data.FullName+'</span>';
}else if(type === 'sort'){
return data.LastName;
}else{
return data;
}
}
}
]
答案 1 :(得分:0)
enter code herefunction Display() {
$('#xyz').dataTable({
"bServerSide": true,
"bSort": false,
"sAjaxSource": ,
"lengthMenu": [10, 25, 50, 100],
"iDisplayLength": 10,
"bDestroy": true,
"bFilter": true,
"bPaginate": true,
"bInfo": true,
"sSearch": true,
"bLengthChange": true,
"sEmptyTable": "Loading data from server",
"fnServerData": function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
});
},
"columns": [
{
"sWidth": "0.5%",
"render": function (data, type, row, meta) {
return '<a href="javascript:void(0);" User_ID="' + row[0] +
'" Otp_Mobile="' + row[11] + '" IsActive="' + row[12] +
'" onclick="GetEdit(this);"><i class="glyphicon glyphicon-edit"></i></a>';
}, "targets": 0
},
{
"sWidth": "0.5%",
"render": function (data, type, row, meta) {
return '<a href="javascript:void(0);" onclick="DeleteData(' + row[0] + ')"><i class="glyphicon glyphicon-trash"></i></a>';
}, "targets": 0
},
{
"sWidth": "2%",
"render": function (data, type, row) {
return row[2];
}
},
{
"sWidth": "2%",
"render": function (data, type, row) {
return row[1];
}
},
{
"sWidth": "2%",
"render": function (data, type, row) {
return row[5];
}
},
{
"sWidth": "2%",
"render": function (data, type, row) {
return row[7];
}
},
{
"sWidth": "2%",
"render": function (data, type, row) {
return row[12];
}
},
],
});
}
答案 2 :(得分:0)
你可以试试这个:
{
data: null,
title: "Audio",
render: function (data) {
return `<a onclick="UpdateRecord('${data.audio_status_id_string}','${"Audio"}','${data.request_id}')">${AudioStatusColor(data.audio_status_id_string)}</a>`
}
},
答案 3 :(得分:-1)
如果您需要对姓氏进行排序,这应该有效:
$.extend($.fn.dataTableExt.oSort, {
"last-name-pre": function(a) {
return $(a).data("lastname");
},
"last-name-asc": function(a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"last-name-desc": function(a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
$("#example").DataTable({
"data": data,
"columns": [{
"title": "Full Name",
"data": "Full Name",
"render": function(data, type, row) {
return $("<span></span>", {
"text": data,
"data-lastname": row["Last Name"]
}).prop("outerHTML");
},
"type": 'last-name'
}]
});
它的工作here。您也可以删除渲染功能,只需调整last-name
功能即可拆分全名并返回姓氏:
$.extend($.fn.dataTableExt.oSort, {
"last-name-pre": function(a) {
return a.split(" ")[1];
},
"last-name-asc": function(a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"last-name-desc": function(a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
$("#example").DataTable({
"data": data,
"columns": [{
"title": "Full Name",
"data": "Full Name",
"type": 'last-name'
}]
});
哪个是here。希望有所帮助,并且我已正确理解您的要求。