実現させたいこと
CSSの疑似要素の現在の状態(今、:beforeなのか:afterなのか)を取得したいです。(その値によってjQueryの処理を分岐させたい)
現在の状況
CSSとjQueryで実装したアコーディオンメニュー(FAQ)があり、before:では「+」ボタン、after:では「-」ボタンを表示させています。「+」がクリックされると「-」ボタンに変わり付随するメニューが表示されます。「-」がクリックされると「+」ボタンに変わり付随するメニューを隠します。
このアコーディオンメニューに対して、「全て表示」「全て非表示」というボタンを設置し、すべての付随するメニューを表示させたり、すべてを隠したりしたいです。
「全て非表示」はページリロードで対応しているので希望通りの動作になります。「全て表示」では、クリックイベントを発生させて、「+」を「-」に反転させています。そのため、再度クリックすると、すべて「-」が「+」に変わったり、もともとユーザーの操作で「-」になっているものは「+」に変わったりします。
そのため、先に現在の状態を取得し(:before「+」なのか:after「-」なのか)、「+」の時のみjQueryのクリックイベントによる処理をさせたいです。疑似要素の現在の状態を取得する方法はありますか。ない場合、どのような方法で実装できるかアドバイスをいただけないでしょうか。
コード
html
1<html lang="ja"> 2<head> 3<meta charset="utf-8"> 4<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'></script> 5</head> 6<body> 7<div class="container"> 8 <div class="switch"> 9 <input type="button" class="list_display" value="全て表示"></input> 10 <input type="button" class="list_hide" value="全て非表示"></input> 11 </div> 12 13 <div class="toggle_title"> 14 <div>果物<span class="toggle_btn">開く</span></div> 15 </div> 16 <div class="box_inquiry"> 17 <ul class="target"> 18 <li class="toggle_title2"><p>Q.りんご</p><span class="toggle_btn_w">開く</span></li> 19 <li class="answer"><p>Apple</p></li> 20 </ul> 21 <ul class="target"> 22 <li class="toggle_title2"><p>Q.みかん</p><span class="toggle_btn_w">開く</span></li> 23 <li class="answer"><p>Orange</p></li> 24 </ul> 25 <ul class="target"> 26 <li class="toggle_title2"><p>Q.メロン</p><span class="toggle_btn_w">開く</span></li> 27 <li class="answer"><p>Melon</p></li> 28 </ul> 29 </div> 30 31 32 <div class="toggle_title"> 33 <div>干支<span class="toggle_btn">開く</span></div> 34 </div> 35 <div class="box_inquiry"> 36 <ul class="target"> 37 <li class="toggle_title2"><p>Q.ねずみ</p><span class="toggle_btn_w">開く</span></li> 38 <li class="answer"><p>Mouse</p></li> 39 </ul> 40 <ul class="target"> 41 <li class="toggle_title2"><p>Q.うし</p><span class="toggle_btn_w">開く</span></li> 42 <li class="answer"><p>Cow</p></li> 43 </ul> 44 <ul class="target"> 45 <li class="toggle_title2"><p>Q.とら</p><span class="toggle_btn_w">開く</span></li> 46 <li class="answer"><p>Tiger</p></li> 47 </ul> 48 </div> 49 50 <div class="toggle_title"> 51 <div>教科<span class="toggle_btn">開く</span></div> 52 </div> 53 <div class="box_inquiry"> 54 <ul class="target"> 55 <li class="toggle_title2"><p>Q.英語</p><span class="toggle_btn_w">開く</span></li> 56 <li class="answer"><p>English</p></li> 57 </ul> 58 <ul class="target"> 59 <li class="toggle_title2"><p>Q.数学</p><span class="toggle_btn_w">開く</span></li> 60 <li class="answer"><p>Mathmatics</p></li> 61 </ul> 62 <ul class="target"> 63 <li class="toggle_title2"><p>Q.国語</p><span class="toggle_btn_w">開く</span></li> 64 <li class="answer"><p>Japanese</p></li> 65 </ul> 66 </div> 67</div> 68 69</body> 70</html>
css
1ul { 2 list-style: none; 3} 4.answer { 5 width: 90%; 6 display: none; 7 background: #f2f2f2; 8 margin-left: 1em; 9 padding: 10px; 10 margin-bottom: 10px; 11} 12 13div.{ 14 cursor: pointer; 15 margin-bottom: 5px; 16} 17p.table_title:hover { 18 text-decoration: none; 19} 20div.box_inquiry { 21 display: none; 22} 23 24.toggle_title, .toggle_title2 { 25 position: relative; 26 cursor: pointer; 27 height: 30px; 28} 29.toggle_title:hover,.toggle_title2:hover { 30 text-decoration: none; 31} 32 33.toggle_btn, .toggle_btn_w { 34 position: absolute; 35 top: 50%; 36 right: 10px; 37 transform: translateY(-50%); 38 background: #504946; 39 display: block; 40 width: 24px; 41 height: 24px; 42 text-indent: 100%; 43 white-space: nowrap; 44 overflow: hidden; 45 border-radius: 50%; 46} 47.toggle_btn_w { 48 border: solid 0.5px #504946; 49 background: #fff; 50 width: 20px; 51 height: 20px; 52} 53 54.toggle_btn:before, .toggle_btn:after, 55.toggle_btn_w:before, .toggle_btn_w:after { 56 display: block; 57 content: ''; 58 background-color: #fff; 59 position: absolute; 60 width: 10px; 61 height: 2px; 62 top: 50%; 63 left: 50%; 64 transform: translate(-50%, -50%); 65} 66.toggle_btn_w:before, .toggle_btn_w:after { 67 background-color: #504946; 68} 69.toggle_btn:before, .toggle_btn_w:before { 70 width: 2px; 71 height: 10px; 72} 73 74.toggle_title.selected .toggle_btn:before { 75 content: normal; 76} 77.toggle_title.selected .toggle_btn_w:before { 78 content: normal; 79} 80.toggle_title2.selected .toggle_btn:before { 81 content: normal; 82} 83.toggle_title2.selected .toggle_btn_w:before { 84 content: normal; 85} 86.container { 87 width: 500px; 88 padding: 15px 0px; 89} 90.switch { 91 padding: 50px 0; 92}
JavaScript
1$(function(){ 2 $('.toggle_title').click(function(){ 3 $(this).toggleClass('selected'); 4 $(this).next().slideToggle(); 5 }); 6}); 7$(function(){ 8 $('.toggle_title2').click(function(){ 9 $(this).toggleClass('selected'); 10 $(this).next().slideToggle(); 11 }); 12}); 13$(document).ready(function(){ 14 $('.question').on("click", function() { 15 $(this).next().slideToggle(200); 16 }); 17}); 18 19$(function(){ 20 $(document).on('click', '.list_display', function(){ 21 $('.toggle_title').click(); 22 }); 23}); 24 25$(function(){ 26 $(document).on('click', '.list_hide', function(){ 27 location.reload(); 28 }); 29});
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/10 08:31
2021/01/11 08:13