我要求在每个数据表头中显示图标。现在问题是图标和文本由于列宽而没有显示在同一行。我想将每个标题单元格增加50px。
下面是我的代码,用于显示图标和增加宽度。
"fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
$.each($('.table tr th'),function(key,val){
var title=nHead.getElementsByTagName('th')[key].innerHTML;
var new_width=parseInt($(nHead.getElementsByTagName('th')[key]).attr('style').split(":")[1].split("px")[0])+50 +"px"
$(nHead.getElementsByTagName('th')[key]).attr('style','width:'+new_width)
nHead.getElementsByTagName('th')[key].innerHTML = "<i class='fa fa-cube'></i>"+title;
})
}
注意:我使用的是dataTables 1.9.4
答案 0 :(得分:1)
fnHeaderCallback()
不是在这里使用的正确回调,因为它在每次重绘时被调用。当用户排序,更改页面等时调用它。您应该使用fnInitComplete()
代替。
标题标题变为多行的原因主要是由浏览器默认值和CSS设置(或缺少相同)引起的。添加此CSS:
.dataTable th {
white-space: nowrap;
}
并在fnInitComplete()
回调中添加图标:
var table = $('#example').dataTable({
fnInitComplete: function() {
$("#example th").each(function() {
var $th = $(this);
$th.html("<i class='fa fa-cube'></i>"+$th.text());
})
}
});
演示 - &gt;的 http://jsfiddle.net/2hLn31gp/ 强>
根本没有理由以编程方式操纵标题的宽度。宽度是
aoColumns :[ { sWidth: "10%" }]
等如果您需要重新计算列的宽度,只需使用fnAdjustColumnSizing()
重新计算它们:
table.fnAdjustColumnSizing();
或“手动”强制宽度:
aoColumns: [
{ sWidth: "100px" },
{ sWidth: "50px" },
{ sWidth: "250px" }
]