![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
私は今javascriptを独学で勉強をしていて、勉強した範囲内で自分で作成してみようと思いjavascriptのプログラムを
書いています。
やりたいこととしては
メイン画像があり、その下に三つボタンを作成し、
その三つのボタンのどれか一つにマウスを持っいくとメイン画像が切り替わるという
javascriptを作成しています。
またその三つのボタンにはそれぞれメイン画像が切り替わるようにイベントをだしています。
html側
<body>
<div id="image">
<img src="image/main-image.jpg" />
</div>
<div id="bottonbox">
<div id="botton1">
<img src="image/staff01.png" />
</div>
<div id="botton2">
<img src="image/staff01.png" />
</div>
<div id="botton3">
<img src="image/staff01.png" />
</div>
</body>
javascript
window.addEventListener('load',photo_change,false);
function photo_change(event){
var elem = document.getElementById('botton1');
elem.addEventListener('mouseover',botton1,false);
elem.document.getElementById('botton2');
elem.addEventListener('mouseover',botton2,false);
elem.document.getElementById('botton3');
elem.addEventListener('mouseover',botton3,false);
}
function botton1(event){
var img_change = document.getElementById('image');
img_change.removeChild(img_change.firstChild);
var img =document.createElement('img');
img.src = 'image/main-image2.png';
img_change.appendChild(img);
}
※botton2,3はsrc=画像名だけが違うだけで、botton1関数と同じの為、省略します。
これを実行すると、もともとあるメイン画像がremoveされず、下に新しい画像が表示されてしまいます。
ブレークポイントをつけてトレースしたのですが、どうやらimg_change.removeChild(img_change.firstChild);
でremoveされていないらしくなぜか二回目にremoveされます。
ですので、試しに
function botton1(event){
var img_change = document.getElementById('image');
//removeChild二回やってみる
img_change.removeChild(img_change.firstChild);
img_change.removeChild(img_change.firstChild);
var img =document.createElement('img');
img.src = 'image/main-image2.png';
img_change.appendChild(img);
}
こうするともともとあったメイン画像がremoveされ、botton1にマウスを載せた時に
表示させようとしていた画像がちゃんと表示されます。
ですが、なぜ一回のimg_change.removeChild(img_change.firstChild);では
メイン画像をremoveできないのでしょうか。
どなたかわかる方おしえていただけますでしょうか。
また、どこが悪いのか、など解説も付け加えていただけると幸いです。
No.1ベストアンサー
- 回答日時:
独学者のお仲間です。
>なぜ一回のimg_change.removeChild(img_change.firstChild);では
>メイン画像をremoveできないのでしょうか
div要素内の子要素はタグのある要素だけではなく、テキスト要素も子要素と見做されているからでしょう。
ご提示のソースではテキストらしきものは見えませんが、改行なども含めてテキストとされますので、firstChildがテキスト、secondChildが画像要素となっていると想像されます。
画像要素を指定してremoveすれば、ご期待の通りになるかと思いますが、この場合はdiv内を空にしてしまえばよいので、
while(img_change.firstChild) img_change.removeChild(img_change.firstchild);
のような方法でも解決できるかと思います。
しかし、もう少し考えてみると、今回の場合は画像の表示内容を変えるのが目的なので、要素自体を入替えなくとも画像のsrc属性を書換えれば足りるのではないかと思います。
var img_change = document.getElementById('image');
var img = img_change.getElementsByTagName("img")[0];
img.src = "○○.jpg";
みたいなことで。
さらに考えてみると、ご提示のコードだとボタンが増減する毎にスクリプトを何箇所か書換えなければならなくなりますが、この次には、数の影響を受けにくいスクリプトの書き方を考えてみるのもよろしいかもしれません。
それによって、個別のidを減らせるでしょうし、コード全体も短くなる可能性もあります。表示対象のURIだけは数の影響を受けますが、配列で定義するとか非表示でHTMLに記載しておくとか…
No.2
- 回答日時:
このような場合、どのブラウザで、どのバージョンで検証したのか記載しましょう。
そうでないと、正確な回答はえられません。
だいたいはNo1さんが説明していただきましたが、クロスブラウザの問題かもしれません。回答者が意識していない場合もありますので(特に質問者さんは意識していないようで)、まずその辺の基本的情報を記載しましょう。
これらの問題は、単にDOM操作だけの問題でもないので・・・
すみませんそうですよねブラウザによってちがいますものね。。
今後質問する際はそこも記載して行こうと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
lightboxのタイトル部分にリン...
-
【OpenCV】二値画像後、白の部...
-
JavaScriptで反映させているテ...
-
どこが間違えているのか分かり...
-
更新ごとに重複しない画像を5枚...
-
JavaScriptの記述方法
-
$(this)を変数に入れないと動作...
-
複数画像のランダム複数表示(...
-
OpenCV での画素値の比較について
-
外部javascriptの重複を防ぐには
-
nodejsの画像表示は特別なこと...
-
プログラムの上手な書き方は?
-
Accessible News Sliderついて
-
どの<li><a> が押されたか判別...
-
マウスオーバーのメニューについて
-
クリックで背景変更するタグ
-
「jQuery」アコーディオンメニ...
-
jqueryのsortableで一部ソート...
-
画像の表示位置
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
複数画像のランダム複数表示(...
-
Vb.net2005での画像の合成方法
-
画像が表示でnull; this.src
-
外部javascriptの重複を防ぐには
-
外部ファイルにしたら文字化け...
-
【OpenCV】二値画像後、白の部...
-
error LNK2019 未解決のシンボ...
-
こんにちは、javascriptにてボ...
-
条件分岐でキーが入力されてい...
-
ダイアログから画像ファイルは...
-
jqueryスライドショーをストッ...
-
onclickで画面が固まる・・・ら...
-
OpenCV での画素値の比較について
-
jsでサムネイルを拡大表示 複...
-
imgボタンにfocusの当て方
-
ラズパイでno module named zbar
-
HTMLからimgのsrcのみを正規表...
-
Javaの正規表現でimgタグのalt...
おすすめ情報