datatables 再描画処理

困っていたこと

jQueryのdatatablesで、

  1. ajaxによるデータ取得とテーブル描画($("#table").find('tbody').append(tr_contents)で描画)とdatatablesへの変換を分離
  2. 「検索」ボタンでデータ再取得・テーブル再描画

ていう処理をしたいときに、datatablesの初期化がすんなりいかなかったのでメモ。

こうすると

var table = null;

  if (table) {
        // 二回目以降の描画の場合、初期化が必要
        $("#result-table tbody > tr").remove();
        table.state.clear();
    }

 // table描画処理

table = $("#result-table").DataTable({ 〜〜

テーブル自体の初期化は上手くいき、新たなデータでテーブルが作成されるが 「○件中X~X件を表示」の部分が初回の情報のまま更新されない。

var table = null;

  if (table) {
        // 二回目以降の描画の場合、初期化が必要
        $("#result-table tbody > tr").remove();
        table.state.clear();
        table.destroy();
    }

 // table描画処理
table = $("#result-table").DataTable({ 〜〜

table.destroy()を追加すると、件数情報は更新されるのだが テーブルが初期化されず、初回に描画したテーブルに新たな行がどんどん追加されてしまう。

解決

var table = null;

  if (table) {
        // 二回目以降の描画の場合、初期化が必要
        table.state.clear();
        table.destroy();
        $("#result-table tbody > tr").remove();  // $("#result-table tbody").empty();で良い
    }

 // table描画処理
table = $("#result-table").DataTable({ 〜〜

tbodyを空にする処理のタイミングを変えたら実現できた。 蓋を開けてみたらブログに書くほどのことでもないレベル!! でも下書きしてたので載せる。