I am trying to implement a carousel that opens up the image with the associated caption in a modal when the user clicks on the image.
So far, I am able to open up the image but not able to retrieve the caption as the script only looks for attribute within the img tag. Is there a way to also retrieve the h5 and p tag within the carousel-caption div container and pass it so that the modal receives it?
<div id="carouselExampleCaptions" class="carousel slide">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="https://picsum.photos/id/1/200/300" class="d-block w-100" alt="">
<div class="carousel-caption d-none d-md-block">
<h5>First slide label</h5>
<p>Some representative placeholder content for the first slide.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://picsum.photos/id/2/200/300" class="d-block w-100" alt="">
<div class="carousel-caption d-none d-md-block">
<h5>Second slide label</h5>
<p>Some representative placeholder content for the second slide.</p>
</div>
</div>
<div class="carousel-item">
<img src="https://picsum.photos/id/2/200/300" class="d-block w-100" alt="">
<div class="carousel-caption d-none d-md-block">
<h5>Third slide label</h5>
<p>Some representative placeholder content for the third slide.</p>
</div>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
<!-- Modal -->
<div class="modal fade" id="gallery-modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<img src="img/1.jpg" class="modal-img" alt="modal img">
</div>
</div>
</div>
</div>
Javascript
document.addEventListener("click",function (e){
if(e.target.classList.contains("d-block")){
const src = e.target.getAttribute("src");
document.querySelector(".modal-img").src = src;
const myModal = new bootstrap.Modal(document.getElementById('gallery-modal'));
myModal.show();
}
})
2
Answers
To achieve the functionality you desire, you can modify your JavaScript code to retrieve the caption content associated with the clicked image and pass it to the modal.