我想将 json 文件中的数据添加到 HTML 表中,但我不知道如何正确执行此操作...
我有一个 json 文件,其中三个城市的天气被设置为对象。对于每个城市,我有 3 天的天气(最低温度、最高温度、风和图片)。该表一次显示一个城市的天气(3 天的天气预报)。
我还有一个选择下拉菜单,您可以在其中选择不同的城市作为该城市的天气预报。
如何将 json 数据放入表中,并在选择另一个城市时更改它...
我的 json 文件:
[{
"city": "Amsterdam",
"weer": [
{
"minTemp": 6,
"maxTemp": 14,
"wind": "geen",
"picto": "picto/rain%20(1).png"
},
{
"minTemp": 4,
"maxTemp": 13,
"wind": "NO",
"picto": "picto/rainsun.png"
},
{
"minTemp": 5,
"maxTemp": 15,
"wind": "NW",
"picto": "picto/rainsun.png"
},
{
"minTemp": 9,
"maxTemp": 16,
"wind": "ZW",
"picto": "picto/rain%20(1).png"
}
]
},
{
"city": "Antwerpen",
"weer": [
{
"minTemp": 10,
"maxTemp": 18,
"wind": "NO",
"picto": "picto/rain%20(1).png"
},
{
"minTemp": 10,
"maxTemp": 18,
"wind": "NO",
"picto": "picto/rainsun.png"
},
{
"minTemp": 10,
"maxTemp": 18,
"wind": "NO",
"picto": "picto/rainsun.png"
},
{
"minTemp": 10,
"maxTemp": 18,
"wind": "NO",
"picto": "picto/sun.png"
}
]
},
{
"city": "Barcalona",
"weer": [
{
"minTemp": 16,
"maxTemp": 24,
"wind": "NO",
"picto": "picto/sun.png"
},
{
"minTemp": 14,
"maxTemp": 22,
"wind": "NW",
"picto": "picto/sun.png"
},
{
"minTemp": 15,
"maxTemp": 23,
"wind": "ZW",
"picto": "picto/rainsun.png"
},
{
"minTemp": 18,
"maxTemp": 25,
"wind": "Z",
"picto": "picto/sun.png"
}
]
}]
我的 JavaScript 文件:
async function getJson(url) {
let response = await fetch(url);
return response.json();
}
async function main() {
let weerdata = await getJson('europa_weer1.json');
let options = "";
// to set the city names in the select "steden" (cities)
for (var stad in weerdata){
options += '<option>' + weerdata[stad].city + '</option>';
}
console.log(options);
document.getElementById('steden').innerHTML = options;
}
main();
// to set the date in table aswell, for the days of the forecast.
showDate();
function showDate() {
const today = new Date();
const tomorrow = new Date(today);
const nextDay = new Date(today);
const dayAfter = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
nextDay.setDate(nextDay.getDate() + 2);
dayAfter.setDate(dayAfter.getDate() + 3);
document.getElementById('day1').innerHTML = today.toDateString();
document.getElementById('day2').innerHTML = tomorrow.toDateString();
document.getElementById('day3').innerHTML = nextDay.toDateString();
document.getElementById('day4').innerHTML = dayAfter.toDateString();
}
我的 HTML 表格:
<div class="total">
<h1>Het weer in Europese steden</h1>
<p>
<label for="steden">Kies je stad:</label>
<select id="steden" name="steden" >
</select>
</p>
<table class="week" id="weer">
<tr class="days" id="header">
<th id="day1"></th>
<th id="day2"></th>
<th id="day3"></th>
<th id="day4"></th>
</tr>
<tr class="picto" id="pics">
<td><img id="img1" src="" height="40" alt=""></td>
<td><img id="img2" src="" height="40" alt=""></td>
<td><img id="img3" src="" height="40" alt=""></td>
<td><img id="img4" src="" height="40" alt=""></td>
</tr>
<tr class="min" id="mTemp">
<td>Min. Temperatuur</td>
<td>Min. Temperatuur</td>
<td>Min. Temperatuur</td>
<td>Min. Temperatuur</td>
</tr>
<tr class="mintemp" id="mNum">
<td id="min1"></td>
<td id="min2"></td>
<td id="min3"></td>
<td id="min4"></td>
</tr>
<tr class="max" id="maTemp">
<td>Max. Temperatuur</td>
<td>Max. Temperatuur</td>
<td>Max. Temperatuur</td>
<td>Max. Temperatuur</td>
</tr>
<tr class="maxtemp" id="maNum">
<td id="max1"></td>
<td id="max2"></td>
<td id="max3"></td>
<td id="max4"></td>
</tr>
<tr class="wind" id="wind">
<td id="wind1"></td>
<td id="wind2"></td>
<td id="wind3"></td>
<td id="wind4"></td>
</tr>
</table>
</div>
<script src="script/weersteden.js">
</script>
最佳答案
- 让
weerdata
成为全局变量。 - 使用
addEventListener("change", function() {...
监听 select 上的事件。 - 创建一个函数来获取所选城市并显示值。
var weerdata = [
{"city": "Amsterdam","weer": [{"minTemp": 6, "maxTemp": 14, "wind": "geen", "picto": "picto/rain%20(1).png"},
{"minTemp": 4, "maxTemp": 13, "wind": "NO", "picto": "picto/rainsun.png"},
{"minTemp": 5, "maxTemp": 15, "wind": "NW", "picto": "picto/rainsun.png"},
{"minTemp": 9, "maxTemp": 16, "wind": "ZW", "picto": "picto/rain%20(1).png"}]},
{"city": "Antwerpen","weer": [{"minTemp": 10, "maxTemp": 18, "wind": "NO", "picto": "picto/rain%20(1).png"},
{"minTemp": 10, "maxTemp": 18, "wind": "NO", "picto": "picto/rainsun.png"},
{"minTemp": 10, "maxTemp": 18, "wind": "NO", "picto": "picto/rainsun.png"},
{"minTemp": 10, "maxTemp": 18, "wind": "NO", "picto": "picto/sun.png"}]},
{"city": "Barcalona", "weer": [{ "minTemp": 16, "maxTemp": 24, "wind": "NO", "picto": "picto/sun.png"},
{"minTemp": 14, "maxTemp": 22, "wind": "NW", "picto": "picto/sun.png"},
{"minTemp": 15, "maxTemp": 23, "wind": "ZW", "picto": "picto/rainsun.png"},
{"minTemp": 18, "maxTemp": 25, "wind": "Z", "picto": "picto/sun.png" }]}];
async function getJson(url) {
let response = await fetch(url);
return response.json();
}
async function main() {
// Uncomment to load dynamically:
// let weerdata = await getJson('europa_weer1.json');
let options = "";
// to set the city names in the select "steden" (cities)
for (var stad in weerdata) {
options += '<option>' + weerdata[stad].city + '</option>';
}
var steden = document.getElementById('steden');
steden.innerHTML = options;
showWeather(weerdata[0].city);
steden.addEventListener("change", function(ev) {
showWeather(steden.value);
});
}
function showWeather(city) {
var data = weerdata.filter(el => el.city == city)[0].weer;
var mins = document.querySelectorAll("#mNum td");
var maxs = document.querySelectorAll("#maNum td");
var winds = document.querySelectorAll("#wind td");
var pictos = document.querySelectorAll("#pics td img");
for (var i = 0; i < 4; i++) {
mins[i].innerText = data[i].minTemp;
maxs[i].innerText = data[i].maxTemp;
winds[i].innerText = data[i].wind;
pictos[i].src = data[i].picto;
}
}
main();
<label for="steden">Kies je stad:</label>
<select id="steden" name="steden">
</select>
<table class="week" id="weer">
<tr class="days" id="header">
<th id="day1"></th> <th id="day2"></th><th id="day3"></th><th id="day4"></th>
</tr><tr class="picto" id="pics">
<td><img id="img1" src="" height="40" alt=""></td><td><img id="img2" src="" height="40" alt=""></td><td><img id="img3" src="" height="40" alt=""></td><td><img id="img4" src="" height="40" alt=""></td>
</tr><tr class="min" id="mTemp">
<td>Min.</td><td>Min.</td><td>Min.</td><td>Min.</td>
</tr><tr class="mintemp" id="mNum">
<td id="min1"></td><td id="min2"></td><td id="min3"></td><td id="min4"></td>
</tr><tr class="max" id="maTemp">
<td>Max.</td><td>Max.</td><td>Max.</td><td>Max.</td>
</tr><tr class="maxtemp" id="maNum">
<td id="max1"></td><td id="max2"></td><td id="max3"></td><td id="max4"></td>
</tr><tr class="wind" id="wind">
<td id="wind1"></td><td id="wind2"></td><td id="wind3"></td><td id="wind4"></td>
</tr>
</table>
</div>
关于javascript - 使用 javascript 在 HTML 表中添加 json 数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61147511/