javascript - 在 Bootstrap Modal Close 上,清除 Datatable 的所有行
问题描述
我在 Bootstrap 模式中打开数据表。它第一次打开很好,但是当我尝试重新打开模式时,它不是刷新数据,而是添加到现有数据中。有没有办法让我在模态关闭时清除 tbody?
我的 HTML:
<div class="modal fade modal-xl" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title text-left" id="modal_title"></h4>
<button type="button" class="close" id="close_header" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<div id="modal_content">
<table id="modal_data" class="display" border="1">
<thead>
<tr>
<th>One</th>
<th>Two</th>
<th>Three</th>
<th>Four</th>
<th>Five</th>
<th>Six</th>
<th>Seven</th>
<th>Eight Completes</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="close_footer"data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
JavaScript:
单击柱形图中的列(Highcharts):
events: {
click: function() {
let ver = this.series.name;
getData(ver);
}
const getData = (v) => {
$('#modal_title').text(v);
$.getJSON(json, result => {
result.forEach(d => {
$("#modal_data>tbody").append(`
<tr>
<td>${d.one}</td>
<td>${d.two}</td>
<td>${d.three}</td>
<td>${d.four}</td>
<td>${d.five}</td>
<td>${d.six}</td>
<td>${d.seven}</td>
<td>${d.eight}</td>
</tr>
`);
});
$('#modal_data').dataTable();
$("#myModal").modal();
$('#close_header, #close_footer').on('click', function() {
$('#modal_data>tbody').dataTable().fnClearTable();
});
});
};
在模式关闭时,我想清除表格,以便在单击列时创建一个新的数据表,而不是添加到旧表中。
解决方案
当模态不再可见时,您可以使用引导事件来运行您的清除,而不是将您的清除事件绑定到模态中的关闭按钮。
$('#myModal').on('hidden.bs.modal', function (e) {
console.log("I've closed!");
});
然后根据 DataTables 的文档,您可以使用clear()方法来清除您的表格。但是,一旦有了数据,您就需要使用draw()方法重新绘制表格。
就个人而言,我会使用如下方法。
$('#myModal').on('hidden.bs.modal', function (e) {
var table = $('#modal_data').DataTable();
table.clear();
});
然后,您可以从 getData 方法中删除点击事件。您将需要调用 DataTable draw()方法来重新呈现您的表格。可能有一种更优雅的方式来重新绑定您的数据并使用rows.add()重新渲染表格,但我认为我在这里输入的内容应该足以解决您的问题:)
const getData = (v) => {
$('#modal_title').text(v);
$.getJSON(json, result => {
result.forEach(d => {
$("#modal_data>tbody").append(`
<tr>
<td>${d.one}</td>
<td>${d.two}</td>
<td>${d.three}</td>
<td>${d.four}</td>
<td>${d.five}</td>
<td>${d.six}</td>
<td>${d.seven}</td>
<td>${d.eight}</td>
</tr>
`);
});
var table = $('#modal_data').dataTable();
table.destroy();
table = $('#modal_data').dataTable();
$("#myModal").modal();
});
推荐阅读
- c++ - 如何管理需要从递归仿函数/lambda 派生的模板参数的声明?
- python - 使用 Python 3 删除 MongoDB 中重复数据的方法
- javascript - Javascript - 控制台数据显示长度为 2 但仅包含一个值
- vue.js - 如何从表单容器Vue之外的另一个组件提交表单
- npm - npm; 如果 package.json 只指定确切的版本,那么 package-lock.json 是多余的吗?
- java - Linux上的Java运行命令管道
- c# - 为什么iOS ButtonRenderer中标签的宽度总是0?
- manim - 如何更改 3b1bmanim 中框架的背景颜色?
- python - Docker内Python中的Mapscript循环导入错误
- sql - 如何在 Oracle 数据库查询中指定精度有限的文字数字?