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

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

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

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

Q&A

解決済

1回答

898閲覧

jQuery アコーディオンメニュー縦一覧の一部非表示の方法

gmgmynt

総合スコア3

jQuery

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

0グッド

0クリップ

投稿2021/09/20 05:07

前提・実現したいこと

jQueryを使用してアコーディオンメニューでのFAQセクションを作っています。
4行目以下を初期段階で非表示にし、「他の質問を見る」ボタンを押すことで4,5行目を非表示→表示されるようにしたいのですがうまくいきません。

該当のソースコード

【HTML】
<div class="txt">

<input type="checkbox" id="faq1" class="faq_hidden"> <label for="faq1" class="faq_open">質問1</label> <label for="faq1" class="faq_close"> <p><strong>A. </strong>回答1</p> </label> <input type="checkbox" id="faq2" class="faq_hidden"> <label for="faq2" class="faq_open">質問2</label> <label for="faq2" class="faq_close"> <p><strong>A. </strong>回答2</p> </label> <input type="checkbox" id="faq3" class="faq_hidden"> <label for="faq3" class="faq_open">質問3</label> <label for="faq3" class="faq_close"> <p><strong>A. </strong>回答3</p> </label> <input type="checkbox" id="faq4" class="faq_hidden"> <label for="faq4" class="faq_open">質問4</label> <label for="faq4" class="faq_close"> <p><strong>A. </strong>回答4</p> </label> <input type="checkbox" id="faq5" class="faq_hidden"> <label for="faq5" class="faq_open">質問5</label> <label for="faq5" class="faq_close"> <p><strong>A. </strong>回答5</p> </label> <p class="more">他の質問を見る</p> </div>

【CSS】(必要そうな部分のみ抜粋)

.faq_hidden {
display: none;
}

.faq_open {
display: block;

.faq_close {
display: block;
height: 0;
overflow: hidden;
padding: 0;
opacity: 0;
}

.faq_hidden:checked + .faq_open + .faq_close {
height: auto;
opacity: 1;
padding: 10px;
}

試したこと

ネット上で見つけた以下記述を参考に試みましたが、参考はリストアイテムに適用だったので勝手が違い躓きました。
$(function () {
let hideFaq = '.faq_hidden li:nth-of-type(n+4)';
$(hideFaq).hide();
$('.moreBtn').click(function () {
$(hideFaq).toggle();
if ($(hideFaq).css('display') == 'none') {
$('.moreBtn').text('他の質問を見る');
} else {
$('.moreBtn').text('CLOSE');
}
return false;
});
});

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

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

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

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

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

guest

回答1

0

ベストアンサー

jQueryのセレクタが間違ってますね。
CSSセレクタについて勉強しなおしましょう。

js

1$(function () { 2 let hideFaq = '.txt > label:nth-of-type(n+5)'; 3 $(hideFaq).hide(); 4 $('.more').click(function () { 5 $(hideFaq).toggle(); 6 if ($(hideFaq).css('display') == 'none') { 7 $('.more').text('他の質問を見る'); 8 } else { 9 $('.more').text('CLOSE'); 10 } 11 return false; 12 }); 13});

追記

toggleでアニメーションさせる場合、.toggle(時間, コールバック関数) とすると、アニメーション終了後にコールバック関数が実行される。

js

1$(function () { 2 let hideFaq = '.txt > label:nth-of-type(n+5)'; 3 $(hideFaq).hide(); 4 $('.more').click(function () { 5 $(hideFaq).toggle(1000, function() { 6 if ($(hideFaq).css('display') == 'none') { 7 $('.more').text('他の質問を見る'); 8 } else { 9 $('.more').text('CLOSE'); 10 } 11 return false; 12 }); 13 }); 14});

投稿2021/09/20 06:08

編集2021/09/20 12:47
hatena19

総合スコア33795

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

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

gmgmynt

2021/09/20 11:13

jQueryの部分は参考にしたものを貼っただけなのでセレクタは触っていませんでしたが、 自分で記述していたものとは一部違ったので復習が必要な箇所ではありますね。 動きを滑らかにするために.toggle()に数値を入れると(fadeToggleも同様)、開いて閉じた時のボタン文字が「CLOSE」から戻らない状態になり未だ格闘中ですが、大方希望していた動作になっているので大変助かりました。ありがとうございます。
hatena19

2021/09/20 12:49

アニメーション後に 'display' の判断をする必要があります。 サンプルコードを回答に追記しておきました。
gmgmynt

2021/09/21 10:15

なるほど。処理の順番がポイントになるんですね。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問