Вопрос: В этом коде я пытаюсь показать локальное хранилище в DOM, как я могу показать «li» второго for внутри «ul» в первом for?
показать это так? :
<div id = "receta${[i]}">
<h2>${recetasLocales[i].nombreReceta}</h2>
<ul><li>${recetasLocales[i].ingredientes[n].nombre}</li></ul>
<p>${recetasLocales[i].procedimiento}</p>
</div>
Это код, который я написал, если вы видите, что оба innerHTML, очевидно, будут отдельными, и я этого не хочу.
mostrar.addEventListener('click', () => {
let recetasLocales = JSON.parse(localStorage.getItem('recetasLocales'))
for (let i = 0; i < recetasLocales.length; i++) {
listaReceta.innerHTML +=`
<div id = "receta${[i]}">
<h2>${recetasLocales[i].nombreReceta}</h2>
<ul></ul>
<p>${recetasLocales[i].procedimiento}</p>
</div>
`
for (let n = 0; n < recetasLocales[i].ingredientes.length; n++) {
listaReceta.innerHTML += `
<li>${recetasLocales[i].ingredientes[n].nombre}</li>
`
}
}
Есть несколько способов выполнить эту операцию.
Один из способов — иметь строковую переменную и манипулировать ею по своему вкусу.
Пример:
mostrar.addEventListener('click', () => {
let recetasLocales = JSON.parse(localStorage.getItem('recetasLocales'))
for (let i = 0; i < recetasLocales.length; i++) {
let str =`
<div id = "receta${[i]}">
<h2>${recetasLocales[i].nombreReceta}</h2>
<ul>
`
for (let n = 0; n < recetasLocales[i].ingredientes.length; n++) {
str += `
<li>${recetasLocales[i].ingredientes[n].nombre}</li>
`
}
str+=`</ul>
<p>${recetasLocales[i].procedimiento}</p>
</div>`
listaReceta.innerHTML=str
}
@JavierPérez Как вы создаете переменную «списокReceta»?
Другой способ сделать это без постоянного объединения строк — использовать document.createElement()
и appendChild()
.
Note this uses
textContent
which prevents XSS attacks as it is not parsed as HTML.
См. этот минимальный пример.
const someValues = [
[1, 2],
[1, 2],
[1, 2],
[1, 2],
];
// create div which contains the lists
const div = document.createElement("div");
for (let i = 0; i < someValues.length; i++) {
// create heading
const heading = document.createElement("h2");
heading.textContent = `My heading for element ${i}`;
// create list
const list = document.createElement("ul");
for (let j = 0; j < someValues[i].length; j++) {
const element = someValues[i][j];
// create a new list item
const listItem = document.createElement("li");
listItem.textContent = element;
// add list item to list
list.appendChild(listItem);
}
// adding it all together
div.appendChild(heading);
div.appendChild(list);
}
document.addEventListener("DOMContentLoaded", function (event) {
const content = document.getElementById("test");
content.appendChild(div);
});
<div id = "test"></div>
Я сделал это, но хочу делать разные div, я видел, что это все в одном div
Нет проблем, просто создайте еще один div
, используя const anotherDiv = document.createElement("div")
, и используйте appendChild()
там, чтобы добавить туда элементы списка, которые вы хотите иметь во втором div
.
спасибо я понимаю
У меня есть один вопрос, дело в том, что когда я отправляю свою форму с событием отправки, оно не отображается в DOM с самого начала, оно показывает его при обновлении. Как я могу это исправить?
Посмотрите на прослушиватели событий и Проверка формы JS.
Я попробовал это, и он говорит: «Uncaught TypeError: невозможно установить свойства null (настройка« innerHTML »)», в последней строке кода «listaRecetya.innerHTML = str»