创建多个元素
Create multiple elements
JavaScript
var textBlock = document.createElement('div');
textBlock.setAttribute('class', 'finalBlock');
var addFinalBlock = document.getElementsByClassName('block')[0];
addFinalBlock.appendChild(textBlock);
textBlock.innerHTML = "Make this block a text block";
// -------
var textBlock2 = document.createElement('div');
textBlock2.setAttribute('class', 'finalBlock');
var addFinalBlock2 = document.getElementsByClassName('block')[0];
addFinalBlock2.appendChild(textBlock2);
textBlock2.innerHTML = "Make this block a text block2";
// -------
var textBlock3 = document.createElement('div');
textBlock3.setAttribute('class', 'finalBlock');
var addFinalBlock3 = document.getElementsByClassName('block')[0];
addFinalBlock3.appendChild(textBlock3);
textBlock3.innerHTML = "Make this block a text block3";
// -------
var textBlock4 = document.createElement('div');
textBlock4.setAttribute('class', 'finalBlock');
var addFinalBlock4 = document.getElementsByClassName('block')[0];
addFinalBlock4.appendChild(textBlock4);
textBlock4.innerHTML = "Make this block a text block4";
我想创建 4 个具有不同文本的元素。 class 需要保持不变。我想我用了很多代码来做这件事。
也许有人知道如何让这段代码看起来更漂亮、更高效?
祝福
谢谢!
如果您多次执行同样的事情,请使用循环。 在数组中存储不同的文本,然后使用forEach:
遍历它
var text = ["text1", "tex2", "text3", "text4"];
text.forEach(function(el) {
var div = document.createElement("div");
div.className = "finalBlock";
div.innerHTML = el;
document.body.appendChild(div);
});
或使用 for 循环:
var text = ["text1", "tex2", "text3", "text4"];
for(var i = 0; i < text.length; i += 1) {
var div = document.createElement("div");
div.className = "finalBlock";
div.innerHTML = text[i];
document.body.appendChild(div);
}
我相信更好的方法是使用 fragment
.
只更新 DOM 一次
var docFrag = document.createDocumentFragment();
for(var i = 0; i < divs.length; i++) {
docFrag.appendChild(divs[i]); // Note that this does NOT go to the DOM
}
document.body.appendChild(docFrag); // Appends all divs at once
这段代码可以正常工作。如果你想在同一个 HTML 标签上添加多个元素。
var element1= "<br/>"
var element2="<input type='text' />"
var element3= "<br/>"
var onLine = document.getElementById("onLine"); /* This is <ul id="onLine"></ul> */
var on = document.createElement("div");
on.innerHTML = element1+ element3+ element3
on.setAttribute("style", "background-color:rgba(0, 0,
0, 0.3);color:white;border-radius:40px;margin-
bottom:30px;padding: 10px;width: 230px;");
on.appendChild(document.createTextNode('Custom text'));
onLine.appendChild(on);
您可以创建一个 for 循环来创建多元素
let elementsCount = 3;
for (let i = 0; i < elementsCount; i++) {
const element = document.createElement('div');
document.body.appendChild(element);
}
您可以使用 Array.prototype.map() method. It is similar to .forEach() 但您 return 结果。
const textblocks = ["textblock 1", "textblock 2", "textblock 3", "textblock 4"].map(text => {
let div = document.createElement("div"); // p tag might be better suited for textblocks
div.classList.add("finalBlock");
div.textContent = text; // for text only, use textContent
return div;
});
document.body.append(...textblocks); // append all in one function call
如果存在 parent child 关系,插入多个元素的最有效方法是使用文本作为模板:
const el = document.createElement('div');
el.innerHTML = `
<div class="final-block">Block One</div>
<div class="final-block">Block Two</div>
<div class="final-block">Block Three</div>
<div class="final-block">Block Four</div>
`;
// Then insert wherever you want
document.querySelector('#app').appendChild(el);
这比迭代更快,更容易理解。
如果您需要从数组中生成那些 children:
const el = document.createElement('ul');
el.innerHTML = ['One', 'Two', 'Three'].reduce((a, c) => a + `<li>${c}</li>`, '');
JavaScript
var textBlock = document.createElement('div');
textBlock.setAttribute('class', 'finalBlock');
var addFinalBlock = document.getElementsByClassName('block')[0];
addFinalBlock.appendChild(textBlock);
textBlock.innerHTML = "Make this block a text block";
// -------
var textBlock2 = document.createElement('div');
textBlock2.setAttribute('class', 'finalBlock');
var addFinalBlock2 = document.getElementsByClassName('block')[0];
addFinalBlock2.appendChild(textBlock2);
textBlock2.innerHTML = "Make this block a text block2";
// -------
var textBlock3 = document.createElement('div');
textBlock3.setAttribute('class', 'finalBlock');
var addFinalBlock3 = document.getElementsByClassName('block')[0];
addFinalBlock3.appendChild(textBlock3);
textBlock3.innerHTML = "Make this block a text block3";
// -------
var textBlock4 = document.createElement('div');
textBlock4.setAttribute('class', 'finalBlock');
var addFinalBlock4 = document.getElementsByClassName('block')[0];
addFinalBlock4.appendChild(textBlock4);
textBlock4.innerHTML = "Make this block a text block4";
我想创建 4 个具有不同文本的元素。 class 需要保持不变。我想我用了很多代码来做这件事。
也许有人知道如何让这段代码看起来更漂亮、更高效?
祝福 谢谢!
如果您多次执行同样的事情,请使用循环。 在数组中存储不同的文本,然后使用forEach:
遍历它var text = ["text1", "tex2", "text3", "text4"];
text.forEach(function(el) {
var div = document.createElement("div");
div.className = "finalBlock";
div.innerHTML = el;
document.body.appendChild(div);
});
或使用 for 循环:
var text = ["text1", "tex2", "text3", "text4"];
for(var i = 0; i < text.length; i += 1) {
var div = document.createElement("div");
div.className = "finalBlock";
div.innerHTML = text[i];
document.body.appendChild(div);
}
我相信更好的方法是使用 fragment
.
var docFrag = document.createDocumentFragment();
for(var i = 0; i < divs.length; i++) {
docFrag.appendChild(divs[i]); // Note that this does NOT go to the DOM
}
document.body.appendChild(docFrag); // Appends all divs at once
这段代码可以正常工作。如果你想在同一个 HTML 标签上添加多个元素。
var element1= "<br/>"
var element2="<input type='text' />"
var element3= "<br/>"
var onLine = document.getElementById("onLine"); /* This is <ul id="onLine"></ul> */
var on = document.createElement("div");
on.innerHTML = element1+ element3+ element3
on.setAttribute("style", "background-color:rgba(0, 0,
0, 0.3);color:white;border-radius:40px;margin-
bottom:30px;padding: 10px;width: 230px;");
on.appendChild(document.createTextNode('Custom text'));
onLine.appendChild(on);
您可以创建一个 for 循环来创建多元素
let elementsCount = 3;
for (let i = 0; i < elementsCount; i++) {
const element = document.createElement('div');
document.body.appendChild(element);
}
您可以使用 Array.prototype.map() method. It is similar to .forEach() 但您 return 结果。
const textblocks = ["textblock 1", "textblock 2", "textblock 3", "textblock 4"].map(text => {
let div = document.createElement("div"); // p tag might be better suited for textblocks
div.classList.add("finalBlock");
div.textContent = text; // for text only, use textContent
return div;
});
document.body.append(...textblocks); // append all in one function call
如果存在 parent child 关系,插入多个元素的最有效方法是使用文本作为模板:
const el = document.createElement('div');
el.innerHTML = `
<div class="final-block">Block One</div>
<div class="final-block">Block Two</div>
<div class="final-block">Block Three</div>
<div class="final-block">Block Four</div>
`;
// Then insert wherever you want
document.querySelector('#app').appendChild(el);
这比迭代更快,更容易理解。
如果您需要从数组中生成那些 children:
const el = document.createElement('ul');
el.innerHTML = ['One', 'Two', 'Three'].reduce((a, c) => a + `<li>${c}</li>`, '');