我正在使用数据表 https://datatables.net用于显示 HTML 表格的 jQuery 插件,我做了一个AJAX
发送删除的行删除函数POST
后台请求并显示返回的结果HTML
消息在#info
div 并删除相关的HTML
行从DOM
使用 jQueryremove()
功能。
这是被调用的函数deleteData($id)
从该行的删除按钮:
function deleteData(id)
{
var data = "id="+id;
$.ajax(
{
type: "POST",
url: "delete.php",
data: data
}
).done
(
function(data)
{
$('#info').html(data);
var setID = id;
$('#row' + setID).remove();
}
);
}
到目前为止一切正常,该行被删除并显示返回消息,但是,当我单击标题再次对行进行排序(升序或降序)时,已删除的行会重新出现(在当前会话中,而不是在页面重新加载后)并且它仍然可以搜索,我希望解决这个问题。
根据我的阅读,问题是 DataTables 仅加载表一次,但有一些方法可以使其从DOM
在每个排序。我尝试了很多不同的方法来做到这一点,但它不起作用。
我以前从未使用过 DataTable,但阅读你的问题我很想了解一点。
然后我注意到你只是使用 jQuery 删除该行.remove()
在给定的行上(换句话说,删除真实暴露的 DOM 行),而此数据表页面 https://datatables.net/reference/api/row%28%29.remove%28%29说明您应该使用专用的.row().remove()
.
所以在你的例子中我想你应该替换$('#row' + setID).remove();
by yourDataTable.row($('#row' + setID)).remove();
.
EDIT.
感谢@Bryan Ramsey 的评论,我刚刚意识到我建议的解决方案不完整:
- OP使用的语句
$('#row' + setID).remove();
只从 DOM 中删除行,但将其保留在 DataTable 对象中,以便它进一步出现
- 然后我建议宁愿使用
yourDataTable.row($('#row' + setID)).remove();
,这实际上从 DataTable 对象中删除了行,但现在将其保留在 DOM 中所以在下一次变化发生之前它不会在视觉上消失!
- 所以真正完整的解决方案是
yourDataTable.row($('#row' + setID)).remove().draw();
, where draw()
确保该行立即消失。
注意:(如果您得到 .row 不是函数或 $datatable 未定义)您必须在删除该行之前重新初始化数据表
var $datatable = $('#datatable-selector').DataTable();
$datatable.row($deletingRowSelector).remove().draw();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)