Нацелить другой элемент внутри одного раздела в jquery

У меня есть страница для отображения членов, и я использую цикл внутри 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?

У вас есть несколько кнопок с одинаковым идентификатором? Если так, то это нельзя - вместо этого сделайте это классом. Затем вы можете найти нужный блок .description, нацелив его в обработчике click с помощью чего-то вроде $(this).siblings(".description").

Robin Zigmond 18.10.2018 11:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это так.

$(".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 18.10.2018 11:42

Нет проблем @jowoke Рад помочь, я обновил ответ

Carsten Løvbo Andersen 18.10.2018 11:49

Другие вопросы по теме