我想在for循环中制作一个元素50次。我的代码如下:
function pGenerate() {
for (i, i <= 50; i++;) {
var newP = document.createElement("p");
var pText = document.createTextNode("sample paragraph");
newP.appendChild(pText);
var contentSection = document.getElementById("content");
document.body.insertBefore(newP, contentSection);
}
}
预期的结果是,它会生成50个<p>
标记,其中包含&#34;样本内容。实际结果很好......没什么。 https://jsfiddle.net/2L8reked/1/
我编写此代码的代码背后的思考过程如下:我基本上有一个循环设置循环50次。对于每个周期,我想创建一个p
标记,同时创建一个带有内容&#34;示例段落的文本节点。&#34;在下一步中,我抓住div
的ID #content
,然后我尝试使用insertBefore
填充该区域。
我的错误似乎是我使用insertBefore
的方式。在MDN上查看,它的定义是&#34;在参考节点之前插入指定节点作为当前节点的子节点。&#34; https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore
考虑到这个定义 - 我现在使用此理解我将p
标记作为#content
的子项插入(或尝试) 。我应该使用不同的方法吗?我误解了这是如何工作的吗?
我还尝试了innerHTML
方法,如下所示:https://jsfiddle.net/0e1ej9sk/1/
insertBefore
的逻辑背后的缺陷是什么?答案 0 :(得分:0)
您需要在i
初始化1
,并使用分号正确地分隔for
语句的所有部分,如下所示:
function pGenerate() {
for (var i = 1; i <= 50; i++) {
var newP = document.createElement("p");
var pText = document.createTextNode("sample paragraph (i=" + i + ")");
newP.appendChild(pText);
var contentSection = document.getElementById("content");
document.body.insertBefore(newP, contentSection);
}
}
pGenerate();
<div id="content"></div>
答案 1 :(得分:0)
您有3个语法错误。
将for循环中的i,
更改为1=1;
,然后删除最后;
i++;
到i++
function pGenerate() {
for (i=1; i <= 50; i++) {
var newP = document.createElement("p");
var pText = document.createTextNode("sample paragraph");
newP.appendChild(pText);
var contentSection = document.getElementById("content");
document.body.insertBefore(newP, contentSection);
}
}
window.onload = function() {
pGenerate();
}
<div id="content"></div>
答案 2 :(得分:0)
你可以这样做
function pGenerate() {
for (i=1; i <= 50; i++) {
var newP = document.createElement("p");
var pText = document.createTextNode("sample paragraph");
newP.appendChild(pText);
var contentSection = document.getElementById("content");
document.body.insertBefore(newP, contentSection);
}
}
document.ready(pGenerate);