2012-02-28 3 views
0

AJAXを使用して、次の大きなテーブル(10行×30列)のすべてのセルを更新するにはどうすればよいですか?正常に動作され、次のJavaScriptを使用してAJAXレスポンスから大きなテーブルを更新するには?

<td id="r0c0">puts @table[0][0]</td> 

とを次のように

<table> 
    <tr> 
    <td>puts @table[0][0]</td> 
    <td>puts @table[0][1]</td> 
    ... 27 columns go here 
    <td>puts @table[0][29]</td> 
    </tr> 
    ... 8 rows go here 
    <tr> 
    <td>puts @table[9][0]</td> 
    <td>puts @table[9][1]</td> 
    ... 27 columns go here 
    <td>puts @table[9][29]</td> 
    </tr> 
</table> 

私は、それを特定のIDを与えることによって、行0、列0のセルを更新することができた

document.getElementById("r0c0").innerHTML = '<%= @new_r0c0_value %>' 

ですが、テーブルが非常に大きいので(300セル)、特定のIDを持つ各テーブルのセルを識別せずに値の配列から300個のセルを更新する方法を探しています。

誰もがAJAXレスポンスで配列を渡す方法と、そのAJAXレスポンスを使用してこの大きなテーブルを更新する方法を知っていますか?

+1

テーブルの完全なマークアップを作成して、それをクライアントに送り返すことはできますか?次に、既存のテーブルを削除し、サーバーからページに送信された "

...
"文字列をドロップします。 Railsは分かりませんが、JSPでこれを行っています。それ以外の場合、ajaxの読み込みと更新をサポートするdatatableプラグイン(YUI DataTableなど)を使用できます。 –

+0

あなたはajaxからの応答を得ていると確信していますか?もしそうなら、あなたはどのようにレール変数を取得していますか? –

+0

@dku。rajkumar:はい、私はそれについて確信しています。たとえば、 "@ new_r0c0_value"はコントローラメソッド内で計算され、 "update_values"と呼ばれ、同じ形式の他のすべてのフィールドで正常に動作します。 – rh4games

答えて

2

あなたは、テーブルタグ自体にIDを入れた場合、あなたはこのような配列に、テーブル内のすべてのセルを取得することができます:

document.getElementById('myTable').getElementsByTagName('td'); 

あなたは、テーブル内のすべてのtd要素の配列を持つことになりますループして更新することができます。

一部のブラウザでは、テーブル全体を削除し、すべてのセルを個別に変更するのではなく、新しいデータで新しいテーブルを作成する方がよい場合があります。問題は、表に動的なレイアウトがある可能性があるため、セルを変更するたびにテーブルをリレーすることについてブラウザの効率があまり高くないことです。

+0

代わりに各行をループしないのはなぜですか? – AlxVallejo

+0

@AlxVallejo - 私はあなたの質問を理解していません。 OPはテーブル内のすべてのセルを更新する方法を尋ねました。この答えは、すべてのセルのリストを取得してループできるようにする方法を示唆しています。それには他にもたくさんの方法がありますが、これは簡単で機能します。 – jfriend00

+0

ああ、そうです。これはtl; drだった。ほとんどの場合、データベースから呼び出して、すべてのセルを一度に処理するのではなく、属性の行をループする方が簡単になると思います。 – AlxVallejo

0

はこれを試してみてください。..

をあなたはこの [[1,2、... 27]のような配列を作成することができた場合は、[1,2、... 27]、.. [1,2 ,. .27]]

IDなどを使用せずにそのテーブルにデータをロードするのは簡単です。

<table> 
     <% arr.each do |inner_arr| %> 
       <tr> 
       <% inner_arr.each do |val| %> 
         <td><%= val %></td> 
       <% end %> 
       </tr> 
     <% end %> 
</table> 
+0

おかげでVadivelan。私が見逃しているのは、AJAXのレスポンスからテーブルを更新するjsの部分です。サーバー上で初めてビルドする方法ではありません。 – rh4games

+0

あなたはまだjsでこれを達成することができます。上記の表の内容を部分ファイルに置きます。あなたのajaxアクションでは、配列を構築し、 'code'page.replace_html 'elementID'、:partial => file_name'code'を使用します。 – Vadivelan

0

:nth-childセレクタは、JQueryを使用する場合に使用できます。私はこの方法で、Ajaxを使ったテーブルのリストで現在更新されているレコードを強調表示しています。

私はすべてのオブジェクトのコレクションである@assetsを持っています。@assetは更新されている現在のレコードです。

<% @assets.each_with_index do |asset, index| %> 
    <tr class="link"> 
    <td class="num"> <%= link_to index + 1, asset, :remote => true, :onclick => "$('#spinner').show()" %> </td> 
    <td> 
     <%= link_to asset.try(:patient).try(:display_name), asset, :remote => true, 
     :onclick => "$('#spinner').show()" %> 
    </td> 
    ... 
    </tr> 
<% end %> 

update.js.erbで次の操作を行います:

インデックスを持つn番目の子を選択
... 
$("#assets").html("<%= escape_javascript(render "assets") %>"); 

$("table.listing > tbody tr:nth-child(<%= @assets.index(@asset) + 1 %>)").effect("highlight", {}, 3000); 
... 

テーブルで部分_assets.html.erbは次のようになります強調表示します。

関連する問題