Воссоздать элемент HTML с помощью JavaScript

простой вопрос: на основании приведенных ниже кодов я хотел бы задать вопрос: могу ли я переписать элементы с помощью Javascript, которые находились внутри «person-infos», после их удаления с помощью Javascript?

<!DOCTYPE html>
<html lang = "en">
<head>
  <meta charset = "UTF-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
  <title>Testes</title>
</head>
<body>
  <div class = "person-infos">
    <img class = "photo">
    <div class = "name"></div>
    <div class = "age"></div>
  </div>

  <script src = "testes.js"></script>
</body>
</html>
const infos = document.querySelector(".person-infos")
const nomeCandidato = document.querySelector(".name")
const partidoCandidato = document.querySelector(".age")

const elementsInfo = infos.children

infos.remove()

Да. Используйте document.createElement(), чтобы создать их, и element.appendChild(), чтобы добавить их в DOM.

Barmar 21.06.2024 23:42

Вы также можете использовать document.body.insertAdjacentHTML(), чтобы добавить его как строку HTML.

Barmar 21.06.2024 23:44

Это все обычные способы создания динамического HTML. Есть ли у вас конкретная проблема?

Barmar 21.06.2024 23:45

Поскольку у вас есть все элементы в elementsInfo, вы можете воссоздать DIV, а затем пройтись по этому списку, добавив их в новый div.

Barmar 21.06.2024 23:46

Почему вы удаляете их из DOM? Лучше использовать класс CSS, чтобы .person-infos скрыть их с помощью display: none (или свойства hidden), а затем удалить этот класс (или свойство), когда захотите показать их снова.

Rickard Elimää 22.06.2024 11:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
76
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если вы имеете в виду, что хотите воссоздать эти элементы с помощью Javascript после их удаления. Для этого вы можете использовать свойство createElement объекта документа. Затем добавьте созданный элемент в div с классом person-infos. Демонстрация тому есть.

const infos = document.querySelector(".person-infos");

// Create each child elements respectively
const image = document.createElement("img")
image.classList.add("photo");
const name = document.createElement("div");
name.classList.add("name");
const age = document.createElement("div");
age.classList.add("age");

// Append those nodes to their parent element
infos.appendChild("image");
infos.appendChild("name");
infos.appendChild("age");

Надеюсь, это ответит на ваш вопрос.

Как сказал @Barmar, вы можете использовать createElement и appenChild для создания, а затем добавления элемента в DOM. Если вы хотите добавить элемент раньше других, используйте prepend

const infos = document.querySelector(".person-infos")
const nomeCandidato = document.querySelector(".name")
const partidoCandidato = document.querySelector(".age")

const elementsInfo = infos.children

infos.remove()

let div = document.createElement('div')
div.className = "person-infos"
document.body.appendChild(div)
let img = document.createElement('img')
img.className = "photo"
div.appendChild(img)
let div2 = document.createElement('div')
div2.className = "name"
div.appendChild(div2)
let div3 = document.createElement('div')
div3.className = "age"
div.appendChild(div3)
let div4 = document.createElement('div')
div4.className = "IamBefore"
div.prepend(div4)
<div class = "person-infos">
      <img class = "photo">
      <div class = "name"></div>
      <div class = "age"></div>
  </div>

Мне действительно любопытно, потому что я думаю, что ваш вопрос можно интерпретировать двумя способами:

  1. Вы пытаетесь просто воссоздать элемент с нуля или:

  2. Вы хотите просто удалить элемент(ы) из dom для восстановления позже, возможно, у вас нет хорошего способа запомнить прикрепленные к нему данные, или они были динамическими, и вы не знаете, что такое содержимое. были.

В обоих случаях да, они оба возможны, и решение в основном одно и то же.

Вот примеры, которые проще, чем полностью заново создавать элементы, которые вы хотите удалить, а затем добавить обратно позже:

индекс.html:

<div class='parent-element'>
    <p class='child-element'>This is static text that is always the same.</p>
