javascript - 使用 fetched API 创建多个元素
问题描述
JS新手来了!我正在尝试使用 Fetch 使用来自 jsonplaceholder 的假 ToDos 制作待办事项列表。我想获取五个不同的 ToDo 并将它们放入我列表中的不同列表项中。但不知何故,五个待办事项中只有一个出现了。
HTML:
<ul id="result">
</ul>
JS:
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(function(response) {
return response.json()
})
.then((response) => {
console.log(response)
var result = document.getElementById('result')
result.innerHTML = '<li>' + response.title '</li>'
})
fetch("https://jsonplaceholder.typicode.com/todos/2")
.then(function(response) {
return response.json()
})
.then((response) => {
console.log(response)
var result = document.getElementById('result')
result.innerHTML = '<li>' + response.title '</li>'
})
fetch("https://jsonplaceholder.typicode.com/todos/3")
.then(function(response) {
return response.json()
})
.then((response) => {
console.log(response)
var result = document.getElementById('result')
result.innerHTML = '<li>' + response.title '</li>'
})
fetch("https://jsonplaceholder.typicode.com/todos/4")
.then(function(response) {
return response.json()
})
.then((response) => {
console.log(response)
var result = document.getElementById('result')
result.innerHTML = '<li>' + response.title '</li>'
})
fetch("https://jsonplaceholder.typicode.com/todos/5")
.then(function(response) {
return response.json()
})
.then((response) => {
console.log(response)
var result = document.getElementById('result')
result.innerHTML = '<li>' + response.title '</li>'
})
解决方案
设置innerHTML
替换目标元素的内容,而不是添加到它。您应该使用 operator+=
或 method insertAdjacentHTML
,或者最好append
使用带有构造元素的方法。后者将避免包含 html 特殊字符的文本出现问题,并且更易于维护。
fetch 部分似乎没问题,除非您无法保证 fetch 调用将返回的顺序(它们是异步的)。
以下是解决问题的方法:
function appendTodo(value) {
const li = document.createElement('li');
li.innerText = value;
document.querySelector('#result').append(li);
}
appendTodo('Todo 1');
appendTodo('That remains to do');
appendTodo('This one also');
appendTodo('It has a <tag>');
appendTodo('Hey !');
<ul id="result">
</ul>
推荐阅读
- shopware - Shopware 6 插件的加载顺序是什么?
- android - Android Paging 3 - 滚动和加载新页面时出现闪烁、故障或位置跳跃
- amazon-web-services - terraform - 如何从“外部”数据返回 cidr 块?
- javascript - 使用 reanimated v2 中提供的钩子时,Reanimated V2.0.0-rc.0 不同的线程错误
- python - 是否可以使用 Android Studio 在 Flutter 中编写 python 代码?
- java - JVM可以交换这两行吗?
- java - 时间成本和空间成本分析问题
- python - 在 Python 中使用 SimpleITK 读取原始数据文件的问题
- node.js - 节点 | 错误中间件不处理异常
- cron - 如何在 Fedora 33 中通过 cron.daily 重新启动应用程序