You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTML段落标签中展示带条件判断的for循环执行结果?

解决FizzBuzz结果在HTML中正确展示的问题

我一眼就看出问题所在啦——你现在的代码每次循环都会完全覆盖<p>标签里的内容,所以循环跑完后,只会显示最后一次循环的结果(也就是100)。

问题根源

你用的document.getElementById("fizzbuzz").innerHTML = "XXX"是把元素的内容直接替换成新值,而不是把新内容追加进去。循环执行100次,前面99次的结果都被后面的覆盖了,最后就只剩第100次的输出。

两种可行的解决方案

方案1:先收集所有结果,一次性插入(性能更优)

DOM操作是比较消耗性能的,多次修改不如把所有结果先存在数组里,最后一次性插入到页面中:

// 初始化数组存储所有结果
const fizzBuzzResults = [];

for (let i = 1; i <= 100; i++) {
  if (i % 15 === 0) {
    fizzBuzzResults.push("FB");
  } else if (i % 3 === 0) {
    fizzBuzzResults.push("F");
  } else if (i % 5 === 0) {
    fizzBuzzResults.push("B");
  } else {
    fizzBuzzResults.push(i.toString());
  }
}

// 把数组转成带分隔符的字符串,插入到DOM中
document.getElementById("fizzbuzz").textContent = fizzBuzzResults.join(" ");

这里用textContent比innerHTML更安全,因为它不会把内容解析成HTML,避免潜在的XSS风险,而且性能也更好。

方案2:每次循环追加内容

如果想实时追加(虽然这里不需要),可以用+=来拼接内容,记得先清空元素原有内容,避免重复执行时内容叠加:

const fizzbuzzEl = document.getElementById("fizzbuzz");
// 先清空原有内容
fizzbuzzEl.textContent = "";

for (let i = 1; i <= 100; i++) {
  let currentValue;
  if (i % 15 === 0) {
    currentValue = "FB";
  } else if (i % 3 === 0) {
    currentValue = "F";
  } else if (i % 5 === 0) {
    currentValue = "B";
  } else {
    currentValue = i;
  }
  // 追加内容,用空格分隔每个结果
  fizzbuzzEl.textContent += `${currentValue} `;
}

你的HTML结构不需要改动

原来的HTML结构完全没问题,保持原样就好:

<div class="container"> 
  <h2 class="text-light">Opdracht 2</h2> 
  <p class="text-light" id="fizzbuzz"></p> 
</div>

内容的提问来源于stack exchange,提问作者Jitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:42:53