質問するログイン新規登録
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

2回答

126閲覧

Javascriptでimgのsrcを変更する方法について

mosamosadon88

総合スコア1

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

0クリップ

投稿2025/08/29 01:54

0

0

前提

サムネイル画像をクリックすると大きな画像のsrcを変更する時の方法の違いについて

疑問に思っていること

document.getElementById("big_div4").src を宣言してから代入すると
うまく表示されない理由を知りたいです。
(パターン1だと動かないが、パターン2だと動く)
自分の認識では、パターン1とパターン2は同じことを
書いていると思っています。

パターン1だと動かない
パターン2だと動く
パターン3 見つけたその他の方法

該当のソースコード

html

1 2 <div id="big_div3"> 3 <img src="img/img-01.jpg" id="big_div4"> 4 </div> 5 6 <div class="thumb_block3" id="thumb_block_id2"> 7 <div class="thumb_div" data-box="1"> 8 <img src="thumb-1.jpg" alt=""> 9 </div> 10 <div class="thumb_div" data-box="2"> 11 <img src="thumb-2.jpg" alt=""> 12 </div> 13 <div class="thumb_div" data-box="3"> 14 <img src="thumb-3.jpg" alt=""> 15 </div> 16 </div> 17 18<script> 19$(function(){ 20 $(".thumb_block3 div").on("click", function() { 21 let main_src = $("#big_div3").children("img").attr('src'); 22 let click_data = $(this).data("box"); 23 let s_src = main_src.slice(-5,-4); 24 let result = main_src.replace(s_src,click_data); 25 let big = document.getElementById("big_div4").src; 26 27 big = result; //動かない パターン1 28 document.getElementById("big_div4").src = result; //動く パターン2 29 $("#big_div3").children("img").attr('src' , result); //動く パターン3 30 31 }); 32}); 33 34</script> 35 36

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

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

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

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

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

guest

回答2

0

let big = document.getElementById("big_div4").src;
big = result; //動かない パターン1

パターン1はdocument.getElementById("big_div4").src自体がString値なので
それを受けた変数bigは単なるプリミティブであり書き換えてもbigの値が変わるだけです

document.getElementById("big_div4").src = result; //動く パターン2

パターン2はオブジェクトのプロパティを変更しているのでオブジェクト自体の状態が変更します

javascript

1<img id="big_div4"> 2<script> 3let big = document.getElementById("big_div4").src; 4console.log(typeof document.getElementById("big_div4")) //Object 5console.log(typeof document.getElementById("big_div4").style) //Object 6console.log(typeof document.getElementById("big_div4").src) //String 7console.log(typeof big) //String 8</script>

ただしDOMのプロパティは必ずしもプリミティブではないのでご留意ください

投稿2025/08/29 02:35

yambejp

総合スコア118077

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

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

mosamosadon88

2025/08/29 03:34

ご回答ありがとうございます。 たしかに今回の場合、変数にいれたら単なる文字列になるなるだけですよね… よく考えればわかるはずですが、一人で考えていると中々思い至らないのが難しいですね。
guest

0

ベストアンサー

js

1 let big = document.getElementById("big_div4").src;

代入文は、「左辺の変数を右辺と同じように扱えるようにする」ではなく「右辺の計算結果を左辺の変数に入れる」です。この場合は変数bigの内容は "img/img-01.jpg" という文字列になるでしょう。文字列が入った変数の値を変更しても、big_div4 要素に影響を与えることはできません。

js

1 let big = document.getElementById("big_div4"); 2 big.src = result;

要素を変数に入れて、そのプロパティを変更することは可能です。

投稿2025/08/29 02:31

int32_t

総合スコア21996

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

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

mosamosadon88

2025/08/29 03:25

ご回答ありがとうございます。 「左辺の変数を右辺と同じように扱えるようにする」ではない  というのがとてもしっくりくるものでした。単純に同じものぐらいに考えていましたが、今後の勉強も深まりそうです。
yambejp

2025/08/29 03:32

>単純に同じものぐらいに考えていました オブジェクトの場合左辺を右辺と同じものにすることになるので注意してください const a=b=new Object a.x=1 b.x=2 console.log(a.x) //2 となりaとbは完全に同値です
mosamosadon88

2025/08/29 03:39

>オブジェクトの場合左辺を右辺と同じものにすることになるの なるほど、オブジェクトの場合は同じものとして認識になるということですね。 単純なものではなく状況によって変わるので難しいですね。
yambejp

2025/08/29 07:44

>単純なものではなく状況によって変わるので難しい オブジェクトかプリミティブかの違いなので私が回答したとおりです。 たとえばこんな感じの処理も可能です(なにも役には立ちませんが) const a=new Object; a.a=a; a.b=100; a.a.a.b--; console.log(a.a.a.a.a.a.a.a.a.b);//99
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問