#javascript #append
#javascript #добавить
Вопрос:
Мне нужно получить элемент и добавить его несколько раз внутри его родительского элемента.
HTML
<main>
<div class="wrapper">
<img src="https://placeimg.com/300/300/arch?t=1493746896324/" />
<div class="cover"></div>
</div>
</main>
JS
const main = document.querySelector("main");
const wrapper = document.querySelector(".wrapper");
for (let index = 0; index < 10; index ) {
main.innerHTML = wrapper;
}
Результат
[object HTMLDivElement]
вместо этого вставляется.
Ответ №1:
Клонирование узла
const main = document.querySelector("main");
const wrapper = document.querySelector(".wrapper");
for (let index = 0; index < 10; index ) {
main.append(wrapper.cloneNode(true));
}
<main>
<div class="wrapper">
<img src="https://placeimg.com/300/300/arch?t=1493746896324/" />
<div class="cover"></div>
</div>
</main>
Объединить с помощью outerHTML
В противном случае, учитывая innerHTML
и манипулируя строками, вы могли бы сделать:
const main = document.querySelector("main");
const wrapper = document.querySelector(".wrapper");
for (let index = 0; index < 10; index ) {
main.innerHTML = wrapper.outerHTML;
}
<main>
<div class="wrapper">
<img src="https://placeimg.com/300/300/arch?t=1493746896324/" />
<div class="cover"></div>
</div>
</main>
Плюсы и минусы
Оба вышеуказанных результата окажутся в одной и той же разметке
<main>
<div class="wrapper">...</div>
......
<div class="wrapper">...</div>
</main>
с той лишь разницей, что при использовании клонирования с true
все первоначально назначенные прослушиватели или данные также будут клонированы;
в то время как использование конкатенации =
с .outerHTML()
— это, по сути, простая конкатенация HTML-разметки с небольшими другими преимуществами.