Создание раскрывающегося списка, возвращающего информацию из API. На чистом js
Мне нужно что бы по нажатию на эпизод списком возвращались корабли, которые в этом эпизоде встречались. Я могу вернуть списком эпизоде, задать эвент по клику, но я решительно не понимаю, как вложить в эпизоды список кораблей.
Нужно ли создавать, например, li class = ships в уже существующем ul. На стаке мне просто кинули кусок кода и сказали его рефакторнуть - сломался буквально сразу на клик хендлере и тишина.
'use strict'
const list = document.querySelector('.list');
function test() {
return fetch('https://swapi.dev/api/films/', {
method: 'GET'
});
}
list.addEventListener('click', event => {
console.log('TEST');
alert("TEST");
});
test()
.then(function(response) {
return response.json();
})
.then(function(data) {
data.results.forEach(function(episode) {
const ul = document.createElement('ul');
ul.innerHTML = episode.title;
list.append(ul);
})
})
.list {
cursor: pointer;
}
<ul class="list"></ul>
Ответы (1 шт):
Автор решения: Mykola Kikets
→ Ссылка
const list = document.querySelector('.list');
function test() {
return fetch('https://swapi.dev/api/films/', {
method: 'GET'
});
}
test()
.then(function(response) {
return response.json();
})
.then(function(data) {
data.results.forEach(function(episode) {
const ul = document.createElement('ul');
ul.classList.add('episode')
const ul_inner = document.createElement('ul');
ul_inner.classList.add('starships');
ul_inner.classList.add('episode-'+episode.episode_id)
ul_inner.classList.add('hidden');
episode.starships.forEach((starship)=>{
let episode_id = episode.episode_id;
fetch('https://'+starship.substr(7),{method:'GET',redirect:'follow'}).then((r)=>r.json())
.then(d=>{
let li = document.createElement('li')
li.innerHTML = d.name;
document.querySelector('.episode-'+episode_id).append(li);
})
});
ul.innerHTML = episode.title+ul_inner.outerHTML;
list.append(ul);
})
document.querySelectorAll('.episode').forEach(elem=>{
elem.addEventListener('click', event => {
event.target.querySelector('.starships').classList.toggle('hidden');
});
})
})
.list {
cursor: pointer;
}
.hidden{
display:none;
}
<ul class="list"></ul>
что если так?