Цикл a класс для детей div

#javascript #html

Вопрос:

У меня есть что-то вроде карусели. У меня есть класс, active который делает определенный элемент видимым. Я хотел бы проехать по ним на велосипеде. Есть ли способ проверить, у какого ребенка активный класс, чтобы я мог переместить активный класс в следующий?

пример html:

 <div class="carouselContainer">
    <div class="carouselItemDiv">
        <img src="" loading="eager" data-showtime="5000" class="carouselItem">
    </div>
    <div class="carouselItemDiv">
        <img src="" loading="eager" data-showtime="5000" class="carouselItem active">
    </div>
    <div class="carouselItemDiv">
        <img src="" loading="eager" data-showtime="5000" class="carouselItem">
    </div>
    <div class="carouselItemDiv">
        <img src="" loading="eager" data-showtime="5000" class="carouselItem">
    </div>
</div>
 

Ответ №1:

Конечно. Есть несколько способов решить эту проблему. Один из способов-захватить все элементы, проверить их по отдельности, а затем пометить следующий как активный.

 // grab all the carousel items
var items = document.querySelector(".carouselContainer")
    .querySelectorAll(".carouselItemDiv");
    
// loop thru each of the carousel items
for( var i = 0; i < items.length; i   ){

  // if the item is active
  if ( items[i].classList.contains("active") ){

    // mark it inactive
    items[i].classList.remove("active");

    // if last item in list, mark the first item active
    if ( i == items.length - 1 ){
      items[0].classList.add("active");
    }
    // otherwise mark the next item active
    else {
      items[i 1].classList.add("active")
    }

    return;
  }
}
 

Вы также можете положиться на dom, но таким образом вы торгуете небольшой структурной гибкостью.

 // grab the active item
var item = document.querySelector(".carouselItemDiv.active");

// mark it inactive
item.classList.remove("active");

// if there's an item after it, mark it active    
if ( item.nextElementSibling ){
  item.nextElementSibling.classList.add("active");
} 
// otherwise mark the first carousel item active
else {
  document.querySelector(".carouselItemDiv").classList.add("active");
}
 

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

1. Большое спасибо. Не знал, что nextElementSibling существует. Я очень сильно все усложнял.

Ответ №2:

Вы можете проверить, имеет ли div класс «активный», используя этот код:

 var carouselItemDivs = document.getElementsByClassName("carouselItemDiv");

for (var i = 0; i < carouselItemDivs.length; i  ) {
    if (carouselItemDivs[i].classList.contains("active") {
        // carouselItemDivs[i] has the class "active"
        // Do something
    }
}