質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2788閲覧

Javascript テーブル内の数字をif文の条件分岐で色変更したい

kei0005

総合スコア19

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/29 08:37

実現したいこと

Javascriptにて、乱数で0~2の整数を10×4のテーブル表に入れていき、格納された数字が4つとも同じ行があればその行の数字を青で表示したいです。

発生している問題

テーブル表は出来たのですが同じ行の数字がすべて同一でもその数字たちが青で表示されずに困っております

該当のソースコード

Javascript

1<script type="text/javascript"> 2 3 document.write("<h3>4×10テーブル</h3>"); 4 document.write("<table border>"); 5 6 for (var i = 1; i <= 10; i++) { 7 8 document.write("<tr>"); 9 10 var a=Math.floor (Math.random ( ) * 3); 11 document.write("<td>",a,"</td>"); 12 var b=Math.floor (Math.random ( ) * 3); 13 document.write("<td>",b,"</td>"); 14 var c=Math.floor (Math.random ( ) * 3); 15 document.write("<td>",c,"</td>"); 16    var d=Math.floor (Math.random ( ) * 3); 17 document.write("<td>",d,"</td>"); 18<!--Math.floor (Math.random ( ) * 3);0 or 1 or 2の乱数を生成--> 19if(a==b && a==c && a==d){ 20a.style.color="blue"; 21b.style.color="blue"; 22c.style.color="blue"; 23d.style.color="blue"; 24} 25 26 document.write("</tr>"); 27 28 } 29 30 document.write("</table>"); 31 32</script>

現状の実行結果

イメージ説明
初歩的な質問で申し訳ありませんがどなたかご教示お願いしたいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

a.style.color="blue";

↑これ、出力するtdタグのスタイル属性ですよね?
document.writeする前に判定しなきゃダメじゃないですか?

var a=Math.floor (Math.random ( ) * 3); document.write("<td>",a,"</td>"); var b=Math.floor (Math.random ( ) * 3); document.write("<td>",b,"</td>");

↑ここでは書き出しとほぼ同時に乱数生成してますが、処理順序として、

1.1行分のすべての値を生成する。
2.1行分のすべての値が同一か判定する
3.2が同一なら「<td style="color:blue">」を使って出力する。
4.2が同一でなければ「<td>」を使って出力する。

としなければだめでしょう。

投稿2018/05/29 08:50

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei0005

2018/05/30 04:55

tkturdo様のおっしゃる通り処理順序が原因だったようです、無事解決できました ありがとうございます!
guest

0

さすがにdocument.writeはやめたほうがいいですね
テーブルの描画したあとに判定する方法のsampleです

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 /*ここからテーブル描画*/ 3 var view=document.querySelector("#view"); 4 var h3=document.createElement("h3"); 5 h3.appendChild(document.createTextNode("4×10テーブル")); 6 view.appendChild(h3); 7 var table=document.createElement("table"); 8 table.setAttribute("id","t1"); 9 table.setAttribute("border",1); 10 var tbody=document.createElement("tbody"); 11 for(var i=1;i<=10;i++){ 12 var tr=document.createElement("tr"); 13 for(var j=1;j<=4;j++){ 14 var td=document.createElement("td"); 15 td.appendChild(document.createTextNode(Math.floor(Math.random()*3))); 16 tr.appendChild(td); 17 }; 18 tbody.appendChild(tr); 19 } 20 table.appendChild(tbody); 21 view.appendChild(table); 22 23 /*ここからチェック*/ 24 [].forEach.call(document.querySelectorAll("#t1 tr"),function(x){ 25 if([].map.call(x.querySelectorAll("td"),function(x){ 26 return x.textContent; 27 }).filter(function(x,y,z){ 28 return z.indexOf(x) === y; 29 }).length==1){ 30 [].forEach.call(x.querySelectorAll("td"),function(x){ 31 x.style.color="blue"; 32 }); 33 } 34 }); 35});

HTML

1<div id="view"></div>

投稿2018/05/29 12:44

編集2018/05/29 12:46
yambejp

総合スコア114736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問