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

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

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

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

677閲覧

Javascriptで折り畳み式のメニューを作るには?

okok.jstart

総合スコア1

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

JavaScript

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/07/22 07:23

前提・実現したいこと

ある既存のホームページをつかって、コードは見ずに真似て作っています。
その中の折り畳みメニューの作成において、質問と回答という形で、質問を押せばその下に
回答が出てきて、その状態でもう一度質問を押せば、回答は非表示にされるという機能をつけようとしています。なお現時点では、回答には文章は打ち込まず、背景色にオレンジをつけています。

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

質問をクリックすれば回答が出てきて、その状態でまた質問をクリックすれば回答が非表示になるという段階まではたどり着きましたが、質問をクリックしたときにすべての質問に回答が付いてしまいます。実際には質問1をクリックしたなら、その質問1に対する回答のみが表示されるようにしたいです。

該当のソースコード

Javascript

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

HTML

1<section id="parent" class="freq"> 2 <h1 id="oque"></h1> 3 <div id="ask1" class="question"></div> 4 <div class="comeup"></div> 5 <div id="ask2" class="question"></div> 6 <div class="comeup"></div> 7 <div id="ask3" class="question"></div> 8 <div class="comeup"></div> 9 <div id="ask4" class="question"></div> 10 <div class="comeup"></div> 11 <div id="ask5" class="question"></div> 12 <div class="comeup"></div> 13 <div id="ask6" class="question"></div> 14 <div class="comeup"></div> 15 <div id="ask7" class="question"></div> 16 <div class="comeup"></div> 17 <div id="ask8" class="question"></div> 18 <div class="comeup"></div> 19 <div id="ask9" class="question"></div> 20 <div class="comeup"></div> 21 <div id="ask10" class="question"></div> 22 <div class="comeup"></div> 23 <div id="ask11" class="question"></div> 24 <div class="comeup"></div> 25 <div id="ask12" class="question"></div> 26 <div class="comeup"></div> 27 <div id="ask13" class="question"></div> 28 <div class="comeup"></div> 29 <div id="ask14" class="question"></div> 30 <div class="comeup"></div> 31 <div id="ask15" class="question"></div> 32 <div class="comeup"></div> 33 </section> 34 </div>

CSS

1 .freq { 2 text-align: center; 3 padding: 15px 0; 4 } 5 .question { 6 width: 900px; 7 text-align: left; 8 font-weight: bold; 9 font-size: 22px; 10 padding: 10px 0 10px 30px; 11 margin-bottom: 5px; 12 margin-left: auto; 13 margin-right: auto; 14 cursor: pointer; 15 border: 1px solid #efefef; 16 user-select: none; 17 position: relative; 18 } 19 20 .question::after { 21 width: 10px; 22 height: 10px; 23 content: ""; 24 position: absolute; 25 margin: 0; 26 border-top: 3px solid rgba(179, 179, 179, 0.8); 27 border-right: 3px solid rgba(179, 179, 179, 0.8); 28 -webkit-transform: rotate(135deg); 29 right: 25px; 30 top: 15px; 31 cursor: pointer; 32 } 33 34 .question:hover { 35 text-decoration: underline; 36 } 37 38 .appear { 39 width: 932px; 40 height: 100px; 41 border: 1px solid rgba(206, 206, 206, 0.1); 42 margin: 0 auto; 43 background: orange; 44 }

Javascript

1'use strict' 2 3{ 4 let initialState = false; 5 const oque = document.getElementById('oque'); 6 const questions = [...document.querySelectorAll('.question')]; 7 const asks = [ 8 'プログラミングスキルは必要ですか?', 9 '滞在中の宿泊先はどうなりますか?', 10 '参加費以上に稼げなかったらどうなりますか?', 11 '滞在中の食事はどうなりますか?', 12 '追加でかかる費用はありますか?', 13 '就職、転職はできますか?', 14 'フリーランスにならなければならないのですか?', 15 'ノマドワーカー的に世界を旅しながら働きたいです。可能ですか?', 16 '学ぶプログラミング言語は何ですか?', 17 '将来的にwebサービス、アプリ、メディアを作りたいです。', 18 '次回開催の予定はありますか?', 19 '海外に出るのが初めてで不安です。', 20 'タイ語、英語が一切話せません。参加可能でしょうか?', 21 '治安はどうですか?', 22 'パソコンは必要ですか?', 23 ]; 24 const parent = document.getElementById('parent'); 25 26 oque.textContent = 'よくある質問'; 27 28 for(let i = 0; i < questions.length; i++) { 29 questions[i].textContent = asks[i]; 30 } 31 32 const comeups = [...document.querySelectorAll('.comeup')]; 33 34 if (initialState == false) { 35 questions.forEach(question => { 36 question.addEventListener('click', () => { 37 comeups.forEach(comeup => { 38 comeup.classList.toggle('appear'); 39 }); 40 }); 41 }); 42 } 43} 44

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

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

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

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

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

guest

回答2

0

divの表示・非表示の切り替えならチェックボックでやればよいのでは?

HTML

1<style> 2.cb{display:none} 3.comeup{display:none} 4.cb:checked + .comeup{display:initial} 5</style> 6<section id="parent" class="freq"> 7<h1 id="oque">h1</h1> 8<label><div class="question">q1</div> 9<input type="checkbox" class="cb"><div class="comeup">a1</div></label> 10<label><div id="ask2" class="question">q2</div> 11<input type="checkbox" class="cb"><div class="comeup">a2</div></label> 12<label><div id="ask3" class="question">q3</div> 13<input type="checkbox" class="cb"><div class="comeup">a3</div></label> 14</section>

投稿2020/07/22 14:31

yambejp

総合スコア114810

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

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

0

ベストアンサー

こんにちは。

たとえば、このような方法はいかがですか?

js

1 if (initialState == false) { 2 questions.forEach(question => { 3 question.addEventListener('click', e => { 4 e.target.nextElementSibling.classList.toggle('appear'); 5 }); 6 }); 7 }

参考:
NonDocumentTypeChildNode.nextElementSibling - Web APIs | MDN

投稿2020/07/22 08:15

Lhankor_Mhy

総合スコア36078

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問