前提・実現したいこと
いつもお世話になっております。
3階層のドロップダウンを作成中です。
WPのプラグインを使用しているため、htmlの編集はできません。
プルダウン部分CSSで、position:absoluteを指定しています。
そのため、次に続く要素が重なってしまいます。
この重なりを解消し、ドロップダウンで開いた高さ分、次要素を下にずらしたいと考えています。
そこで考えたのが、jQueryで開いたドロップダウンの高さを取得し、次要素と同じ階層に位置する親要素に動的にpaddingを与えるという案です。
現状
成功:1階層目をクリック→ドロップダウン展開、ドロップダウンの高さに合わせてpadding付与→1階層目を再クリック、ドロップダウンが閉じると共に付与されたpaddingも消去
失敗・検証中:2階層目をクリック→ドロップダウン展開、ドロップダウンの高さが取得できない→2階層目を再クリック、ドロップダウンが閉じる→1階層目をクリック、2階層目クリック時に取得失敗したであろう謎のpaddingが残ってしまい不自然な余白ができてしまう
該当のソースコード
html
<ul> <li class="genre"> <h4>ジャンル</h4> <ul> <li>...</li> <li>...</li> </ul> </li><!-- .genre --> <li class="area"> <h4>エリア</h4> <ul> <h5>関東</h5><!-- h5クリックでdiv.innerが開く --> <div class="inner"> <li class="level-0"><!-- li.level-0クリックでul.childrenが開く --> <input type="checkbox" value="saitama" id="saitama"> <label for="saitama">埼玉県</label> <ul class="children"> <li class="level-1"> <input type="checkbox" value="saitamasi" id="saitamasi"> <label for="saitamasi">さいたま市</label> </li> <li>...</li> <li>...</li> </ul> </li><!-- .level-0 --> </div> </ul> </li><!-- .area --> <li class="tag"> <h4>タグ</h4> <ul> <li>...</li> <li>...</li> </ul> </li><!-- .tag --> </ul>
jQuery
//高さ取得等の処理 $(function() { $('form h5').click(function() { $('.area').toggleClass('p-bottom'); }); }); $(function() { $('.area .level-0').click(function() { var height = $('ul.children').outerHeight(true); $('.area').css('padding-bottom', height + 'px'); }); }); //プルダウン部分 ⇦★追記★ //親カテゴリープルダウン $(function(){ $('form h5').click(function(){ $(this).next().slideToggle(); $('form h5').not($(this)).next().slideUp(); }); }); //子カテゴリプルダウン $(function(){ $('form .level-0').on('click', function() { $(this).next().slideToggle(); $('form .level-0').not($(this)).next().slideUp(); }); });
CSS ※必要と思われる箇所のみ記載しましたが、不足していたらご指摘ください!
h5 { height:36px; } div.inner { position:absolute; } ul.children { position: absolute; } .p-bottom { padding-bottom:40px; }
教えていただきたいこと
2階層目をクリックしul.childrenの高さを取得しCSSにpaddingを付与する流れも、1階層目と同様にtoggleClassで行えば良いのではと思ったのですが、取得した高さをどのように動的にCSSに反映させれば良いのか分からず、jQueryで直接CSSを指定する方法を取ってみました。
2階層目クリック時にtoggleClassを使用すべきか、その場合はどのようにCSSに動的な高さを指定すれば良いのでしょうか。
もしくは、このままjQueryで直接CSSを指定する方法を取ったとして、ドロップダウンを閉じた際に付与したpaddingを全て消去し、元の状態に戻すにはどのように記載するのが良いのでしょうか。
調べてみたのですが、求める情報になかなか辿り着けずにおります。
jQueryは初心者です。
どうか解決策をご教授ください。
よろしくお願いいたします!!
回答1件
あなたの回答
tips
プレビュー