@I_want_to_know

Как задать класс active первому элементу по умолчанию?

Друзья, всем мира и здоровья!
Подскажите пожалуйста, как решить задачу.
Условия такие:
Есть несколько элементов на странице у всех одинаковый класс и одинаковые стили.
Нужно, что бы при загрузке страницы, первому элементу из списка присваивался класс active.
А при клике на любой иной элемент этой группы, класс active у первого элемента удалялся, и присваивался к выбранному пользователем элементу.
Для полной картины вот код элементов:
<?php
      $args = array(
        'post_type' => 'brends',
        'post_status' => 'publish',
        'posts_per_page' => -1,
      );
      $wc_query = new WP_Query($args);
      if ($wc_query->have_posts()) :
        while ($wc_query->have_posts()) : $wc_query->the_post();
      ?>

          <label class="logo-brand">
            <input type="radio" name="brand_id" value="<?php the_ID(); ?>" />
            <span>

              <img class="img__logo-brand" src="<?php the_field('logo_brands'); ?>" alt="<?php the_title(); ?>" />
            </span>
          </label>

      <?php endwhile;
      endif; ?>

При попытке добавить active в верстку, разумеется этот класс автоматом присваивается ко всем элементам.
Пытался добавить через JS, и как результат, для первого элемента действительно класс добавлялся, но не переключался на другие элементы.
Вот JS
var label = document.querySelector('.logo-brand');
label.classList.add('logo-brand__active');

var label = document.querySelector('.logo-brand');
label.addEventListener('click', function() {
  var isActive = label.classList.contains('logo-brand__active');
	if (isActive) {
    label.classList.remove('logo-brand__active');
  } else {
    label.classList.add('logo-brand__active');
  }
});


Спасибо за ваше участие...
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Замените while на for и смотрите на счётчик. Если он равен 0, то добавляем класс. Что-то типа такого:
<label class="logo-brand<?php i === 0 ? ' active' : ''?>">

В JS надо получить все элементы, циклом пройти навесить обработчик. В обработчике сначала удаляем класс у всех элементов, а потом присваиваем выбранному.
Ответ написан
Комментировать
Алексей указал верное решение
Если не хотите переписывать цикл, то добавьте переменную перед while
if ($wc_query->have_posts()) :
       $i = 0;
        while ($wc_query->have_posts()) : $wc_query->the_post();
      ?>

          <label class="logo-brand<?php i === 0 ? ' active' : ''?>">
            <input type="radio" name="brand_id" value="<?php the_ID(); ?>" />
            <span>

              <img class="img__logo-brand" src="<?php the_field('logo_brands'); ?>" alt="<?php the_title(); ?>" />
            </span>
          </label>

      <?php
            $i++;
            endwhile;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект