Как уже сообщалось, добавление элементов в dom с помощью element.innerHTML += '<td>new stuff</td>')
не является хорошей стратегией. Таким образом, добавляется только текст элемента.
Вместо этого вам нужно создать элемент, добавить прослушиватель событий, а затем добавить новый элемент в какой-то другой элемент в dom, т. Е. С помощью методов документов createElement
и appendChild
.
Если вы имеете дело со столом, вы также можете использовать insertRow
и insertCell
. Проверьте фрагмент ниже.
let btnShowPlanets = document.querySelector("button");
let tBodyPlanetFilms = document.getElementById('planetsFilms')
btnShowPlanets.addEventListener("click", () =>{
fetch("https://swapi.co/api/planets/?page=1") // 3
.then(response => response.json()) // 4
.then(responseObj => { // 5
responseObj.results.forEach((obj, i) => {
const row = tBodyPlanetFilms.insertRow(i + 1)
const cell1 = row.insertCell(0)
cell1.innerHTML = obj.name
const cell2 = row.insertCell(1)
cell2.addEventListener('click', () => console.log("clicked on " + obj.name + "'s movies"))
cell2.innerHTML = obj.films.join(', ')
})
})
btnShowPlanets.style.display = `none`;
});
<body>
<button style="cursor: pointer;">Show Planets</button>
<table border="5px" id="planetsFilms">
<thead>
<th>Planets: </th>
<th>Film links: </th>
</thead>
<tbody></tbody>
</table>
</body>