HTMLTableCellElementオブジェクトには、親から継承したもの以外に、メソッドはありません。新たに定義されているのは、HTML4で定義されている属性値だけです。
interface HTMLTableCellElement : HTMLElement { readonly attribute long cellIndex; attribute DOMString abbr; attribute DOMString align; attribute DOMString axis; attribute DOMString bgColor; attribute DOMString ch; attribute DOMString chOff; attribute long colSpan; attribute DOMString headers; attribute DOMString height; attribute boolean noWrap; attribute long rowSpan; attribute DOMString scope; attribute DOMString vAlign; attribute DOMString width; };
次のスクリプトは、targetTableで指定されたテーブルの、targetRowIndexとtargetColIndexで指定されたセルを、rowSpan, colSpanのサイズに拡張します。拡張した結果はみ出してしまうセルは、削除します。
汎用性を持たせる為には、指定の拡張を行った結果、ターゲットのテーブルの、幅や高さをはみ出してしまう可能性や、関連するセルが、既に拡張されている場合も、考慮する必要があるが、これは結構大変かもしれない。
また、theadやtfoot・tbodyといった、行単位のグループを超えて、拡張することはできないので、このあたりも考慮しなければならない。もちろん不可能とは言わないけど・・・・。
function cellSpan(targetTable, targetRowIndex, targetColIndex, rowSpan, colSpan) { var targetRow = targetTable.rows.item(targetRowIndex); var targetCell = targetRow.cells.item(targetColIndex); var rowCount = targetTable.rows.length; var colCount = targetRow.cells.length; /** * 結合したセルのサイズが、テーブルをはみ出すような場合は、 * 結合する幅や高さを調整する。 */ if ((targetRowIndex + rowSpan) > rowCount) { rowSpan = rowCount - targetRowIndex; } if ((targetColIndex + colSpan) > colCount) { colSpan = colCount - targetColIndex; } /** * 拡張するセルが存在する行から、不要となるcellを削除。 * ここでは、rowSpan - 1個のセルを、削除する。 */ for (var i = 1; i < colSpan; i ++) { targetRow.deleteCell(targetColIndex + 1); } /* * 上記以外の行で、はみ出すセルの削除。 * ここでは、colSpan個のセルを、削除する。 */ for (var i = 1; i < rowSpan; i ++) { var row = targetTable.rows.item(targetRowIndex + i); for (var j = 0; j < colSpan; j ++) { row.deleteCell(targetColIndex); } } targetCell.colSpan = colSpan; targetCell.rowSpan = rowSpan; }
セル結合の実験です。テキストフィールドに入力された内容により、下のテーブルのセルを結合します。
テキストフィールドに入力できるのは、数値だけです。「行目」には、0~9の範囲内で、入力してください。「列から」には、0~4の範囲内で、入力してください。入力チェックなどは行っていませんので、ご自身の責任において(笑)お願いします。
すでに結合したセルを、再度結合の対象とすると、表示が崩れます。場合によってはエラーとなります。また、少々バギーが部分もあり、正しく入力しても、思った通りにならない場合もあります。そのような時は、このページを再読込してください。
1行1列 | 1行2列 | 1行3列 | 1行4列 | 1行5列 |
2行1列 | 2行2列 | 2行3列 | 2行4列 | 2行5列 |
3行1列 | 3行2列 | 3行3列 | 3行4列 | 3行5列 |
4行1列 | 4行2列 | 4行3列 | 4行4列 | 4行5列 |
5行1列 | 5行2列 | 5行3列 | 5行4列 | 5行5列 |
6行1列 | 6行2列 | 6行3列 | 6行4列 | 6行5列 |
7行1列 | 7行2列 | 7行3列 | 7行4列 | 7行5列 |
8行1列 | 8行2列 | 8行3列 | 8行4列 | 8行5列 |
9行1列 | 9行2列 | 9行3列 | 9行4列 | 9行5列 |
10行1列 | 10行2列 | 10行3列 | 10行4列 | 10行5列 |
Webアプリケーションで、大量のデータを画面上に表示するのは、非常に厄介な問題を引き起こす場合があります。次ページ・前ページというやつです。
該当するデータが確実にロックできる環境であれば、特に問題はありませんが(パフォーマンスの問題は残りますが)、表示する該当データが、他のクライアントから削除されたり追加されたり、ましてや表示順を左右する項目を変更される様な場合、「次ページには、どのデータを表示すれば良いんだ?!」ということになります。
データはどこかに一元管理するのが、間違いも発生しにくく、正しい考え方です。そのクライアントが表示したいデータは、全てクライアントが持っているのが良いでしょう、やっぱり。(とてつもない大量データの場合は、また別ですね。数万件のデータを、一度にクライアントに送るのが、正しい考え方とは、とても思えないですから)
次のスクリプトは、指定されたIDのテーブルをスクロールします。例によって、完全な汎用性は持っていません。表示行数や現在の表示位置などを固定で持っているので、複数のテーブルが同じドキュメントに存在する場合に、対応できません。本来であれば、このあたりの情報を、IDをキーとした連想配列などに格納する事が、必要です。
また、必ずtbodyエレメントが必要で、尚且つtbodyエレメントが複数あるテーブルの場合、その先頭のtbodyエレメントのみを対象とします。
多少の改造で「ページアップ」や「ページダウン」、「トップへ」や「ボトムへ」等にも、簡単に対応できると思います。
/** テーブルの表示行数 */ var dispRow = 4; /** 現在の表示先頭行インデックス */ var currentTopIndex = 0; /** 現在の表示最終行インデックス */ var currentBottomIndex = dispRow - 1; /** * 初期化メソッド。 * 必ずドキュメントロード時に、コールする必要がある。 */ function init(targetId) { var tBodyRows = getTBodyRows(targetId); for (var i = dispRow; i < tBodyRows.length; i ++) { tBodyRows.item(i).style.display = 'none'; } } function up(targetId) { var tBodyRows = getTBodyRows(targetId); if (currentBottomIndex == tBodyRows.length - 1) { return; } tBodyRows.item(currentTopIndex).style.display = 'none'; currentTopIndex ++; currentBottomIndex ++; tBodyRows.item(currentBottomIndex).style.display = ''; } function down(targetId) { var tBodyRows = getTBodyRows(targetId); if (currentTopIndex == 0) { return; } currentTopIndex --; tBodyRows.item(currentTopIndex).style.display = ''; tBodyRows.item(currentBottomIndex).style.display = 'none'; currentBottomIndex --; } function getTBodyRows(targetId) { var targetTbl = document.getElementById(targetId); var tBodies = targetTbl.tBodies; var tBody = tBodies.item(0); return tBody.rows; }
青春の頃(ん十年前)聴いていた、懐かしのメロディリストです。こういうのは、作っていると、ついつい長くなっちゃうんですよね。ということで、テーブルのスクロールです。
下の「UP」「DOWN」をクリックすると、スクロールします。セルの中で改行しないような設定にしたほうが、良いかもしれません。
Webブラウザによっては、少々操作しづらかったり、罫線が残ってしまったりする場合があるようですが、そういうものとあきらめてください(^^;。
アーティスト | アルバム | 年 | お勧めの楽曲 |
---|---|---|---|
TRIUMPH | ROCK 'N' ROLL MACHINE | 1978 | 24 HOURS A DAY |
TRIUMPH | ROCK 'N' ROLL MACHINE | 1978 | STREET FIGHTER |
TRIUMPH | ROCK 'N' ROLL MACHINE | 1978 | STREET FIGHTER REPRISE |
TRIUMPH | ROCK 'N' ROLL MACHINE | 1978 | BLINDING LIGHT SHOW/MOON CHILD |
TRIUMPH | ROCK 'N' ROLL MACHINE | 1978 | BRINGING IT ON HOME |
TRIUMPH | Just a Game | 1979 | LAY IT ON THE LINE |
TRIUMPH | Just a Game | 1979 | YOUNG ENOUGH TO CRY |
TRIUMPH | Just a Game | 1979 | JUST A GAME |
TRIUMPH | Just a Game | 1979 | HOLD ON |
TRIUMPH | Just a Game | 1979 | SUITCASE BLUES |
SCORPIONS | VIRGIN KILLER | 1977 | 幻の肖像 |
SCORPIONS | VIRGIN KILLER | 1977 | CATCH YOUR TRAIN |
SCORPIONS | VIRGIN KILLER | 1977 | YELLOW RAVEN |
RORY GALLAGHER | CALLING CARD | 1976 | COUNTRY MILE |
RORY GALLAGHER | CALLING CARD | 1976 | MOONCHILD |
RORY GALLAGHER | CALLING CARD | 1976 | EDGED IN BLUE |
RIOT | 怒りの廃墟 | 1977 | Desperation |
RIOT | 怒りの廃墟 | 1977 | 幻の叫び |
RIOT | 怒りの廃墟 | 1977 | Overdrive |
Wishbone Ash | 百眼の巨人アーガス | 1972 | 時は昔 |
Wishbone Ash | 百眼の巨人アーガス | 1972 | 木の葉と小川 |
Wishbone Ash | 百眼の巨人アーガス | 1972 | 戦士 |
Deep Purple | IN ROCK | 1970 | Speed King |
Deep Purple | IN ROCK | 1970 | Child In Time |
Deep Purple | MACHINE HEAD | 1972 | Highway Star |
Deep Purple | MACHINE HEAD | 1972 | Smoke On The Water |
Deep Purple | MACHINE HEAD | 1972 | Lazy |
Deep Purple | 紫の炎 | 1974 | 紫の炎 |
Deep Purple | 紫の炎 | 1974 | MISTREATED |
URIAH HEEP | 対自核 | 1971 | 対自核 |
URIAH HEEP | 対自核 | 1971 | 7月の朝 |
URIAH HEEP | 対自核 | 1971 | 悲嘆のかげり |
URIAH HEEP | 悪魔と魔法使い | 1972 | 魔法使い |
URIAH HEEP | 悪魔と魔法使い | 1972 | 安息の日々 |
URIAH HEEP | 悪魔と魔法使い | 1972 | 連帯 |
URIAH HEEP | 悪魔と魔法使い | 1972 | 呪文 |
URIAH HEEP | InnocentVictim | 1977 | FREE N' EASY |
URIAH HEEP | InnocentVictim | 1977 | THE DANCE |
URIAH HEEP | InnocentVictim | 1977 | CHOICES |
NAZARETH | 人喰い犬 | 1975 | 人喰い犬 |
NAZARETH | 人喰い犬 | 1975 | Miss Misery |
NAZARETH | 人喰い犬 | 1975 | Beggar's Day ~ Rose In Heather |
NAZARETH | 人喰い犬 | 1975 | Please Don't Judas Me |
THIN LIZZY | 脱獄 | 1976 | 脱獄 |
THIN LIZZY | 脱獄 | 1976 | ヤツラは町へ |
THIN LIZZY | 脱獄 | 1976 | エメラルド |
THIN LIZZY | サギ師ジョニー | 1976 | 甘い言葉に気をつけろ |
THIN LIZZY | 悪名 | 1977 | 悪名 |
THIN LIZZY | 悪名 | 1977 | Dancin'In The Moonlight |
THIN LIZZY | BLack Rose | 1979 | ヤツらはデンジャラス!! |
THIN LIZZY | BLack Rose | 1979 | アリバイ |
Judas Priest | 運命の翼 | 1975 | THE RIPPER |
Judas Priest | 運命の翼 | 1975 | DREAMER DECEIVER |
Judas Priest | 運命の翼 | 1975 | EPITAPH |
Judas Priest | 運命の翼 | 1975 | ISLAND OF DOMINATION |
Judas Priest | 背徳の門 | 1976 | 背徳の門 |
Judas Priest | STAINDE CLASS | 1978 | BETTER BY YOU BETTER THAN ME |
Judas Priest | STAINDE CLASS | 1978 | INVADER |
Judas Priest | STAINDE CLASS | 1978 | BEYOND THE REALMS OF DEATH |