Вот небольшая хитрость, которую вы можете использовать.
Вы можете использовать существующий DOM (HTML) как своего рода шаблон, в основном клонировать элемент, а затем заменить детали нужными значениями.
Сначала вы удаляете Элемент из DOM с помощью команды remove, хотя элемент был удален из DOM, он не мешает вам клонировать его.
Теперь, когда вы захотите еще один вызовите clone(true)
, true = deepClone, и используя querySelector замените части DOM на нужные вам биты. Наконец добавьте этот клонированный элемент в DOM.
Ниже приведен простой пример ..
const ol = document.querySelector('ol');
const template = document.querySelector('li');
template.remove();
function append(o) {
const {author, message, time} = o;
const clone = template.cloneNode(true);
clone.querySelector('.author').innerText=author;
clone.querySelector('.message').innerText=message;
clone.querySelector('.time').lastChild.nodeValue=time;
ol.appendChild(clone);
}
append({
author: "me",
message: "Message...",
time: "15:21"
});
append({
author: "Another me",
message: "Something else..",
time: "12:42"
});
append({
author: "Whatever",
message: "lalala..",
time: "17:20"
});
.author {
font-weight: bold;
margin-right: 1rem;
}
.time {
color: green;
}
li {
margin: 0.5rem;
border: 1px solid silver;
}
.line {
border-bottom: 1px dotted red;
}
<ol>
<li>
<span class="author">Me</span>
<span class="message">Message...</span>
<span class="time">
<div class="line"></div>
15:21
</span>
</li>
</ol>