выберите только элемент того же div с помощью jquery

#jquery #html

#jquery #HTML

Вопрос:

 <div class="wrapper">
<div class="to-click">
<h1>click me</h1>
</div>
<div class="to-show">
<p>this text will appear when clicked</p>
</div>
</div>
<div class="wrapper">
<div class="to-click">
<h1>click me</h1>
</div>
<div class="to-show">
<p>this text will appear when clicked</p>
</div>
</div>
  

у меня неизвестное количество divs, в каждом div есть элемент, на который нужно щелкнуть, и элемент, который нужно переключить

 $('.to-show').hide();
$('.to-click').click(function () {
$('.to-show').toggle();
});
  

я хочу, чтобы при нажатии на первый H1 отображался только первый p, а при нажатии на второй h1 отображался второй p и так далее

Ответ №1:

Другие ответы хороши, но я бы рекомендовал немного другой подход, используя .closest() и .find() .

Эта версия будет работать, даже если вы добавите что-то среднее .to-click и .to-show , если они отменены или даже если они не являются родственными. Таким образом, это не сильно зависит от вашей структуры HTML, если у них есть общий предок.

ДЕМОНСТРАЦИЯ:

 $('.to-show').hide();
$('.to-click').on('click', function () {
  $(this).closest('.wrapper').find('.to-show').toggle();
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="to-click">
    <h1>click me</h1>
  </div>
  <div class="to-show">
    <p>this text will appear when clicked</p>
  </div>
</div>
<div class="wrapper">
  <div class="to-click">
    <h1>click me</h1>
  </div>
  <div class="to-show">
    <p>this text will appear when clicked</p>
  </div>
</div>  

Ответ №2:

Вы можете использовать селектор next () в jQuery, чтобы определить класс next to-show и переключить его:

 $('.to-show').hide();
$('.to-click').click(function() {
  $(this).next(".to-show").toggle();
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="to-click">
    <h1>click me</h1>
  </div>
  <div class="to-show">
    <p>this text will appear when clicked</p>
  </div>
</div>
<div class="wrapper">
  <div class="to-click">
    <h1>click me</h1>
  </div>
  <div class="to-show">
    <p>this text will appear when clicked</p>
  </div>
</div>  

Ответ №3:

Если вы не можете отредактировать divs, чтобы присвоить им идентификаторы, вы можете использовать элемент, на который вы нажали, чтобы найти следующий элемент для переключения. Что-то вроде этого:

 $('to-click').click(function() {
    // close any existing shown items
    // comment this out if you want multiple items at the same time.
    $('.to-show').hide();  

    var $self = $(this); // this will be the element clicked
    // find the parent then select the '.to-show'
    var $to_show = $self.parent().find('.to-show')
    $to_show.toggle();
}