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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

1回答

864閲覧

別ページからアンカーリンクで、アコーディオンを開きたい。

WorkUE

総合スコア7

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2020/02/07 05:15

前提・実現したいこと

通常のアコーディオンを以下のように作ったのですが、
タイトル通り、別ページからアンカーリンクで遷移して開くようにしたいです。

当方、JS初心者の為、なかなかうまくいかず。。。

参考サイト
https://elecre.net/2019/01/11/open-specified-element-of-accordion/

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

エラーメッセージ

該当のソースコード

<html> <head> <meta charset="utf-8"> <title>無題ドキュメント</title> <style> .ac-btn{ background: #333; color: #fff; padding: 5px 10px; } .ac-body p{ background: #ccc; padding: 50px 10px; } </style> </head> <body> <!--page1.html--> <a href="page2.html#num01">アコーディオン1へ</a> <a href="page2.html#num02">アコーディオン2へ</a> <a href="page2.html#num03">アコーディオン3へ</a> <!--page2.html--> <div id="num01"> <div class="ac-box"> <div class="ac-btn -more"> <p class="text">開く</p> </div> <div class="ac-body"> <p>アコーディオンの中身1。アコーディオンの中身1。アコーディオンの中身1。</p> </div> </div> </div> <div id="num02"> <div class="ac-box"> <div class="ac-btn -more"> <p class="text">開く</p> </div> <div class="ac-body"> <p>アコーディオンの中身2。アコーディオンの中身2。アコーディオンの中身2。</p> </div> </div> </div> <div id="num03"> <div class="ac-box"> <div class="ac-btn -more"> <p class="text">開く</p> </div> <div class="ac-body"> <p>アコーディオンの中身3。アコーディオンの中身3。アコーディオンの中身3。</p> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script> $(function(){ var acBtn = $('body').find('.ac-btn'); var acArray = []; for (var i = 0; i < acBtn.length; i++) { acArray.push("ga_btn_" + i); } $(".ac-btn").each(function(i){ $(this).children(".text").addClass(acArray[i]); }); $('.ac-btn').next(".ac-body").hide(); $('.ac-btn').on("click",function () { var acIndex = $('.ac-btn').index(this); if ($(this).next(".ac-body").is(':hidden')) { $(this).next(".ac-body").slideDown(); $(this).addClass('-open'); $(this).children(".text").removeClass(acArray[acIndex]); if($(this).hasClass('-more')) { $(this).children(".text").text('閉じる'); } } else { $(this).next(".ac-body").slideUp(); $(this).removeClass('-open'); $(this).children(".text").addClass(acArray[acIndex]); if($(this).hasClass('-more')) { $(this).children(".text").text('開く'); var position = $(this).parent(".ac-box").offset().top; $("html, body").animate({scrollTop:position}, 300, "swing"); } } }); }); </script> </body> </html>

試したこと

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

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

ざっくりこんな感じでどうでしょう?

投稿2020/02/07 05:32

yambejp

総合スコア114779

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

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

yambejp

2020/02/07 05:33

<style> .ac-btn{ background: #333; color: #fff; padding: 5px 10px; } .ac-body p{ background: #ccc; padding: 50px 10px; display:none; } .ac-body p.active{ display:block; } </style>
yambejp

2020/02/07 05:33

<script> $(function(){ $('.ac-btn').on('click',function(){ $(this).find('.text').text($(this).find('.text').text()=="開く"?"閉じる":"開く"); $(this).next('.ac-body').find('p').toggleClass('active'); $('.ac-btn .text').not($(this).find('.text')).text("開く"); $('.ac-body').not($(this).next('.ac-body')).find('p').removeClass('active'); }); $(location.hash).find('.ac-btn').trigger('click'); }); </script>
yambejp

2020/02/07 05:34

※ただしリロードするとhashが元のままなので呼び出された状態に もどっちゃいますけど
WorkUE

2020/02/07 07:12

ありがとうございます!できました! ただ、ページ内アンカーリンクの場合でも開くようにしたいと思っています。 説明欄にちゃんと書いておけばよかったです、すみません。。。
yambejp

2020/02/07 07:49

>ページ内アンカーリンク $(function(){ $('.ac-btn').on('click',function(){ $(this).find('.text').text($(this).find('.text').text()=="開く"?"閉じる":"開く"); $(this).next('.ac-body').find('p').toggleClass('active'); $('.ac-btn .text').not($(this).find('.text')).text("開く"); $('.ac-body').not($(this).next('.ac-body')).find('p').removeClass('active'); }); $(location.hash).find('.ac-btn').trigger('click'); }); $(window).on('popstate',function(){ $(location.hash).find('.ac-btn').trigger('click'); });
WorkUE

2020/02/07 12:40

できました! ご丁寧にあがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問