Если вы установите innerHTML
элемента, он уничтожит все предыдущие innerHTML
(например, других астронавтов).
Чтобы добавить несколько элементов внутри вашего div, вы можете использовать метод insertAdjacentHTML
, например:
const
astronautsDiv = document.querySelector('.astronaut'),
myData = simulateFetchAndParse();
insertNewHtml(myData);
function insertNewHtml(data){
// Inserts astronaut count
const numberSpan = `<span>Total People In Space: ${data.number}</span>`;
astronautsDiv.insertAdjacentHTML("beforeend", numberSpan);
// Inserts individual astronaut information
for(let person of data.people){
const personDiv = `
<div class="person">
<div>Name: ${person.name}</div>
<div>Craft: ${person.craft}</div>
</div>
`;
astronautsDiv.insertAdjacentHTML("beforeend", personDiv);
}
}
function simulateFetchAndParse(){
const data = {
number: 2,
people: [
{ name: "Tasha Yar", craft: "Enterprise" },
{ name: "Buzz Lightyear", craft: "None" }
]
};
return data;
}
.astronaut{ margin: 1em 0 0 1em; padding: 1em 0.5em 0 0.5em; border: 1px solid grey; }
.person{ margin: 1em 0; }
<div class="astronaut"></div>
В качестве альтернативы вы можете использовать серию createElement
и .appendChild
вызывает (что позволяет избежать использования шаблонных литералов, в которых искаженный HTML может завершиться ошибкой во время выполнения).
Код будет выглядеть примерно так:
const
astronautsDiv = document.querySelector('.astronaut'),
myData = simulateFetchAndParse();
insertNewHtml(myData);
function insertNewHtml(data){
// Makes a span with some text, and appends it to our container
const numberSpan = document.createElement("span");
numberSpan.textContent = `Total People In Space: ${data.number}`;
astronautsDiv.appendChild(numberSpan);
for(let person of data.people){
// Makes three new divs (`personDiv` will contain the other two)
const
personDiv = document.createElement("div"),
nameDiv = document.createElement("div"),
craftDiv = document.createElement("div");
// Sets some text and a class
nameDiv.textContent = `Name: ${person.name}`;
craftDiv.textContent = `Craft: ${person.craft}`;
personDiv.classList.add("person"); // So the CSS can style this div
// Adds the two divs to `personDiv`, and adds `personDiv` to our container
personDiv.appendChild(nameDiv);
personDiv.appendChild(craftDiv);
astronautsDiv.appendChild(personDiv);
}
}
function simulateFetchAndParse(){
const data = {
number: 2,
people: [
{ name: "Tasha Yar", craft: "Enterprise" },
{ name: "Buzz Lightyear", craft: "None" }
]
};
return data;
}
.astronaut{ margin: 1em 0 0 1em; padding: 1em 0.5em 0 0.5em; border: 1px solid grey; }
.person{ margin: 1em 0; }
<div class="astronaut"></div>