実現したいこと
HTML,JavaScriptで画像をクリック時に文字を切り替えたい
発生している問題・分からないこと
画像をクリックすると別のhtmlに飛ぶ機能はできました。
飛んだ先のHTMLで画像ごとに別の販売情報を表示する機能を実装したいのです。
(例)4種類の販売品があったとして、4種類の品の画像を用意してグリッド上に並べてあるのを想像してください。個々の要素には画像、商品の名前、大きさ、どんなものかの説明などの情報が含まれます。1番目の画像をクリックしたらその詳細を記載したHTMLに飛ぶようにしたいのですがどのように実装すれば良いか分からない状態です。HTMLを4種類用意すればできないことはないですがもっと単純な実装方法があればその構造を知りたいのです。イメージとしてはid毎に対応する情報に書き換える感じです。初心者なので分かりやすく説明してくださるとありがたいです。また、以下のプログラムは必要最小限のコードです。
該当のソースコード
index.html
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>STORN SHOP</title> 6 </head> 7 <body> 8 <header> 9 <h1>STORN SHOP</h1> 10 </header> 11 <main> 12 <div class="container"> 13 <div class="element item1"> 14 <img src="./img/item1.png"> 15 <p>アイテム1です。</p> 16 </div> 17 <div class="element item2"> 18 <img src="./img/item2.png"> 19 <p>アイテム2です。</p> 20 </div> 21 </div> 22 </main> 23 <footer> 24 </footer> 25 26 <script> 27 const element = document.getElementsByClassName('element'); 28 29 for (let i = 0; i < element.length; i++) { 30 element[i].addEventListener('click', function() { 31 window.location.href = './item.html'; 32 }); 33 } 34 </script> 35 </body> 36</html>
item.html
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>STORN ITEM</title> 6 <link rel="stylesheet" href="./itemstyle.css"> 7 <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> 8 </head> 9 <body> 10 <p id="text">Item1の詳細ページです。</p> 11 12 <script> 13 const el = document.querySelector("#text"); 14 15 // 別のHTMLファイル(example.html)を読み込む 16 fetch('index.html') 17 .then(response => response.text()) 18 .then(htmlText => { 19 // 読み込んだHTMLをDOMとして解析 20 const parser = new DOMParser(); 21 const doc = parser.parseFromString(htmlText, 'text/html'); 22 23 // もしクリックされたボタンが1つ目のアイテムだった場合 24 25 26 // 別のHTML内の特定のクラス名(例: .target-class)を取得 27 const targetElement1 = doc.querySelector('.item1'); 28 const targetElement2 = doc.querySelector('.item2'); 29 30 if(targetElement1 == doc.querySelector('.item1')) 31 { 32 //jQuery利用 33 $('#text').html('Item1の詳細ページです。'); 34 } 35 else if(targetElement2 == doc.querySelector('.item2')) 36 { 37 //jQuery利用 38 $('#text').html('Item2の詳細ページです。'); 39 } 40 }); 41 42 </script> 43 </body> 44</html>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
「HTMLを操作する言語」と検索したところJavaScript言語でHTML表示の操作ができることがわかりました。ソースコードを自分なりに変更しましたが表示を切り替えることが出来ませんでした。
結果は以下です。
一つ目の画像をクリックすると、ItemのHTMLに飛び「Item1の詳細ページです。」
二つ目の画像をクリックすると、ItemのHTMLに飛び「Item1の詳細ページです。」
補足
環境はローカル環境でVSCodeを使用しています。
HTML,JavaScriptを使用して実務を想定したポートフォリオ作成をしています。
回答2件
あなたの回答
tips
プレビュー