※ ChatGPTを利用し、要約された質問です(原文:jQueryで2段式アコーディオンメニュー)
jQueryで2段式アコーディオンメニューを作成する方法
このQ&Aのポイント
jQueryを使用して、2段式のアコーディオンメニューを作成する方法について教えてください。
参考にしたサイトでは、ポンプ型のアコーディオンメニューを使用していますが、このデモの下側にある2段アコーディオンを実装したいです。
現在作成中のHTMLでは、ul要素のclassを指定して階層を設定していますが、うまく動作しません。解決方法を教えてください。
いつも参考にさせて頂いております。
あるサイト様(http://triplexxx.jp/archives/150)を参考にjQueryで2段式のアコーディオンメニューを作成していましたが、何分初心者なもので早々に行き詰まってしまいました。
理想はこちらのサイト様(http://html-five.jp/pc/demo/002/)にあるデモの下側、『2段アコーディオン』をこちら(http://html-five.jp/demo/002/index2.html)の『ポンプ型アコーディオン』ような動きにしたいと思っております。
スクリプト自体を入れ子にしたりしてみましたが根本的な部分がダメなようでうまくいきませんでした。
何卒ご教授いただけますようお願いします。
[参考にしたjQuery(1段までは問題なく動きます)]
script type="text/javascript">
var j$ = jQuery;
j$(function(){
j$(".ac_parent").each(function(){
j$("li > a").each(function(index){
var $this = j$(this);
if(index > 0) $this.next().hide();
$this.click(function(){
var params = {height:"toggle", opacity:"toggle"};
j$(this).next().animate(params).parent().siblings()
.children("ul:visible").animate(params);
return false;
});
});
});
});
</script>
[作成中のHTML]
<div>
<ul class="ac_parent">
<li><a href="#">1</a>
<ul class="ac_child">
<li><a href="#">11</a></li>
<ul class="ac_gchild">
<li><a href="#">111</a></li>
<li><a href="#">112</a></li>
<li><a href="#">113</a></li>
</ul>
<li><a href="#">12</a></li>
<ul class="ac_gchild">
<li><a href="#">121</a></li>
<li><a href="#">122</a></li>
<li><a href="#">123</a></li>
</ul>
</ul>
</li>
<li><a href="#">2</a>
<ul class="ac_child">
<li><a href="#">21</a></li>
<ul class="ac_gchild">
<li><a href="#">211</a></li>
<li><a href="#">212</a></li>
<li><a href="#">213</a></li>
</ul>
<li><a href="#">22</a></li>
<ul class="ac_gchild">
<li><a href="#">221</a></li>
<li><a href="#">222</a></li>
<li><a href="#">223</a></li>
</ul>
</ul>
</li>
<li><a href="#">3</a>
<ul class="ac_child">
<li><a href="#">31</a></li>
<ul class="ac_gchild">
<li><a href="#">311</a></li>
<li><a href="#">312</a></li>
<li><a href="#">313</a></li>
</ul>
<li><a href="#">32</a></li>
<ul class="ac_gchild">
<li><a href="#">321</a></li>
<li><a href="#">322</a></li>
<li><a href="#">323</a></li>
</ul>
</ul>
</li>
</ul>
</div>
お礼
fujillin様 この度は本当にありがとうございました。 実のところSQLやVBAを趣味程度ですが触っているものの、HTMLやCSS、JavaScriptは数日前に始めたばかりで何がなんだかさっぱりの状態でしたが、fujillinさんのアドバイスで希望通りの動作までもっていけたことに加え、おもしろさを色々と感じることができました。 まだまだ素人レベルですが頑張っていく元気が沸きました! また質問することもあるかと思いますが、お手隙の際には相手して頂ければと思います。 本当にありがとうございました。
補足
fujillin様 何度もありがとうございます! 頂いたコードを元に、『アニメーションの追加』と『クリックイベント時に既に開いているメニューを閉じる』処理を試行錯誤しながら自分なりに組み込み、ようやく希望の動作にもっていくことができました!(こんな時間になってしまいましたが・・・笑) [最終のコード] <script type="text/javascript"> $(function(){ $("ul", $("ul.ac_parent")).each(function(){ var $ul = $(this).hide(); $(this).prev("a").click(function(){ var params = {height:"toggle", opacity:"toggle"}; $(this).next().animate(params).parent().siblings() .children("ul:visible").animate(params).siblings(); return false; }); }); }); </script> これが良い書き方なのかどうか、実用性があるのかどうかはともかくとして後に参考になるかもしれませんので補足として最終形のコードを記載させて頂きます。