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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2769閲覧

画像と文字を交互に入れ替えしたい。

september

総合スコア5

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/08 04:26

編集2020/01/08 05:43

前提・実現したいこと

ブラウザで画像を入れ替えたときに、AとBの二つの画像があったとして、Bが左側に来た時に「ワンワン」、Aが左側に来た時「ニャー」と文字が出るようにif文とid属性を使って作りたいです。使っているソフトはATOMです。

発生している問題・エラーメッセージ

ブラウザで「入れ替え」を押したとき画像は交互に入れ替わるのに、文字がずっと「ワンワン」のままで解決方法が分からず困っています。

該当のソースコード

<!DOCTYPE html> <html> <head> <meta charset ="utf-8"> <title>画像を入れ替え</title> <script> function imgswap() { var a, b, c; var ans=document.getElementById("answer"); a=window.document.images[0].src; b=window.document.images[1].src; c=a; window.document.images[0].src=b; window.document.images[1].src=c; document.fgColor="#ffccff"; if (window.document.images[0].src=b) { ans.innerHTML="ワンワン"; } else if (window.document.images[1].src=c) { ans.innerHTML="ニャー"; } } </script> </head> <body> <p id="answer">左右の画像を入れ替え</p> <div><img src="cat_tonkinese.png"><img src="dog_akitainu.png"></div> <form name="myform"> <input type="button" value="入れ替え" onclick="imgswap()"> </form> </body> </html>

試したこと

ifの条件文をa=bやc=bにしたが変化なし、ずっと「ワンワン」のままであった。

###詳しい情報

画像の初期位置は左がAで右がBで、横で並んでます。文字は画像の上に最初は「左右の画像を入れ替え」と書いており、「入れ替え」を押すと「ワンワン」に変わります。

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

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

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

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

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

kei344

2020/01/08 04:31

(質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
miyabi_takatsuk

2020/01/08 04:38

javascriptの質問タグも追加してください。
miyabi_takatsuk

2020/01/08 05:53

一点確認です。 多分これ、Webサーバーとかではなく、ローカルでHTML開いてますね?
guest

回答2

0

ベストアンサー

何点か基本的な部分を理解されていないようにお見受けします。

=一つは比較演算ではない

=は一つでは、比較演算ではなく、代入演算です。
よって、ifの一つ目の条件は、代入の結果が評価されるため、"今回の場合は"永久にtrueとなります。
("ニャー"は永久に通りません)

一個目のimg要素のsrcにbを代入した後にimg[0].src == bしても、そりゃ永久にtrueになる。

つまり、bをすでに代入して入れ替えた後に、代入したsrcと、bを比較したら、それは、falseになることはありえません。
なので、srcdogが含まれているかどうか、で比較するなど、他の方法で比較する必要があるでしょう。

上記を踏まえて、下記でいかがでしょうか。
(修正点なども記載してます)

javascript

1function imgswap() { 2 var a, b, c; 3 var ans=document.getElementById("answer"); 4 a = window.document.images[0].src; 5 b = window.document.images[1].src; 6 c = a; 7 8 9 window.document.images[0].src=b; 10 window.document.images[1].src=c; 11 document.fgColor="#ffccff"; 12 13 // =が一個だと、比較ではなく、代入になってしまうので、今回の場合は永久に"ワンワン"の方を通る 14 // 左辺と右辺の比較演算子は、== 15 if (window.document.images[0].src==b) { 16 ans.innerHTML="ワンワン"; 17 } else if (window.document.images[1].src==c) { 18 ans.innerHTML="ニャー"; 19 } 20 // だが、上記(window.document.images[0].src=b;)ですでに、bを代入しているので、永久に"ワンワン"の方を通る 21 // なので、下記のようにsrcに含まれる文字列で比較するしかない 22 if (window.document.images[0].src.indexOf('dog') !== -1) { 23 // dogがパスに含まれる 24 ans.innerHTML="ワンワン"; 25 } else { 26 // dogが含まれない、つまりcat 27 ans.innerHTML="ニャー"; 28 } 29 30}

投稿2020/01/08 06:36

miyabi_takatsuk

総合スコア9528

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

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

september

2020/01/08 08:34

分かりやすい説明でなぜできなかったのかが分かりました。ありがとうございました。
guest

0

こんな感じでしょうか?

投稿2020/01/08 04:57

yambejp

総合スコア114784

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

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

yambejp

2020/01/08 04:57

<script> function imgswap() { var ele=document.querySelector('#images img'); document.querySelector('#images').removeChild(ele); document.querySelector('#images').appendChild(ele); var txt=ele.getAttribute("alt")=="dog"?"にゃーにゃー":"わんわん"; document.querySelector('#result').textContent=txt; } </script> <div id="result">左右の画像を入れ替え</div> <div id="images"> <img src="https://placehold.jp/ff0000/00ffff/150x100.png?text=dog" class="alt_text" alt="dog"> <img src="https://placehold.jp/00ff00/ff00ff/150x100.png?text=cat" class="alt_text" alt="cat"> </div> <div> <form name="myform"> <input type="button" value="入れ替え" onclick="imgswap()"> </form> </div>
yambejp

2020/01/08 05:49

あ、マルチポスト? もしくは同じ課題を出された人たち?
september

2020/01/08 06:00

回答ありがとうございます。 どなたのことかは分かりませんが、確かに講義で出された課題です。もしかしたらその人は同じ講義を受けた方かもしれません。あとif文を使ってできないでしょうか?
miyabi_takatsuk

2020/01/08 06:42

横槍すみません。 本質的には、if文(比較文)使ってますけどね。 三項演算子は、まだ理解難しいでしょうか? (あと、課題は自分でやったほうがいいと思いますよー)
september

2020/01/08 08:33

三項演算子はまだ習っていません。 数日間頭を抱えていたので今回質問をしました。
september

2020/01/08 08:35

yambejpさんご協力いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問