Datatables clear tbody

У меня есть таблица HTML, в которой я заполняю данные из вызова jQuery AJAX. В этой таблице используются плагины jQuery-datatables для подкачки, сортировки и т.д.

Вызов jQuery вызывается из события изменения выпадающего списка

$("#Dropdownlist").on("change", function () {
        $.ajax({
                type: "POST",
                url: "@Url.Action("Action", "Controller")",
                //contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    $.each(data, function (key, item) {
                        $("tbody").append("<tr><td>appending data here</td></tr>");
                    });

                    $('#table').dataTable().fnDestroy();
                    $('#table').dataTable({
                        "aoColumns": [
                          { "bSortable": false },
                          null, null, null, null, null
                        ]
                    });
                }
            })
    });

Этот jQuery был отредактирован, чтобы сократить его. Этот jQuery отлично работает, он получает данные и добавляет их в новые строки таблицы, а также обновляет плагин datatable, чтобы заставить его работать с новыми данными.

Проблема в том, что старые данные все еще остаются, я пытаюсь очистить их различными вещами вроде

$("#tbodyID tr").detach();
$("#tbodyID tr").remove();
$("#tbodyID").empty();
$("#tbodyID").html("");
$("tbody").empty();
$("tbody").html("");
$('#table').dataTable().fnDraw(false)

Я поставил их перед вызовом AJAX. Но никто не работает, старые данные по-прежнему остаются и каждый раз, когда я вызываю вызов AJAX, он по-прежнему заполняет его новыми данными, а старый остается.

Есть ли способ очистить тело с помощью jQuery или встроенной функции datatables?

Ответы

Ответ 1

Ответ обновлен, чтобы нацелить API dataTables 1.10.x. Первоначальный ответ ниже, используя fnMethods, был нацелен на 1.9.x, но по-прежнему применим для любого 1.9.x - 1.10.x dataTable().

Когда экземпляр dataTable создается с помощью dataTable(), который возвращает экземпляр API:

var dataTable = $('#example').DataTable();

Как исходный ответ на пример опорожнения <tbody> полностью и вставка новой строки:

$("#delete").click(function() {
    dataTable.clear();
    dataTable.row.add([
        'new engine',
        'new browser',
        'new platform',
        'new version',
        'new css'
    ]).draw();
});

Обратите внимание на draw(). Когда таблица обрабатывается через API, необходимо вызвать draw(), чтобы обновить отображение, чтобы отразить эти изменения.

demo → http://jsfiddle.net/9kLmb9fu/


Вы должны использовать

$('#table').dataTable().fnClearTable();

Вот пример из jsfiddle ниже, удаление всего содержимого из <tbody> (в разбитой на страницы таблицы!) и вставка новой строки:

$("#delete").click(function() {
    dataTable.fnClearTable();
    dataTable.fnAddData([
        'new engine',
        'new browser',
        'new platform',
        'new version',
        'new css'
    ]);
});

см. скрипку → http://jsfiddle.net/yt57V/

Ответ 2

Вы можете использовать функцию clear() для удаления всех строк данных из таблицы следующим образом:

var table = $('#example').DataTable();
table.clear().draw();

Ответ 3

вы можете использовать функцию DataTables fnClearTable и fnAddData, такую ​​как

$("#Dropdownlist").on("change", function () {
    $.ajax({
            type: "POST",
            url: "@Url.Action("Action", "Controller")",
            //contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                var oTable = $('#table').dataTable();//get the DataTable
                oTable.fnClearTable();//clear the DataTable
                $.each(data, function (key, item) {
                    oTable.fnAddData(["appending ","data","here"]);//add new row
                    //each element in the array is a td
                });
                /*no need to destroy and create new DataTable
                $('#table').dataTable().fnDestroy();
                $('#table').dataTable({
                    "aoColumns": [
                      { "bSortable": false },
                      null, null, null, null, null
                    ]
                });
                */
            }
        })
});

Ответ 4

Я думаю, что вы ищете этот кусок кода:

var oSettings = $('#table').dataTable().fnSettings();
var iTotalRecords = oSettings.fnRecordsTotal();
for (i=0;i<=iTotalRecords;i++) {
   $('#table').dataTable().fnDeleteRow(0,null,true);
}

Источник: http://www.datatables.net/forums/discussion/comment/15862