javascript - 使用 javascript 创建动态列表
问题描述
我创建了一个简单的待办事项列表,它获取输入的值并将其放置在 div 中并将一些类附加到它们,一切正常,但我如何修复 for 循环并使其每次都工作并在彼此下添加多个 div而不是改变现有的。这是我的代码:
let dynamicList = document.querySelector("#dynamic-list"),
dynamicDiv = document.createElement("div"),
dynamicClass = document.querySelector(".dynamic"),
circle = document.querySelector(".circle"),
paragraphTest = document.createElement("p"),
circleTest = document.createElement("div");
input.addEventListener("keypress", function(e){
value = input.value
if(e.key == "Enter"){
for(i=0; i<=dynamicList.children.length; i++){
dynamicList.insertBefore(dynamicDiv, dynamicClass.nextSibling)
let sibling = dynamicClass.nextSibling;
sibling.classList.add("dynamic")
sibling.appendChild(circleTest)
circleTest.classList.add("circle")
sibling.appendChild(paragraphTest)
paragraphTest.innerHTML = input.value
}
})
<div id="dynamic-list">
<div class="dynamic"><div class="circle"></div><p class="paragraph">some dummy text/p></div>
</div>
这就是我的意思:
这就是我添加文本时发生的情况,它完美地工作。但是当我添加另一个文本时,它会覆盖第一个文本,而不是添加另一个 div。
解决方案
每次要创建该元素时,都应该使用 createElement 方法。只使用一次,它只会创建一个,所以如果你改变它的属性,你正在编辑第一个元素(唯一一个已经创建的元素)。
所以代码应该这样写:
let dynamicList = document.querySelector("#dynamic-list"),
dynamicClass = document.querySelector(".dynamic"),
circle = document.querySelector(".circle");
input.addEventListener("keypress", function(e) {
value = input.value
if (e.key == "Enter") {
const paragraphTest = document.createElement("p"),
dynamicDiv = document.createElement("div"),
circleTest = document.createElement("div");
for (i = 0; i <= dynamicList.children.length; i++) {
dynamicList.insertBefore(dynamicDiv, dynamicClass.nextSibling)
let sibling = dynamicClass.nextSibling;
sibling.classList.add("dynamic")
sibling.appendChild(circleTest)
circleTest.classList.add("circle")
sibling.appendChild(paragraphTest)
paragraphTest.innerHTML = input.value
}
}
})
推荐阅读
- reactjs - React Native 根据 API 请求自动打开应用程序屏幕,就像 whatsapp / Viber 接听电话一样
- vba - 如何通过 VBA 在 MS Access 中更改打开的“选项卡式表单”的顺序
- java - Android Room:迁移未正确处理崩溃 - 预期 INTEGER 找到 DATE
- visual-studio-code - 使用 quickOpen 时可选择触发 keepEditor 的 VSCode 键盘快捷键?
- amazon-s3 - S3A 客户端和本地 S3 模拟
- javascript - LokiJS 是否支持 ISO-8601 日期格式?
- python - 将基本网址加入到scrapy中的相对网址
- eclipse - 在 Eclipse 中更改 Cmake 生成器
- html - 在相对部分使用多个斜杠解析 URI
- powershell - 如何在没有科学记数法的情况下将长整数转换为字符串