2017-01-26 4 views
0

私は二つのことを行う必要があるのDataTableがあります。Datatables:each()をイベントリスナーの内部で使用できますか?

  • 合計列のすべての数字を。
  • 別の列のセルに一定の値があるかどうか調べ、存在する場合は空白にします。 (理由:日付を挿入しないと、デフォルトの日付が "1970-01-01"のMySQLテーブル。 "1970-01-01"のインスタンスをすべて空のセルに置き換えます)。

はそれをするために、私はその後、ドローイベントにイベントリスナーを添付し、:

1の場合
  • は)私は()DataTableのプラグイン合計を使用しました。
  • 2)については、私はこの答えに従いました:Find and replace cells value with Datatables plugin、each()を使用しました。

    var tabla=$('#list').DataTable(); 
    tabla.on('draw.dt', function() { 
         var bla=tabla.column(10).data().sum(); 
         tabla.column(9).nodes.each(function(node, index, dt) { 
          var ble=tabla.cell(node).data(); 
          if (/^1970-01-01/.test(ble)) { 
           table.cell(node).data(''); 
           } 
          }); 
         }); 
    

問題は、私はこれを実行すると、私は得る、ということです "tabla.column(...を)。nodes.eachは関数ではありません"。このエラーは、jQueryやデータテーブルがまだ初期化されていないときに発生します。しかし、私の場合は、最初のもの(sum())が終わらせる;つまり、「bla」変数が計算されます。

これは、イベントトリガー内でeach()を使用できるかどうか疑問です。さもなければ、これを引き起こす原因は何ですか?

答えて

1

あなたはしかし

に任意のコレクションを反復処理する$.each機能を使用することができ、私は列の合計について、あなたの意図だかわからないんだけどけれども、私はそれぞれのrenderオプションで作業をお勧めします関連する列。

例えば、日付列の場合には、あなたがこのようなレンダリング機能を持つことができます:

render: function (data,type,fullRow){ 
    if(data === '1970-01-01') { 
     return null; 
    } 
    else { 
     return data; 
    } 
} 

(免責事項:!テストされていません)

drawCallback機能(およびドローイベント、そのために、Datatablesはテーブルを再描画する必要があります:最初の読み込み、フィルタリング、ソート、新しい行の追加などこれは予測できない副次的な影響を与えたり、単にパフォーマンスに影響を与えることがあります。 あなたのお役に立てば幸いです!

+0

お寄せいただきありがとうございます。私が間違っていれば私を訂正してください:実行時に "render()"関数を設定することはできません。私の問題は、Webアプリケーションで設定されたDatatableで作業していることです。そのソースコードに触れないでください。つまり、データテーブルを初期化するコードを変更することはできません。イベントリスナーを作成した後でしかイベントリスナーをアタッチできません。 – PaulJ

+0

ああ、私は見る!、その場合、あなたはイベントで立ち往生していると思います。テーブルが初期化されると起動する 'init'イベントを試してみることができます[Here](https://datatables.net/reference/event/)はあなたが作業できるイベントの完全なリストです。ちなみに、[docs](https://datatables.net/manual/events#Listening-for-events)によれば、あなたの例では、 '.dt'名前空間は必要ないはずです – Sebastianb

関連する問題