Проблема с добавлением класса следующему элементу nodelist

107
16 апреля 2022, 08:00

Делаю галерею в модальном окне, наподобие fancybox только на чистом js, и возникла ошибка "Cannot read property 'classList' of undefined" при задавании класса следующему элементу, как можно это исправить? У меня такое ощущение что я изначально что-то делал неправильно...

HTML
<div class="card-page__imgs">
   <img id="1" href="assets/img/card-page-main-img.png" class="card-page__main-img gallery-img" 
   src="assets/img/card-page-main-img.png" alt="Изображение">
   <div class="card-page__img-group">
      <img id="2" src="assets/img/card-page-img1.png" class="card-page__second-img gallery-img next-img">
      <img id="3" src="assets/img/card-page-img2.png" class="card-page__second-img gallery-img">
      <img id="4" src="assets/img/card-page-img3.png" class="card-page__second-img gallery-img">
   </div>
</div>
JS
const galleryBtnPrev = document.querySelector('.gallery__btn_prev'),
    galleryBtnNext = document.querySelector('.gallery__btn_next'),
    galleryMainImg = document.querySelector('.gallery__main-img'),
    galleryImages = document.querySelectorAll('.gallery-img');
const showNext = () => {
    const galleryImagesArr = Array.from(galleryImages);
    galleryImagesArr.forEach((el, i) => {
        const nextSrc = el.getAttribute('src');
        if(el.classList.contains('next-img')) {
            galleryMainImg.setAttribute('src', nextSrc);
            el.classList.remove('next-img');
            const nextElem =el.nextElementSibling;
            nextElem.classList.add('next-img');
        }
    });
};
// galleryBtnPrev.addEventListener('click', showPrev);
galleryBtnNext.addEventListener('click', showNext);
Answer 1
        const nextElem = el.nextElementSibling;
        if (nextElem)
          nextElem.classList.add('next-img');

const galleryBtnPrev = document.querySelector('.gallery__btn_prev'),
  galleryBtnNext = document.querySelector('.gallery__btn_next'),
  galleryMainImg = document.querySelector('.gallery__main-img'),
  galleryImages = document.querySelectorAll('.gallery-img');
const showNext = () => {
  const current = document.querySelector('.gallery-img.next-img');
  const nextElem = current.nextElementSibling;
  if (nextElem) {
    current.classList.remove('next-img');
    nextElem.classList.add('next-img');
    //galleryMainImg.src = nextElem.src;
  }
};
// galleryBtnPrev.addEventListener('click', showPrev);
galleryBtnNext.addEventListener('click', showNext);
.next-img {
  border: 1px solid red;
}
<div class="card-page__imgs">
  <img id="1" href="assets/img/card-page-main-img.png" class="card-page__main-img gallery-img" src="assets/img/card-page-main-img.png" alt="Изображение">
  <div class="card-page__img-group">
    <img id="2" src="assets/img/card-page-img1.png" class="card-page__second-img gallery-img next-img">
    <img id="3" src="assets/img/card-page-img2.png" class="card-page__second-img gallery-img">
    <img id="4" src="assets/img/card-page-img3.png" class="card-page__second-img gallery-img">
  </div>
</div>
<button type="button" class="gallery__btn_next">Next</button>

READ ALSO
Как реализовать продолжение после регистрации на сайте?

Как реализовать продолжение после регистрации на сайте?

Есть форма регистрации написанная на html и cssКак открыть главную страницу после прохождения регистрации и нажатие на кнопку Submit, я новечек...

94
Утечка памяти при вызове нативного onload в React

Утечка памяти при вызове нативного onload в React

Всем привет! Мучаюсь с такой проблемойЯ написал компоненту Canvas которая рендерит картинку представляющую из себя канвас и пропсы

87
Как я могу упростить данный код js

Как я могу упростить данный код js

в переменную selector должно присваиваться значение всех элементов многомерного массива marks_types с индексом 1То есть что-то вроде

107
d3 js Uncaught TypeError: Cannot read property &#39;select&#39; of null

d3 js Uncaught TypeError: Cannot read property 'select' of null

Всем привет! Я использую d3 js первый раз для отрисовки агрегационного графика, и мне нужно в нем обновить данные по нажатию на кнопкуДля отрисовки...

84