Во-первых, обратите внимание, что ваш HTML-код недействителен. Вы не можете иметь текстовый узел в качестве дочернего элемента ul
. Чтобы это исправить, вы можете переместить текст show
за пределы ul
в его собственный элемент. Я использовал p
в примере ниже, но любой другой будет работать.
Оттуда вы можете прикрепить обработчик событий click
к этому элементу, который вызывает slideToggle()
для соответствующих элементов li
изатем обновляет text()
выбранного элемента на основе его текущей настройки. Попробуйте это:
jQuery(function($) {
$(".toggle").on('click', function() {
$('ul li').stop().slideToggle(500);
$(this).text((i, t) => t == 'show' ? 'hide' : 'show');
});
});
.item-options li {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="toggle">show</p>
<ul class="item-options">
<li>list item</li>
</ul>
Также обратите внимание на использование stop()
, чтобы не допустить очереди анимации slideToggle при быстром щелчке по элементу подряд.