Как настроить таргетинг на один div в цикле с помощью jQuery?

#php #jquery #wordpress #loops

#php #jquery #wordpress #циклы

Вопрос:

У меня здесь есть этот цикл, который показывает данные публикации из блога WordPress —

 <?php foreach ( $product_posts as $post ) : setup_postdata( $post ); ?>
<div class="card-container">
    <div class="card-image">
        <figure>
            <a href="<?php the_permalink();?>"><?php the_post_thumbnail(); ?></a>
        </figure>
    </div>
    <div class="gallery-card-text">
        <h2><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h2>
        <p><?php the_excerpt() ?></p>
    </div>
</div>
<?php endforeach; wp_reset_postdata(); ?>
  

Использование этой функции jQuery —

 $(".card-container").mouseenter(function () {
  $(".gallery-card-text").show();
  $(".card-image").hide();
});

  

Он нацелен на все в цикле, поэтому, если вы наведете курсор на 1 сообщение, оно скроет изображение на всех из них. Я хочу показывать / скрывать каждый div в цикле по отдельности при вводе мыши.

Как я могу это сделать?

Комментарии:

1. зачем вообще использовать JavaScript?

Ответ №1:

Выберите элементы в элементе, который вы навели.

 $(".card-container").mouseenter(function () {
  var card = $(this);
  card.find(".gallery-card-text").show();
  car.find(".card-image").hide();
});
  

но зачем вообще использовать JavaScript, когда это может сделать простой CSS?

 .card-container .gallery-card-text { display: none;} 
.card-container:hover .gallery-card-text { display: block;} 
.card-container .card-image { display: block;}
.card-container:hover .card-image { display: none;}
  

Ответ №2:

Вам нужно указать, что .gallery-card-text вы хотите показать, а что .card-image скрыть.

При использовании событий jQuery this привязывается к элементу, на который вы устанавливаете триггер, вы можете использовать этот элемент в качестве «области видимости», чтобы определить, какие элементы вы хотите скрыть

  $(".card-container").mouseenter(function () {
    var $this = $(this); // this = current .card-container
    
    // use .find() to get the elements within $this
    $this.find(".gallery-card-text").show();
    $this.find(".card-image").hide();
  });
  

ES6

 $(".card-container")
    .mouseenter((event) => {
         // event.currentTarget = current .card-container
        let $this = $(event.currentTarget);

        // use .find() to get the elements within $this
        $this.find(".gallery-card-text").show();
        $this.find(".card-image").hide();
    });