はじめは、ライフゲームの説明のために作成したと記憶しています。その後フォントの説明や、図形のデジタル化に使いました。掲載にあたり、モバイル端末でも画面いっぱいになるようcssを書き足しました。vminを使うなどしていますが、IEでは9.0以降の対応のようです。もともとはtdにwidth:100px; height:100px;でやっていました。
プログラムは単純です。classを変更するだけです。IE対策でsetAttribute("class","blk")の代わりにkoko.className = "blk"を使っています。後半のイベントハンドラを取り付ける部分ではsetAttribute()を使っていて一貫性がないのですが、たぶんtds[i].onclick=ではうまく行かなかったからでしよう。(過去の自分は他人です。) 授業ではLinux上でfirefoxを使っていたので、問題ないですが、公開した時の心配をしているわけです。
function changecolor(koko){ var color = koko.getAttribute("class"); if ( color=="wht" ) { koko.className = "blk"; }else if ( color=="blk" ) { koko.className = "wht"; } } window.onload = function(){ setevent(); } function setevent(){ var tgtbl = document.getElementById("grid"); var tds = tgtbl.getElementsByTagName("td"); for (var i=0;tds.length>i;i++){ tds[i].setAttribute("onclick","changecolor(this)"); } }
<div class="table"> <table id="grid"> <tr> <td class="wht"><p></p></td> <td class="wht"><p></p></td> <td class="wht"><p></p></td> <td class="wht"><p></p></td> <td class="wht"><p></p></td> <td class="wht"><p></p></td> <td class="wht"><p></p></td> </tr> <tr> <td class="wht"><p></p></td> ........
.table { width: 100vmin; } #grid{ margin:0 1%; border-collapse:collapse; width: 90%; } #grid td{ min-width:40px; min-height:40px; border:solid 1px #ccc; } #grid td p{ padding:0; margin:0; width: 100%; } #grid td p:before{ content:""; display: block; padding-top: 100%; } .wht {background-color:#ffffff;} .blk {background-color:#000000;}