javascript - JSON & Javascript - 动态 DOM 操作
问题描述
我正在学习 JSON 和 DOM 操作。我一直在尝试让我的 HTML 代码动态更新 JSON 文件中的信息。
<div class="towns">
<div class="franklin">
<h3 class="town-title">Franklin</h3>
<p class="f-motto">ssd</p>
<p class="f-year">1232</p>
<p class="f-pop">123123123</p>
<p class="f-rain">1213</p>
</div>
<div class="greenville">
<h3 class="town-title">Greenville</h3>
<p class="g-motto">ssd</p>
<p class="g-year">1232</p>
<p class="g-pop">123123123</p>
<p class="g-rain">1213</p>
</div>
<div class="springfield">
<h3 class="town-title">Springfield</h3>
<p class="s-motto">ssd</p>
<p class="s-year">1232</p>
<p class="s-pop">123123123</p>
<p class="s-rain">1213</p>
</div>
</div>
这是我用来检索数据和更新 DOM 的 Javascript。
<script>
var requestURL = 'https://byui-cit230.github.io/weather/data/towndata.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'json';
request.send();
request.onload = function() {
var stats = request.response;
populateHeader(stats);
showHeroes(stats);
}
function populateHeader (jsonOBJ) {
var motto = jsonOBJ['towns'][0]['motto'];
document.querySelector('.f-motto').innerHTML = motto;
}
</script>
截至目前,我知道我可以通过在 jsonOBJ['towns'][number]; 中输入一个数字来静态更新“座右铭”。但是,我想做这样的事情:
var n = 0;
var motto = jsonOBJ['towns'][n]['motto'];
并将所有类设置为 .motto 而不是 .__-motto
我试过做一个for循环来动态改变变量'n';但是,我在所有三个元素中只得到了相同的座右铭。任何帮助都是极好的。
谢谢!
json代码:
{
"towns" : [
{
"name": "Franklin",
"motto": "Where you will grow!",
"yearFounded": 1788,
"currentPopulation": 30458,
"averageRainfall": 21,
"events" : [
"March 4: March to the Drum of Donuts",
"September 5 - 11: Founder Days",
"December 1 - 26: Christmas in the Heart"
]
},
{
"name": "Greenville",
"motto": "Green is our way of life.",
"yearFounded": 1805,
"currentPopulation": 33458,
"averageRainfall": 25,
"events" : [
"February 10-12: Greenbration",
"May 8 - 18: Greenville Founder Days",
"June 20: Verde and Valiant Day",
"November 15-16: Greensome Gathering"
]
},
{
"name": "Placerton",
"motto": "Positive Placement in Placerton.",
"yearFounded": 1946,
"currentPopulation": 512,
"averageRainfall": 39,
"events" : [
"July 4: A Blaze of Glory",
"October 20: Fall through Fall"
]
},
{
"name": "Springfield",
"motto": "Where everyone is lifted.",
"yearFounded": 1826,
"currentPopulation": 17852,
"averageRainfall": 17,
"events" : [
"January 8: Spring into Winter",
"April 10-20: Celebration of Life",
"July 31-Aug 15: Dog Days of Summer Festival"
]
}
]
}
解决方案
尝试使用 forEach 来获取您的n
.
//use querySelectorAll to get all the html elements in one go
var mottos = document.querySelectorAll('.f-motto');
//forEach passes in each element and it's index for each iteration
jsonOBJ['towns'].forEach(function(town, index){
mottos[index].innerHTML = town.motto;
});
推荐阅读
- python - Django,NoReverseMatch。我应该在这段代码中写什么?
- xml - 根据大小拆分xml元素
- ignite - 点燃持久内存设置
- html - 使带有溢出隐藏的粘性元素展开
- vba - Visio PasteSpecial 返回编译错误:预期的函数或变量
- java - 将字符映射转换为数组
- c# - Unity3d 2019.3.10 UnityEngine.UI;未找到
- javascript - Hot Reload 使用 svelte-routing 在 Electron Svelte 中显示空白屏幕
- openapi - 使用 Quarkus 的反应式 REST 服务的 OpenAPI 规范
- docker - 如何在设置中启动 docker 容器?