将 DOM 元素创建到集合的项目中
Create DOM element into items of a collection
正在尝试从模板创建 DOM 元素“gota”。首先我创建模板:
function htmlToElement(html) {
var template = document.createElement('template');
template.innerHTML = html;
return template.content.firstChild;
}
let gota = htmlToElement('<div class="gota"><div class="gota-rastro"><div class="rastro"></div></div><div class="gota-cabeza"></div></div>');
其次,我从 CSS class“gotea”创建集合并迭代每个元素以附加模板:
function gotear() {
let gotas = document.getElementsByClassName('gotea');
for (let i = 0; i < gotas.length; i++) {
gotas[i].appendChild(gota);
}
}
gotear();
这只是将“gota”元素添加到集合中的唯一一个随机元素:
如何将此模板添加到集合中的所有元素?
您只创建了 一个 元素。然后你多次使用 appendChild
相同的元素,所以你 将它从一个父元素移动 到下一个父元素。
您可以使用 cloneNode(true)
克隆元素并附加克隆:
gotas[i].appendChild(gota.cloneNode(true));
旁注:您可以使用 insertAdjacentHTML
而不是 htmlToElement
直接插入基于 HTML 的元素:
function gotear() {
let gotas = document.getElementsByClassName('gotea');
for (let i = 0; i < gotas.length; i++) {
gotas[i].insertAdjacentHTML(
"beforeend",
'<div class="gota"><div class="gota-rastro"><div class="rastro"></div></div><div class="gota-cabeza"></div></div>'
);
}
}
gotear();
当然,这意味着重复解析 HTML。但如果在这里没有用,它可能在其他地方有用。 (还有insertAdjacentText
。)
正在尝试从模板创建 DOM 元素“gota”。首先我创建模板:
function htmlToElement(html) {
var template = document.createElement('template');
template.innerHTML = html;
return template.content.firstChild;
}
let gota = htmlToElement('<div class="gota"><div class="gota-rastro"><div class="rastro"></div></div><div class="gota-cabeza"></div></div>');
其次,我从 CSS class“gotea”创建集合并迭代每个元素以附加模板:
function gotear() {
let gotas = document.getElementsByClassName('gotea');
for (let i = 0; i < gotas.length; i++) {
gotas[i].appendChild(gota);
}
}
gotear();
这只是将“gota”元素添加到集合中的唯一一个随机元素:
如何将此模板添加到集合中的所有元素?
您只创建了 一个 元素。然后你多次使用 appendChild
相同的元素,所以你 将它从一个父元素移动 到下一个父元素。
您可以使用 cloneNode(true)
克隆元素并附加克隆:
gotas[i].appendChild(gota.cloneNode(true));
旁注:您可以使用 insertAdjacentHTML
而不是 htmlToElement
直接插入基于 HTML 的元素:
function gotear() {
let gotas = document.getElementsByClassName('gotea');
for (let i = 0; i < gotas.length; i++) {
gotas[i].insertAdjacentHTML(
"beforeend",
'<div class="gota"><div class="gota-rastro"><div class="rastro"></div></div><div class="gota-cabeza"></div></div>'
);
}
}
gotear();
当然,这意味着重复解析 HTML。但如果在这里没有用,它可能在其他地方有用。 (还有insertAdjacentText
。)