Проблема в вашем коде заключается в том, что вы изменяете все .learnMore
и .reveal
элементы при нажатии на любой из них.
Чтобы исправить это, используйте this
ключевое слово в обработчике события для ссылки на конкретный элемент, вызвавший событие.Оттуда вы можете пройти DOM, используя prev()
, чтобы переключить связанный элемент .reveal
.
jQuery(document).ready(function($) {
$(".learnMore").on("click", function(e) {
var $a = $(this).toggleClass("is-active")
$a.text(function(i, t) {
return t === 'Learn More' ? 'Close' : 'Learn More';
});
$a.prev(".reveal").slideToggle(500);
});
});
.hide-mobile {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Header One</h2>
<p class="hide-mobile reveal">Etiam ut vehicula velit. Cras ut ipsum id tortor ultrices iaculis. Donec sodales ultricies urna vitae porta. </p>
<a class="learnMore mobile">Learn More</a>
<h2>Header Two</h2>
<p class="hide-mobile reveal">Morbi et varius elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.</p>
<a class="learnMore mobile">Learn More</a>
Также обратите внимание, что вы говорили slideToggle()
завершиться за 10 миллисекунд, что слишком быстро, чтобы его можно было увидеть, поэтому я замедлил егодо 300 мс.