説明
実行例のような単純なテーブルを作ろうとしたら、おそらく下のような タグになると思います。
<div class="iro1">Aさんのホームページ</div>
<div class="iro2">Bさんのホームページ</div>
<div class="iro1">Cさんのホームページ</div>
<div class="iro2">Dさんのホームページ</div>
<div class="iro1">Eさんのホームページ</div>
<div class="iro2">Fさんのホームページ</div>
しかし、BさんとCさんの間にGさんを入れようとすると セルの背景色が ずれるため、修正が大作業になってしまいます。
JavaScriptで テーブルを作ってしまえば、編集が楽になります。
myTbl = new Array(
-
"Aさんのホームページ",
"Bさんのホームページ",
"Cさんのホームページ",
"Dさんのホームページ",
"Eさんのホームページ",
"Fさんのホームページ"
);
myTblColor = new Array( "iro1", "iro2" );
myTbl は、テーブルに表示する項目の配列です。この順番にテーブルに表示していきます。
myTblColor は、テーブルのセルに交互に付ける背景色の配列です。
for ( i=0; i<myTbl.length; i++){ | // テーブル数分ループ |
myStr += "<div class='" + myTblColor[i % 2] + "'>"; | // 交互に色付け |
myStr += myTbl[i]; | // データセット |
myStr += "<\/div>"; | |
} | |
データの数だけ、<div> 〜 </div>の行を作成します。
今回は
ループ(for文) という if 文の 次にくるプログラムの基本となる命令を使います。
書式は、
for ( 初期値設定; ループ条件; ループ後の処理 ){ ループ内処理 }
です。
初期値設定 | ループカウンタの初期値をセットします。 |
ループ条件 | いつまでループするかの条件式をセットします。 |
ループ後の処理 | ループカウンタを加算します。 |
ループ内処理 | ループしている間 処理するプログラムを書きこみます。 |
初期値設定は、for文を始める時に
1回のみ処理します。
次に、
ループ条件をチェックして、条件を満たしていたら、
ループ内処理を行います。
ループ内処理が終われば、
ループ後の処理をして、再び
ループ条件をチェックします。
ループ条件が満たしていなければ、for 文の ループは終わります。
for 文も if 文同様に、処理が 1つだけでなら、括弧{}は省略できます。
for (i=0; i<myTbl.length; i++){ 処理1; 処理2; ・・; }
for (i=0; i<myTbl.length; i++) 処理1;
サンプルでは、6個の配列データを テーブルに書きこみたいので、初期値設定は配列の先頭、つまり0を i にセットします。
i=0;
ループ条件は データの数だけ ループしたいので、配列の数が入っている myTbl.length を使って、
i < myTbl.length;
で、i が myTbl.lengthより小さければ条件成立となり、ループ内処理を行います。
ループ後の処理は 次の配列のデータを参照したいので、i に1を足すという処理を記述します。
i++
※ i++; は i=i+1; と同じです。インクリメントといいます。Step.10参照
for (i=0; i<myTbl.length; i++){ 処理 }
配列の数(myTbl.length) は 6なので i=0〜5 の 6回ループします。
ループ内処理にて、<div> 〜 </div> の行を作成していきます。
myStr += "<div class='" + myTblColor[i % 2] + "'>";
myStr += myTbl[i];
myStr += "<\/div>";
セルの背景色指定に、
myTblColor[ i % 2]
とあります。
% は、余りを求める演算子です。
a = 7 % 2 ; とすれば、a には 1 が入ります。
背景色は 2種類の色を 交互につけていくので、i を2で割った 余りは 0か1なので、myTblColor の0番目と1番目の背景色を交互に取り出せるわけです。
CSSで交互に背景色を変える
~IE8 IE9~ CM FX OP SF
交互に背景色を変えるのは JavaScriptを使わなくても、スタイルシートだけでも実現できます。
<style type="text/css"><!--
div.sample1 {
-
width: 11em;
border-style: solid;
border-width: thin;
}
div.sample1 div:nth-child(odd) { background-color: #DB7093; }
div.sample1 div:nth-child(even) { background-color: #D8BFD8; }
// --></style>
<div class="sample1">
<div>Aさんのホームページ</div>
<div>Bさんのホームページ</div>
<div>Cさんのホームページ</div>
<div>Dさんのホームページ</div>
<div>Eさんのホームページ</div>
<div>Fさんのホームページ</div>
</div>
Aさんのホームページ
Bさんのホームページ
Cさんのホームページ
Dさんのホームページ
Eさんのホームページ
Fさんのホームページ
奇数行を nth-child(odd) 、偶数行を nth-child(even) で指定します。
非常に便利なCSSですが IE8以下が対応していないため、まだ実用的ではありません。