删除的 DataTable 行在排序后再次添加

2024-02-04

我正在使用数据表 https://datatables.net用于显示 HTML 表格的 jQuery 插件,我做了一个AJAX发送删除的行删除函数POST后台请求并显示返回的结果HTML消息在#infodiv 并删除相关的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(使用前将#替换为@)

删除的 DataTable 行在排序后再次添加 的相关文章

随机推荐