javascript - DOM 元素(节点)
问题描述
我是 JS 新手,我尝试编写一个简单的 for 循环。但它不起作用。我想做一个循环来写this is the paragraph 1, this is the paragraph 2, ...
这是我的代码:
<body>
<button id="makeP">Make yours paragraphs</button>
<div id="block">
<p></p>
</div>
<script>
document.getElementById("makeP").onclick = makeParagraph;
function makeParagraph() {
var text = "this is the paragraph ";
var i;
for (i = 0; i < 11; i++) {
var para = document.createElement("p");
var node = document.createTextNode(text + i);
para.appendChild(node);
var element = document.getElementById("block");
element.appendChild(para);
}
}
</script>
</body>
我尝试使用,document.write()
但在单击按钮后,我的所有文字都与文本一致,但按钮已被删除;
我尝试:
<script>
document.getElementById("makeP").onclick = makeParagraph;
function makeParagraph() {
var text = "this is the paragraph ";
var i;
for (i = 0; i < 11; i++) {
var para = document.createElement("p");
var node = document.createTextNode(text + i);
para.appendChild(node);
var element = document.getElementById("block");
element.appendChild(para);
}
}
</script>
它可以工作,但我不知道如何br
在每个循环之后使用来区分不同的行。
解决方案
您的问题是,每次单击按钮时,您都在运行整个循环-每次按下按钮时,它都会从头到尾运行。我假设您想一次打印一个段落,同时将计数器加一。
您可以使用使用外部变量的回调函数来了解连续的段落编号,如下所示:
let i = 1;
document.getElementById("makeP").onclick = () => {
if (10 >= i) { // limit the number of paragraphs to 10
return;
}
const text = "this is the paragraph ";
const para = document.createElement("p");
const node = document.createTextNode(text + i);
para.appendChild(node);
const element = document.getElementById("block");
element.appendChild(para);
++i;
}
将值在程序中不会改变的标记声明为常量也是一种很好的做法。每个段落应该已经在自己的行上,因为一个 html 段落在浏览器中显示为一个块,因此将占据其父容器的整个宽度(这里是整个文档)。
希望对您有所帮助,祝您学习 JS 好运!
推荐阅读
- sql-server - 如何将 SQL Server 中的数据库转换为 Azure SQL 中基于架构的对象
- html - 什么 CSS 属性将下拉菜单保留在其父 li 下?
- jquery - 避免jquery范围/初始化/问题/冲突的最佳实践?
- spring-boot - 在 Spring-security-oauth2 密码模式下,用户名和密码已被视为匿名
- xamarin.android - 关于 Activity.RunOnUIThread 的问题
- python - 如何使用 python 登录网站?
- python - 使用关键字参数'{'kwargs':{'slug':'long-establis'反转'post-detail'
- javascript - 反应 onChange 功能不适用于选择标签
- google-api - 个人资料信息的谷歌旧 api 不起作用,新的 API URL 是什么?
- typescript - 打字稿参数未对齐 (align)tslint(1)