javascriptでオセロを作ろうと思っています。
初めに「クリックしたtdタグの背景色を、クリック数が奇数回なら白、偶数なら黒にする」コードを書きたいのですが、
変数とthis(クリックされたtdタグ)の使い方がいまいち分かりません。
ご教授いただければと思います。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無題ドキュメント</title>
</head>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
td {
width: 100px;
height: 100px;
}
.green {
background-color:#093;
}
.black {
background-color:#333;
}
.white {
background-color:#CCC;
}
</style>
<body>
<table>
<tr>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
</tr>
<tr>
<td class="green" onClick="osero(this)"></td>
<td class="black" onClick="osero(this)"></td>
<td class="white" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
</tr>
<tr>
<td class="green" onClick="osero(this)"></td>
<td class="white" onClick="osero(this)"></td>
<td class="black" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
</tr>
<tr>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
<td class="green" onClick="osero(this)"></td>
</tr>
</table>
<script type="text/javascript">
<!--
c_count = 0;//tdをクリックした回数
//tdクリックで黒
function kuro(i){
document.i.style.backgroundColor = "#333";
c_count=c_count++
}
//tdクリックで白
function siro(i){
document.i.style.backgroundColor = "#ccc";
c_count=c_count++
}
//クリック交互に黒白
function osero(i){
if(c_count % 0){
siro(i);
}else{
kuro(i);
}
}
-->
</script>
</body>
</html>
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
<td onClick="osero(this)"> の this は、該当するTD要素そのもので、HTMLTableDataCellElement のインスタンスです。
なので、要素を操作する方法は
誤: document.i.style // i は ID でも NAME でもない
正: i.style
それとは別に誤りがあります
誤: c_count = c_count++ // 結局加算していません
正: c_count++;
誤: if (c_count % 0) // 0で除算エラー
正: if (c_count % 2)
それとは別に注意点です
c_count = 0 // var を付けるべき
backgroundColor = "#ccc" // クラス名は使わないのか?
この回答への補足
お返事ありがとう御座います。
指摘箇所を修正したところ、無事動作しました。
解決はしたのですが、
Ogre7077さんの言われる
>backgroundColor = "#ccc" // クラス名は使わないのか?
というのはどういうことなのでしょうか。
javascriptをはじめて間もないのでよく分かりません。
よかったらそれも教えていただけるとうれしいです。
よろしくお願いします。
No.2
- 回答日時:
No.1 の補足に対する回答です。
スタイルとして以下の定義を成されたのなら、スクリプトでも活用しない手はありません。
.black { background-color:#333; }
.white { background-color:#CCC; }
○ i.style.backgroundColor = "#ccc"
<td class=black> → <td class=black style="background-color:#ccc">
黒だけど白とは矛盾ではないだろうか
○ i.className = 'white'
<td class=black> → <td class=white>
すっきり明快
className は属性 class と同等です
○ i.classList.remove('green').remove('black').add('white')
<td class=black> → <td class=white>
厳格で副作用のない記述方法
古いIEでは動作しない点だけ注意
classList は、属性 class を空白区切りした配列と同様です
お返事ありがとう御座います。
なるほど、確かにこちらの方がスマートですね。
ですが、古いIEを切るのは出来るだけ避けたいので、こういうやり方もあるということだけ心に留めておくことにします。
ありがとう御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Perl PERL 1 2022/04/26 14:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<td>の中のonClick="location" で
-
空のテーブルを表示させたい
-
ポップアップメニュー
-
JSで、テーブルのある行のみ、...
-
ウイルスバスターオンラインス...
-
Jquery on click 発火しない
-
月間予定表の作り方
-
【秀丸マクロ】検索行と、その...
-
ハイパーリンクを別ウインドウ...
-
PC情報の調べ方教えてください。
-
\\u30ad\\u30fc\\u30dc・・・と...
-
テーブルセルの列での背景色の変更
-
jquery datatablesを使用 イン...
-
「オブジェクトは、このプロパ...
-
JavaScriptでテーブルをクリッ...
-
CSVデータをツリー表示させたい
-
正規表現で複数マッチ条件で悩...
-
ボタン2回押しを無効にしたい
-
<form action="#">の意味とは?
-
JavaScriptにて動的に配列を作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハイパーリンクを別ウインドウ...
-
マウスをブラウザの外に出した...
-
JavaScriptで特定のtdタグにcla...
-
特定<table>内の<td>の色を変える
-
一覧から選択した行の行番号を...
-
tableの任意行にfocusをあてる
-
プルダウンで選択すると、DBの...
-
至急!GetElementById でtdの...
-
【UWSC】HTML内のある部分を抽...
-
javascript クリックすると、あ...
-
jsで質問です。 displayプロパ...
-
javascriptで質問です。 displa...
-
クリックされた罫表セルの行番...
-
テーブルの変数について
-
別ページからOnclickでテーブル...
-
スクロールバーの表示位置を変...
-
JavaScriptでテーブルをクリッ...
-
Selenium.ChromeDriverの使い方...
-
Excelで作ったhtmlファイルのサ...
-
チェックボックスにチェックが...
おすすめ情報