我正在尝试根据该行的某些属性的值从使用服务器端处理(以可视方式删除行数据和行/ tr的数据表)中删除行。
我正在使用remove()
函数来执行此操作,并删除了行数据,但从视觉上看,表仍然保持不变。
所以我添加了draw()
函数,但是它重新初始化了表,包括数据。
因此,从使用服务器端处理的数据表中删除一行后,如何“重绘”表?是否还有其他功能,例如draw()
重绘表,但仅使用数据表中的现有数据?
$("#tableSelector").DataTable()
.rows( function ( idx, data, node ) {
return data.attribute_value == value_to_delete;
} )
.remove()
.draw();
最后,我找到了解决方案。我遵循了this thread,然后了解了DataTable的属性"dataSrc"。然后,使用此信息在堆栈溢出中搜索类似内容并找到this。因此,执行我要求的技巧是使用变量来过滤要在ajax调用中忽略的行。
我已经重用了referred question中提供的代码。结果如下:HTML:
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Subject</th>
<th>Status</th>
<th>Message</th>
<th>Details</th>
</tr>
</thead>
</table>
JS:
$(document).ready(function() {
function loadDataTable(excluded_name = undefined){
$("#example").DataTable().destroy();
$('#example').DataTable({
// "processing" : true,
"ajax" : {
"url" : "https://api.myjson.com/bins/12uwp2",
"dataSrc": (json) => {
if(excluded_name !== undefined){
return json.filter((item) => item.name !== excluded_name)
}else{
return json
}
}
},
"columns" : [ {
"data" : "name"
}, {
"data" : "email"
}, {
"data" : "subject"
}, {
"data" : "status"
},{
"data" : "message"
},
{
"mData": "Details",
"mRender": function (data, type, row) {
return "<a class='delete' data-name='"+ row.name + "' data-id=" + row.id + " href='/Details/" + row.id + "'>Delete</a>";
}
}]
});
}
$(document).on("click", ".delete", function(e) {
e.preventDefault()
let excluded_name = $(this).data("name")
alert("Excluding this name in the next load: " + excluded_name);
loadDataTable(excluded_name);
})
loadDataTable();
});
提琴:https://jsfiddle.net/ek94mh1x/4/注意:这是一个客户端“删除”,我知道可以通过服务器端处理来完成,但就我而言,只允许在客户端执行此操作。此外,如果您需要删除多行,则可以使用数组作为参数并遵循相同的逻辑。我希望这可以帮助某人。