#javascript #jquery
#javascript #jquery
Вопрос:
У меня возникли некоторые трудности при попытке заставить мое меню в стиле аккордеона jQuery отображать только одно открытое содержимое одновременно, а active
класс устанавливается только в параметрах открытого меню без переключения родительского элемента.
Это должно быть довольно просто, однако я кажусь несколько ржавым! Ниже я сделал фрагмент моего рабочего скрипта, который не соответствует правилу, которое я хочу применить, что означает, что вы можете максимально развернуть все пункты меню без сворачивания других пунктов меню.
Я просмотрел StackOverflow для ответов, однако ни один из тех, с которыми я столкнулся, не решил мои проблемы, тем не менее я уверен, что это будет дубликат другого вопроса, поэтому мои извинения заранее!
$('.SideNav .Menu li a').click(function() {
if($(this).closest("li").children("ul").length) {
$(this).parent().toggleClass('active');
$(this).next().slideToggle('fast');
}
});
ul.Menu li ul { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="SideNav">
<ul class="Menu">
<li><a href="javascript:;">1</a></li>
<li><a href="javascript:;">2 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.1 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.1.1</a></li>
<li><a href="javascript:;">2.1.2</a></li>
<li><a href="javascript:;">2.1.3</a></li>
</ul>
</li>
<li><a href="javascript:;">2.2 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.2.1</a></li>
<li><a href="javascript:;">2.2.2</a></li>
<li><a href="javascript:;">2.2.3</a></li>
</ul>
</li>
<li><a href="javascript:;">2.3</a></li>
</ul>
</li>
<li><a href="javascript:;">3 - I have siblings</a>
<ul>
<li><a href="javascript:;">3.1</a></li>
<li><a href="javascript:;">3.2</a></li>
<li><a href="javascript:;">3.3</a></li>
</ul>
</li>
</ul>
</div>
Чтобы уточнить:
При нажатии на меню, все, что не является частью одного и того же дерева, я хочу сдвинуть назад, включая те, которые находятся на том же уровне, если нажата другая подкатегория, что означает, что если вы 2 > 2.1 > 2.1.1
нажмете, а затем нажмете 2 > 2.1 > 2.1.2
2 > 2.1 > 2.1.1
, то снова сдвинетесь вверх, нажмите 2 > 2.2
, и все внутри 2 > 2.1
сдвинется назадвверх.
Комментарии:
1. Где находится аккордеон, который вы использовали?
2. @Aravind Разве не так называется этот стиль меню?
3. чего вы именно хотите? если вы можете добавить скриншот или свой поток меню?
4. Не изобретайте велосипед заново — jqueryui.com/accordion
5. @Aravind Я хочу, чтобы при нажатии на меню все остальные элементы, которых нет в этом дереве, перемещались обратно вверх, поэтому, если вы
2 > 2.1 > 2.1.1
нажмете, а затем нажмете2 > 2.1 > 2.1.2
, затем2 > 2.1 > 2.1.1
будет скользить вверх, то же самое, если вы нажмете2 > 2.2
, то2 > 2.1
все будет скользить вверх.
Ответ №1:
я надеюсь, что это поможет.
$('.SideNav .Menu li a').click(function() {
$(this).parent().siblings().find("ul").hide('fast');
if($(this).closest("li").children("ul").length) {
$(this).parent().toggleClass('active');
$(this).next().slideToggle('fast');
}
});
ul.Menu li ul { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="SideNav">
<ul class="Menu">
<li><a href="javascript:;">1</a></li>
<li><a href="javascript:;">2 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.1 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.1.1</a></li>
<li><a href="javascript:;">2.1.2</a></li>
<li><a href="javascript:;">2.1.3</a></li>
</ul>
</li>
<li><a href="javascript:;">2.2 - I have siblings</a>
<ul>
<li><a href="javascript:;">2.2.1</a></li>
<li><a href="javascript:;">2.2.2</a></li>
<li><a href="javascript:;">2.2.3</a></li>
</ul>
</li>
<li><a href="javascript:;">2.3</a></li>
</ul>
</li>
<li><a href="javascript:;">3 - I have siblings</a>
<ul>
<li><a href="javascript:;">3.1</a></li>
<li><a href="javascript:;">3.2</a></li>
<li><a href="javascript:;">3.3</a></li>
</ul>
</li>
</ul>
</div>
Комментарии:
1. это почти идеально! Не могли бы вы любезно сделать так, чтобы после
2 > 2.1 > 2.1.1
расширения и нажатия на3
него не только2
скользило вверх, но и все внутри2
, поэтому при повторном открытии они закрывались?