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

点击按钮循环遍历DOM中对象与数组时仅显示最后一个对象问题问询

问题根因

每次触发点击事件时,你的代码都会完整遍历整个数组,每一轮循环都会直接覆盖DOM节点的文本内容,循环执行结束后页面自然只会保留数组最后一项的内容。另外你代码中的循环变量i没有加声明关键字,会隐式创建为全局变量,存在变量污染风险。

修复方案

根据你的实际需求可以选择以下两种实现:

场景1:每次点击按钮切换展示下一条数据,循环遍历

在全局作用域声明一个变量记录当前展示的数组下标,每次点击按钮时下标自增,通过对数组长度取余实现循环效果,再将对应下标的数据渲染到页面即可。
完整代码:

<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>
<body>
 <button id="btn">press</button>
 <h1 id="name">name </h1>
 <h1 id="age">age</h1>
 <script >
  const info =[{name : "john", age :"20"},{name : "bob", age :"25"},{name : "wil", age :"30"}]
  // 记录当前展示的数组下标
  let currentIndex = 0

const btn = document.getElementById('btn')
const name1 = document.getElementById('name')
const age = document.getElementById('age')

btn.addEventListener('click', show)

// 页面加载默认展示第一条,不需要可以删掉
show()

function show(){
  name1.innerHTML = info[currentIndex].name
  age.innerHTML = info[currentIndex].age
  // 下标自增后对数组长度取余,超过数组长度自动回到0
  currentIndex = (currentIndex + 1) % info.length
}
 </script>
</body>
</html>

场景2:点击一次按钮就将所有数组内容全部展示在页面

修改循环内的赋值逻辑为拼接内容即可:

function show(){
  // 先清空原有内容避免重复拼接
  name1.innerHTML = '姓名:<br>'
  age.innerHTML = '年龄:<br>'
  for(let i = 0; i < info.length; i++){
    name1.innerHTML += info[i].name + '<br>'
    age.innerHTML += info[i].age + '<br>'
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:15:02