</div>

script.js (ванильное решение):

// Remove the element
const parent_element = document.querySelector('.parent-element);
const child_element = document.querySelector('.child-element);
parent_element.remove(child_element);

// Put it back (there's a couple different ways but here's one of them):
parent_element.appendChild(child_element);

script.js (решение JQuery):

// Fetch the parent element & remove the child element
const parent_element $('.parent-element');
const child_element = $('.child-element').detach(); // detach maintains event handlers/etc, don't use .remove() here!!!

// Put the child element back
parent_element.append(child_element);

Имейте в виду, что оба этих примера должны сохранять все данные, связанные с child-element (элементом, который мы удалили, а затем вернули обратно в DOM).

Ответ принят как подходящий

Когда вы удаляете div.person-infos, он и его дочерние элементы больше не существуют. Вам необходимо кэшировать HTML-код элементов в rewrite-html, чтобы иметь возможность повторно добавлять их. Вот минимальный воспроизводимый пример делая это. Воссоздание div.person-infos с кешированной информацией об элементе имени/возраста выполняется с помощью InsertAdjacentHTML в кешированном parentNode.

const cache = {};
const infos = document.querySelector(".person-infos");

setTimeout(() => {
  // cache the elements within div.person-infos
  // including its parent
  cache.elementsInfo = {
    parent: infos.parentNode, 
    name: infos.querySelector(`.name`).outerHTML,
    age: infos.querySelector(`.age`).outerHTML};

  console.info(infos, `removed`);
  // remove div.person-infos
  infos.remove();
  
  // wait two seconds, then re-add div.person-infos
  // with the cached information, using 
  // insertAdjacentHTML
  setTimeout( () => {
    cache.elementsInfo.parent.insertAdjacentHTML(
      `beforeend`, 
      `<div class = "person-infos">
        ${cache.elementsInfo.name}
        ${cache.elementsInfo.age}
      </div>`);
      console.info(
        document.querySelector(`.person-infos`), 
        `with cached name/age re-added`);
  }, 2000);
}, 1000);
<h3>remove and re-add</h3>
<div class = "person-infos">
  <img class = "photo">
  <div class = "name">NAME</div>
  <div class = "age">AGE</div>
</div>

Или, может быть, вы хотите переместить элементы имени/возраста из одного элемента в другой? Вот способ сделать это (на этот раз с помощью InsertAdjacentElement).

const cache = {};
const infos = document.querySelector("[data-person-id='1']");

// cache the elements within div.person-infos
// including its parent (must be cloned, because
// after removing they won't exist anymore)
console.info(`cloning name/age from div[data-person-id='2'] to cache`);
cache.person1 = [
  infos.querySelector(`.name`).cloneNode(true),
  infos.querySelector(`.age`).cloneNode(true)
];

setTimeout(() => {
  console.info(`children (name/age) person 1 removed`);

  // remove div[data-person-id='1'] *children*
  infos.querySelectorAll(`.name, .age`).forEach(el =>
    el.remove());

  // wait two seconds, then add the cached elements
  // to div[data-person-id='2']
  // using insertAdjacentElement
  setTimeout(() => {
    const moveToElem = document.querySelector(`[data-person-id='2']`);
    cache.person1.forEach(elem => 
      moveToElem.insertAdjacentElement(`beforeend`, elem));
    console.info(
      `moved cached name/age to div[data-person-id='2']`);
  }, 2000);
}, 1000);
.person-infos:before {
  content: 'person 'attr(data-person-id);
  display: block;
  color: green;
  margin-top: 0.3rem;
}

h3 {
  margin-bottom: -0.5rem;
  border-bottom: 1px solid #EEE;
}
<h3>Move</h3>
<div class = "person-infos" data-person-id = "1">
  <div class = "name">NAME person 1</div>
  <div class = "age">AGE person 1</div>
</div>

<div class = "person-infos" data-person-id = "2">
</div>

Другие вопросы по теме