0
jQueryを使用してメニューにトリガーを追加し、そのトリガーに子エレメントを切り替えることを試みています。以下のコードは、jQueryプリペンドを使用しているときにサブメニューを開きません。prependトリガーを使用したjQueryドロップダウンメニュー
HTML
<ul>
<li class="menu-item-has-children">Item 1</li>
<ul class="sub-menu">
<li>Sub Item 1</li>
<li>Sub Item 2</li>
<li class="menu-item-has-children">Sub Item 3</li>
<ul class="sub-menu">
<li>Sub Sub Item 1</li>
<li>Sub Sub Item 2</li>
<li>Sub Sub Item 3</li>
<li>Sub Sub Item 4</li>
<li>Sub Sub Item 5</li>
</ul>
<li>Sub Item 4</li>
<li>Sub Item 5</li>
</ul>
</ul>
CSS
ul li {
list-style-type:none;
}
.open {
width:20px;
height:20px;
background-color:red;
color:#fff;
display:block;
cursor:pointer;
text-align:center;
}
.sub-menu {
display:none;
}
JS
jQuery(document).ready(function() {
jQuery('.menu-item-has-children').prepend ('<a class="open">+</a>');
jQuery('.open').click(function() {
jQuery(this).next('.sub-menu').toggle();
});
});
ありがとう!
[サブメニューのトリガーとjQueryのメニュー]の可能な重複(https://stackoverflow.com/question/44371370/jquery-menu-with-sub-menu-trigger) –
'jQuery(this).next'は唯一の兄弟' .open'がおそらくテキストノードであるため動作しません。クリック関数のクロージャーに降りる前に 'this'をキャッシュするか、その変数を参照する(おそらく' let'?)か、 'jQuery(this.parentNode)'を使用する必要がありますが、いずれにしてもあなたのマークアップは間違っています。 'ul'の子として' li'以外の要素を持つことはできません。あなたは固定されたニーズを入れ子にしています。 –
あなたの問題は簡単に修正できますが、まずマークアップをクリーンアップしてください。無効なマークアップは、後で予測できない動作を引き起こす可能性があります。 –