その代表格はtableをExcelっぽくして欲しい、という要望ではないでしょうか。
なまじっかGooleDocsなんてものがあったりするのでExcelを日常的に使用されているお客様はWEBでもそのようなI/Fを求められます。
ExcelっぽいHTMLテーブル、、
結構キツイのよね・・・。
Flash使える場合はその方向になりますが、1画面だけ、なんて要件でしたらJavascriptで何とかしたい。
JSでテーブルをExcelっぽくするライブラリには、まとまったものではYahooUIやDojoがありますが、行列を固定したスクロールは調べた限りでは出来なさそうでした。
そんな時のJSライブラリ。
・Super Tables
http://www.matts411.com/post/super_tables/
※参考
http://c-brains.jp/blog/wsg/09/06/16-151445.php
1. CSSとJSのロード
こんな感じで。
<style type="text/css"> @import "/js/Super_Tables_0_30beta_compressed/stylesheets/superTables_compressed.css"; </style> <script src="/js/Super_Tables_0_30beta_compressed/javascripts/superTables_compressed.js" type="text/javascript"></script>
2. テーブル全体のスタイル
こんな感じで。
<style type="text/css"> .fakeContainer { margin: 0 0 20px; border: none; width: 400px; height: 100px; overflow: hidden; } </style>
3. テーブル作成
<div class="fakeContainer"> <table id="demoTableA"> <tr> <th>header00</th> <th>header01</th> <th>header02</th> <th>header03</th> <th>header04</th> <th>header05</th> <th>header06</th> <th>header07</th> <th>header08</th> <th>header09</th> </tr> <tr> <th>header10</th> <th>header11</th> <th>header12</th> <th>header13</th> <th>header14</th> <th>header15</th> <th>header16</th> <th>header17</th> <th>header18</th> <th>header19</th> </tr> <tr> <td>data00</td> <td>data01</td> <td>data02</td> <td>data03</td> <td>data04</td> <td>data05</td> <td>data06</td> <td>data07</td> <td>data08</td> <td>data09</td> </tr> <tr> <td>data10</td> <td>data11</td> <td>data12</td> <td>data13</td> <td>data14</td> <td>data15</td> <td>data16</td> <td>data17</td> <td>data18</td> <td>data19</td> </tr> <tr> <td>data20</td> <td>data21</td> <td>data22</td> <td>data23</td> <td>data24</td> <td>data25</td> <td>data26</td> <td>data27</td> <td>data28</td> <td>data29</td> </tr> <tr> <td>data30</td> <td>data31</td> <td>data32</td> <td>data33</td> <td>data34</td> <td>data35</td> <td>data36</td> <td>data37</td> <td>data38</td> <td>data39</td> </tr> </table> </div>
4. 行列固定設定
HTMLを読み込んでからこんな感じでスクリプト実行。
(</body>直前に書けばいい)
<script type="text/javascript"> //<![CDATA[ (function () { new superTable("demoTableA", { cssSkin : "sOrange", // eg. "sDefault", "sSky", "sOrange", "sDark" headerRows : 1, // 固定する行数 fixedCols : 1 // 固定する列数 // onStart : function(), // スクリプトを実行できるらしい(試してない) // onFinish : function(), // スクリプトを実行できるらしい(試してない) }); })(); //]]> </script>
・jquery
※元ネタ
http://fixed-header-using-jquery.blogspot.com/2009/05/scrollable-table-with-fixed-header-and.html
上述のSuper Tablesでほとんどの場合は事足りることと思われますが、テーブルにFormを入れ込まないといけなくなると途端に使えなくなります。
Super Tablesは普通のtable記述にclass打つだけで実現できるので非常に分かりやすいのですが、固定スクロールを実現するために裏でダミーのtableを複製したりしており、formをsubmitした際に新しいデータが飛んできません。(同一nameやidを持つformエレメントがSuper Tablesによって裏でいくつか複製されます。)
Super Tablesに比べてやや分かりにくくはなりますが、Pavanさんが作成してくれたリンク先のスクリプトを適用すればFormが入ったスクロールテーブルも実現可能です。
確かめてはいませんが、IE6、7、8、FF3、3.5、Chrom2で動作するとのことです。
また、リンク先の記述ではjquery-1.3.2.jsを使用していますが、jquery-1.4.2.min.jsでも動作しています。
※デモ
http://acatalept.com/common/test/fixed-table.html
※ソース
http://snipt.org/loz
0 件のコメント:
コメントを投稿