Начните отсюда,
for (let i = 1; i < 5; i++){
oneUser(i);
}
При вызове API внутри для l oop, также передайте index,
Затем выполните вызов API, как ваш,
function oneUser(i) {
fetch('https://randomuser.me/api/')
.then((response) => {
return response.json();
})
.then((response) => {
getPic(response, i);
})
.catch(error => {
console.error(error);
})
}
с одним изменением, передающим полученный индекс функции getPic(i)
.
Затем в getpic()
, получите тот же код, что и для picText
, info
, и moreData
и добавьте их к picDiv
inner HTML ..
const picText = `<div> <img src="${response.results[0].picture.large}"/> `;
const info = `${response.results[0].name.first}, ${response.results[0].name.last} `;
document.getElementById('picDiv').innerHTML += picText + info;
const moreData = `<div id="moreData" style="display:none"> ${response.results[0].dob.date}, ${response.results[0].location.street.name}, ${response.results[0].location.street.number}</div>`;
document.getElementById('picDiv').innerHTML += moreData;
Затем создайте кнопку с уникальным id
из полученного индекса i
..
<button id=moreData${i}>More details</button>
Изначально мы отображаем только раздел moreData, например,
<div id="moreData" style="display:none">
и полную функцию, например,
function getPic(response, i){
const picText = `<div> <img src="${response.results[0].picture.large}"/> `;
const info = `${response.results[0].name.first}, ${response.results[0].name.last} `;
document.getElementById('picDiv').innerHTML += picText + info;
const moreData = `<div id="moreData" style="display:none"> ${response.results[0].dob.date}, ${response.results[0].location.street.name}, ${response.results[0].location.street.number}</div>`;
document.getElementById('picDiv').innerHTML += moreData;
const button = `<button id=moreData${i}>More details</button> <br /><br />`;
document.getElementById('picDiv').innerHTML += button;
getMoreData();
}
В конце вызова getMoreData()
, с тем же для l oop, который вы сначала сделали, как
function getMoreData(){
for (let i = 1; i < 5; i++) {
const elem = document.getElementById('moreData' + i);
if(elem){
elem.addEventListener('click', () => {
document.getElementById('moreData' + i).previousSibling.style.display = "block"
});
}
}
}
В этой функции выше мы создаем moredata
, который будет отображаться после нажатия кнопки более подробной информации, добавляя уникальный обработчик событий в каждая кнопка ..
Рабочий пример