У меня есть страница для отображения членов, и я использую цикл внутри foreach для ввода членов. каждый отдельный член имеет следующую html-разметку
цикл начинается здесь
<div class = "member">
<div class = "row wrapper">
<div class = "image col-sm-3 col-md-3 col-lg-3 col-xs-12">
<a href = "#" class = "image-wrapper background-image">
<img src = "abc.jpg" alt = "member-profile" class = "img img-responsive bm-profile-img" >
</a>
</div>
<div class = "cont col-sm-9 col-md-9 col-lg-9 col-xs-12">
<div class = "row">
<h3>
<a class = "title">Title</a>
</h3>
</div>
<div class = "row">
<h4 class = "summary">
<a href = "#">Summary</a>
</h4>
</div>
<div class = "row">
<div class = "description">
<p>Description</p>
</div>
</div>
<div class = "row">
<div class = "detail read-more" id = "bd-read-more">See All</div >
</div>
</div>
</div>
</div>
цикл заканчивается здесь
Описание div по умолчанию скрыто. Когда кто-то нажимает на «Просмотреть все», это должно отображаться. Я могу добиться этого с помощью простого jQuery, например этого
$("#bd-read-more").click(function(){
$(".description").slideToggle('slow', 'swing');
});
Моя проблема в том, что, поскольку у меня есть несколько div-ов .description (по одному для каждого члена), все div'ы .description реагируют на одно нажатие кнопки «Просмотреть все».
Как я могу заставить реагировать только .description div из нажатой кнопки See All?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать это так.
$(".read-more").click(function() { // Note I've changed from ID to class, since ID shall always be unique
$(this).closest(".wrapper").find(".description").slideToggle('slow', 'swing');
});
.closest('.wrapper') идет «вверх» в вашем HTML-дереве и ищет первый элемент с классом wrapper.
.find('.description') ищет "вниз" в вашем html и находит все элементы с классом description.
Это будет искать ближайший элемент с классом wrapper, а затем найдет элемент description и поработает над ним.
Демо
$(".read-more").click(function() {
$(this).closest(".wrapper").find(".description").slideToggle('slow', 'swing');
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "member">
<div class = "row wrapper">
<div class = "image col-sm-3 col-md-3 col-lg-3 col-xs-12">
<a href = "#" class = "image-wrapper background-image">
<img src = "abc.jpg" alt = "member-profile" class = "img img-responsive bm-profile-img">
</a>
</div>
<div class = "cont col-sm-9 col-md-9 col-lg-9 col-xs-12">
<div class = "row">
<h3>
<a class = "title">Title</a>
</h3>
</div>
<div class = "row">
<h4 class = "summary">
<a href = "#">Summary</a>
</h4>
</div>
<div class = "row">
<div class = "description">
<p>Description</p>
</div>
</div>
<div class = "row">
<div class = "detail read-more" id = "bd-read-more">See All</div>
</div>
</div>
</div>
</div>Работал как шарм. большое спасибо. вы можете помочь мне понять, что вы здесь сделали? Я новичок в jquery
Нет проблем @jowoke Рад помочь, я обновил ответ
У вас есть несколько кнопок с одинаковым идентификатором? Если так, то это нельзя - вместо этого сделайте это классом. Затем вы можете найти нужный блок
.description, нацелив его в обработчикеclickс помощью чего-то вроде$(this).siblings(".description").