前提条件・したいこと
- index.htmlからアコーディオンメニューを【メイン・サブ・リスト】の順で開きます。
- リストのリンクをクリックして、画面に遷移します。
- 遷移したリストから、アコーディオンメニューのindex.htmlに戻ります。
-
- で開いた特定のアコーディオンメニューがリストまで開かれています。
例
・初期状態
main menu 1
main menu 2
・初期状態からsub list 1-1-1を開いて、戻った時の状態
main menu 1
sub menu 1-1
sub list 1-1-1 <- 初期状態の時に、ここを開いた
sub list 1-1-2
sub menu 2-1
main menu 2
問題点
前提条件4. にて、前提条件1. で開いたアコーディオンリストが閉じた状態になっています。
ソース
index.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 9 <title>test</title> 10</head> 11 12<body> 13 <ul class="accordionBox"> 14 <li> 15 <h3>main menu 1</h3> 16 <ul class="subMenu"> 17 <li> 18 <h4>sub menu 1-1</h4> 19 <ul class="subList"> 20 <li><a href="./sub_list_1-1-1.html">sub list 1-1-1</a></li> 21 <li><a href="./sub_list_1-1-2.html">sub list 1-1-2</a></li> 22 </ul> 23 </li> 24 <li> 25 <h4>sub menu 1-2</h4> 26 <ul class="subList"> 27 <li><a href="./sub_list_1-2-1.html">sub list 1-2-1</a></li> 28 <li><a href="./sub_list_1-2-2.html">sub list 1-2-2</a></li> 29 </ul> 30 </li> 31 </ul><!-- subMenu --> 32 </li> 33 <li> 34 <h3>main menu 2</h3> 35 <ul class="subMenu right"> 36 <li> 37 <h4>sub menu 2-1</h4> 38 <ul class="subList"> 39 <li><a href="./sub_list_2-1-1.html">sub list 2-1-1 </a></li> 40 <li><a href="./sub_list_2-2-1.html">sub list 2-1-2</a></li> 41 </ul> 42 </li> 43 <li> 44 <h4>sub menu 2-2</h4> 45 <ul class="subList"> 46 <li><a href="./sub_list_2-2-1.html">sub menu 2-2-1</a></li> 47 <li><a href="./sub_list_2-2-2.html">sub menu 2-2-2</a></li> 48 </ul> 49 </li> 50 </ul><!-- subMenu --> 51 </li> 52 </ul><!-- accordionBox --> 53</body> 54</html>
sub_list_1-1-1.html ~ sub_list_2_2_2.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>sub_list_1-1-1</title> 8</head> 9<body> 10 sub_list_1-1-1<br> 11 <a href="index.html">戻る</a> 12</body> 13</html>
javascript
1$(function() { 2 $("ul.subMenu").hide(); 3 $("ul.subList").hide(); 4 5 // let hash = location.hash; 6 // $('#' + hash).next("ul.accordionBox").addClass('open'); 7 // $('#' + hash).next("ul.subMenu").addClass('open'); 8 // $('#' + hash).next("ul.subList").addClass('open'); 9 // $('ul.subList:not(.open)').hide(); 10 11 $("ul.accordionBox h3").click(function() { 12 $(this).next("ul.subMenu").slideToggle('fast'); 13 $("ul.subMenu").not($(this).next("ul.subMenu")).slideUp(); 14 $("ul.subList").not($(this).next("ul.subList")).slideUp(); 15 16 }); 17 18 $("ul.subMenu h4").click(function() { 19 $(this).next("ul.subList").slideToggle('fast'); 20 $("ul.subList").not($(this).next("ul.subList")).slideUp(); 21 22 }); 23});
試してみたこと
特定のリストを開いた状態にするには、location.hashを使ったらよいと書かれていました。
なので、上記のjavascriptのコメントになっている部分でhashを使ってみました。
ですが、メニューが全く開かない状態になりました。
最後に
流れ的には、下記の順番のような内容が分かりません
- 一度、アコーディオンメニューで開いたリンクをクリックして、開いた場所を記憶する
- リンク先のページ(例:sub_list_1-1-1.html)からアコーディオンメニュー(index.html)に戻る
- 1.で記憶した場所のアコーディオンメニューがリストまで開かれている。
また、PHPのPOSTを用いて、アコーディオンリストの特定の場所を開いた方がいいのかわかりません。
皆様方からご助言を頂ければと存じます。
お手数ですが、宜しくお願い致します。
追記(2021/4/9)
hentaiman様のご教授の元、下記プログラムのようにハッシュタグを入れてみました。
ソース(2021/4/9)
index.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 9 <title>test</title> 10</head> 11 12<body> 13 <ul class="accordionBox"> 14 <li> 15 <h3>main menu 1</h3> 16 <ul class="subMenu"> 17 <li> 18 <h4>sub menu 1-1</h4> 19 <ul class="subList"> 20 <li id="sub_list_1-1-1"><a href="./sub_list_1-1-1.html">sub list 1-1-1</a></li> 21 <li id="sub_list_1-1-2"><a href="./sub_list_1-1-2.html">sub list 1-1-2</a></li> 22 </ul> 23 </li> 24 <li> 25 <h4>sub menu 1-2</h4> 26 <ul class="subList"> 27 <li id="sub_list_1-2-1"><a href="./sub_list_1-2-1.html">sub list 1-2-1</a></li> 28 <li id="sub_list_1-2-2"><a href="./sub_list_1-2-2.html">sub list 1-2-2</a></li> 29 </ul> 30 </li> 31 </ul><!-- subMenu --> 32 </li> 33 <li> 34 <h3>main menu 2</h3> 35 <ul class="subMenu right"> 36 <li> 37 <h4>sub menu 2-1</h4> 38 <ul class="subList"> 39 <li id="sub_list_2-1-1"><a href="./sub_list_2-1-1.html">sub list 2-1-1 </a></li> 40 <li id="sub_list_2-1-2"><a href="./sub_list_2-2-1.html">sub list 2-1-2</a></li> 41 </ul> 42 </li> 43 <li> 44 <h4>sub menu 2-2</h4> 45 <ul class="subList"> 46 <li id="sub_list_2-2-1"><a href="./sub_list_2-2-1.html">sub menu 2-2-1</a></li> 47 <li id="sub_list_2-2-2"><a href="./sub_list_2-2-2.html">sub menu 2-2-2</a></li> 48 </ul> 49 </li> 50 </ul><!-- subMenu --> 51 </li> 52 </ul><!-- accordionBox --> 53</body> 54</html>
sub_list_1-1-1.html ~ sub_list_2-2-2.html
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>sub_list_1-1-1</title> 8</head> 9<body> 10 sub_list_1-1-1<br> 11 <a href="index.html#sub_list_1-1-1">戻る</a> 12</body> 13</html>
javascript
1$(function() { 2 $("ul.subMenu").hide(); 3 $("ul.subList").hide(); 4 5 let hash = location.hash; 6 $(hash).next("ul.accordionBox").addClass('open'); 7 $(hash).next("ul.subMenu").addClass('open'); 8 $(hash).next("ul.subList").addClass('open'); 9 $('ul.subList:not(.open)').hide(); 10 11 console.log("hash_is:" + hash); 12 13 $("ul.accordionBox h3").click(function() { 14 $(this).next("ul.subMenu").slideToggle('fast'); 15 $("ul.subMenu").not($(this).next("ul.subMenu")).slideUp(); 16 $("ul.subList").not($(this).next("ul.subList")).slideUp(); 17 18 }); 19 20 $("ul.subMenu h4").click(function() { 21 $(this).next("ul.subList").slideToggle('fast'); 22 $("ul.subList").not($(this).next("ul.subList")).slideUp(); 23 24 }); 25});
できなかったこと
hashを指定しても、javascriptの下記のソースのところが悪いのか、うまく開けませんでした。
javascript
1 let hash = location.hash; 2 $(hash).next("ul.accordionBox").addClass('open'); 3 $(hash).next("ul.subMenu").addClass('open'); 4 $(hash).next("ul.subList").addClass('open'); 5 $('ul.subList:not(.open)').hide();
ハッシュを入れて、アコーディオンメニューを開いた状態にするために、どうすればよいか、
引き続きご教授いただけたらと存じます。
回答1件
あなたの回答
tips
プレビュー