前提・実現したいこと
アコーディオンメニューを開くためにクリックした場合に一番上に持ってきたい
発生している問題・エラーメッセージ
アコーディオンの何を一番上に持ってくるのかそもそもわからない
今回のコードであれば要素を一番上に持ってくる?それとも内容ごと書き換える?
HTML
1<div class="accbox"> 2 <!--ラベル1--> 3 <label for="label1">クリックして表示1</label> 4 <input type="checkbox" id="label1" class="cssacc" /> 5 <div class="accshow"> 6 <!--ここに隠す中身--> 7 <p> 8 こんにちは1 9 </p> 10 </div> 11 <!--//ラベル1--> 12 <!--ラベル2--> 13 <label for="label2">クリックして表示2</label> 14 <input type="checkbox" id="label2" class="cssacc" /> 15 <div class="accshow"> 16 <!--ここに隠す中身--> 17 <p> 18 こんにちは2 19 </p> 20 </div> 21 <!--//ラベル2--> 22 <!--ラベル3--> 23 <label for="label3">クリックして表示3</label> 24 <input type="checkbox" id="label3" class="cssacc" /> 25 <div class="accshow"> 26 <!--ここに隠す中身--> 27 <p> 28 こんにちは3 29 </p> 30 </div> 31 <!--//ラベル3--> 32 <!--ラベル4--> 33 <label for="label4">クリックして表示4</label> 34 <input type="checkbox" id="label4" class="cssacc" /> 35 <div class="accshow"> 36 <!--ここに隠す中身--> 37 <p> 38 こんにちは4 39 </p> 40 </div> 41 <!--//ラベル4--> 42</div><!--//.accbox--> 43 <script> 44 var hash = location.hash; 45 if (hash === "#num1") { 46 var element = document.getElementById("label1"); 47 element.checked = true; 48 } else if (hash === "#num2") { 49 var element = document.getElementById("label2"); 50 element.checked = true; 51 } else if(hash === "#num3") { 52 var element = document.getElementById("label3"); 53 element.checked = true; 54 } 55 else if(hash === "#num4") { 56 var element = document.getElementById("label4"); 57 element.checked = true; 58 } 59 </script> 60<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 61<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 62<script> 63$(function() { 64 // テーブルの行の並び替え 65 $('#num1').sortable({ 66 opacity: 0.5, 67 placeholder: "ph1", 68 }); 69 // リストの行の並び替え 70 $('#num2').sortable({ 71 cursor: "move", 72 opacity: 0.7, 73 placeholder: "ph1", 74 }); 75}); 76</script> 77
CSS
1/*ボックス全体*/ 2.accbox { 3 margin: 2em 0; 4 padding: 0; 5 max-width: 400px;/*最大幅*/ 6} 7 8/*ラベル*/ 9.accbox label { 10 display: block; 11 margin: 1.5px 0; 12 padding : 11px 12px; 13 color :#2f8fcf; 14 font-weight: bold; 15 background :#a4cbf3; 16 cursor :pointer; 17 transition: all 0.5s; 18} 19 20/*ラベルホバー時*/ 21.accbox label:hover { 22 background :#85baef; 23} 24 25/*チェックは隠す*/ 26.accbox input { 27 display: none; 28} 29 30/*中身を非表示にしておく*/ 31.accbox .accshow { 32 height: 0; 33 padding: 0; 34 overflow: hidden; 35 opacity: 0; 36 transition: 0.8s; 37} 38 39/*クリックで中身表示*/ 40.cssacc:checked + .accshow { 41 height: auto; 42 padding: 5px; 43 background: #eaeaea; 44 opacity: 1; 45}
試したこと
この記述だとcheckboxを使ってチェックされたときにaccをshowしているということはわかりました。
さらに、別のページから飛んできたときに、指定されたアコーディオンを開くように改造もしています。
(方法としてはhttp//×××.html#num1)
のようにURLの語尾にID名を付けるという単純なものです。
これのおかげで要素を開くための仕組みを理解しました。
その後ドラッグして順番を変えるコードを読んで同じようにchecked + .accshowの部分に順番を変えるプログラムを書きました。
しかしどうやってもうまくいきません。
ちなみに参考にしたアコーディオンをそのまま張り付けていますが実際は中身を変えています。
ただPタグの中を変更しているだけなので特に影響がないと判断しています。
アコーディオン、HTML、CSSをあまり扱ったことがなく間違った知識等あると思いますがご了承ください。
参考サイトのリンクを張り付けておきます。
アコーディオン
https://saruwakakun.com/html-css/reference/accordion
順番を入れ替える
https://itsakura.com/jquery-ui-sortable
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー