我本以为这是一件简单的事情,但是!
使用DataTables,我希望隐藏表的第一列,并在下一列单元格的HTML图像链接中使用该单元格数据。
html链接使用"User_ID",http://somepage.php?UID=data0
我看了fnGetData()和mRender,现在我很困惑。
我的代码:
"aoColumns": [
{ "mData": "User_ID",
"bVisible": false, "bSearchable": false, "bSortable": false
},
{ "mData": null,
"bSearchable": false, "bSortable": false,
"sClass": "center",
"sDefaultContent": '<a href="somepage.php?UID=' + "data from cell 0" + '"><img src="images/look.png" width="16"></a>'
},
我总是用这个技巧来帮助自己:
不要将bVisible
设置为false,因为行中没有数据。它根本没有被渲染。使用sClass
并设置display:none
。这样,列对用户来说是不可见的,但它仍然存在。
然后您可以使用mRender
来显示自定义单元格模板:
"aoColumnDefs": [{
"aTargets": [0],
"sClass": "hiddenID"
}, {
"aTargets": [1],
"bSearchable": false,
"bSortable": false,
"sClass": "center",
"mRender": function(data, type, full) {
return '<a href=" http://somepage.php?UID=' + full[0] + '">Click me</a>';
}
}, {
"aTargets": [2],
}, ]
现在数据就在那里,可以排序和过滤。
看看这个Plunker和style.css,了解这个黑客背后的概念。
您可以仔细查看mData
,这样您就可以执行回调函数,而不必使用隐藏列:
// Using mData as a function to provide different information for
// sorting, filtering and display.
$(document).ready( function() {
var oTable = $('#example').dataTable( {
"aoColumns": [
{ "mData": "User_ID",
"bVisible": true, "bSearchable": false, "bSortable": false
}
],
"aoColumnDefs": [ {
"aTargets": [ 0 ],
"mData": function ( source, type, val ) {
if (type === 'set') {
source.id = val;
// Store the computed dislay and filter values for efficiency
source.id_display = val=="" ? "" : '<a href="somepage.php?UID=' + val + '"><img src="images/look.png" width="16"></a>';
source.id_filter = val=="" ? "" : val;
return;
}
else if (type === 'display') {
return source.id_display;
}
else if (type === 'filter') {
return source.id_filter;
}
// 'sort', 'type' and undefined all just use the integer
return source.id;
}
} ]
} );
} );