jquery - JQuery DataTable 标头未与 ScrollY 和服务器端处理对齐
问题描述
我有一个带有 jquery 数据表的 MVC/Bootstrap 4 站点,该数据表在初始页面加载时显示为空表,然后使用服务器端处理来检索 docReady 函数中的数据。一旦 ajax 与数据一起返回,列标题就会稍微偏离。第一列标题似乎正确对齐,但接下来的每一列都比前一列稍微偏离。在行的末尾,即使没有实际显示,列标题似乎也足以显示垂直滚动条。
如果我最小化/调整浏览器窗口的大小,那么它会重绘标题,一切看起来都很完美,然后如果我最大化窗口,它也会重绘标题,看起来很完美。
如何在 ajax 调用后强制重绘以获取数据,以便标题与列对齐。如果返回的数据导致显示垂直滚动条,那么标题就会关闭得更多。但是,如果我手动调整窗口大小,它会全部重绘并解决问题。
这是我的数据表:
var dt = $('#data-table').DataTable({
processing: true,
serverSide: true,
dataSrc: 'list',
dom: 'lBfrtip',
deferLoading: 0,
bRetrieve: true,
iDisplayLength: 50,
scrollY: "500px",
scrollCollapse: true,
autoWidth: true,
ajax: {
type: 'POST',
url: '/Equipment/LoadEquipmentListingGrid',
error: function(e) {
console.log("Response: " + JSON.stringify(e.message));
}
},
order: [[3, "asc"]],
columns: [
{"data": "EQUIPMENT_ID"},
{ "data": "DESCRIPTION" },
{ "data": "MANUFACTURER" },
{ "data": "MODEL" },
{ "data": "SERIAL_NUMBER" },
{ "data": "EQUIPMENT_TYPE" }],
...
这是表格:
<table id="data-table" class="table table-striped table-bordered mt-5">
<thead>
<tr>
<th>Equipment Id</th>
<th>Description</th>
<th>Manufacturer</th>
<th>Model</th>
<th>Serial Number</th>
<th>Equipment Type</th>
</tr>
</thead>
<tbody></tbody>
</table>
我尝试通过重绘在 ajax 调用中添加成功属性,但它不起作用,只是再次调用了我不想要/不需要的服务器。只需要根据表中的新数据以及是否显示垂直滚动条来重绘标题(就像在浏览器调整大小时一样)。
解决方案
找到了一种无需调用服务器即可重绘表格的方法。我将“完整”属性添加到检索表数据的 ajax 调用中。在那个“完整”函数中,我只是缩小/调整了包含数据表的 DIV 的宽度,并允许标题为表正确调整大小:
var dt = $('#data-table').DataTable({
processing: true,
serverSide: true,
dataSrc: 'list',
dom: 'lBfrtip',
deferLoading: 0,
bRetrieve: true,
iDisplayLength: 50,
scrollY: "500px",
scrollCollapse: true,
ajax: {
type: 'POST',
url: '/Equipment/LoadEquipmentListingGrid', // "/Equipment/Index",
error: function(e) {
console.log("Response: " + JSON.stringify(e.message));
},
complete: function() {
var w = $('#MainEquipDiv').width();
$('#MainEquipDiv').width(w - 1); // THIS IS THE FIX
$('#MainEquipDiv').width(w + 1);
}
},
order: [[3, "asc"]],
推荐阅读
- indexing - 从另一个数据框中过滤具有正确索引的行
- android - 添加多行文本视图的可绘制开头
- python - np.concatenate 错误...ValueError:所有输入数组必须具有相同的维数
- javascript - 如何在 nativescript 中定义默认的 TabView?
- image - 如何使用 jpeg 在压缩图像中找到 jpeg 标头
- python - 如何在 ListView 中包含 CreateView 模板?
- javascript - 如何在 Python 中解析 html 源代码中的 javascript 代码?
- r - 是否有一个 R 函数用于附加具有不相等列的列表
- mysql - Laravel:数据库查询返回标准类而不是数组
- php - Moodle XMLDB 如何将 scema 应用到我的数据库中