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

如何在Javascript中通过对象动态填充button的name与value属性

实现方案

该需求可以实现,你之前嵌套循环失败的原因是嵌套逻辑会让每个按钮都遍历完整的toppings对象,最终所有按钮的属性都会被覆盖为对象最后一组键值对,不需要嵌套,只要将对象转为键值对数组后,通过遍历的索引和按钮集合的下标一一对应赋值即可。

代码示例

写法1:普通for循环(兼容性最好)

let toppings = {
  pepperoni: 0.25,
  meatballs: 0.35,
  mushrooms: 0.35,
  olives: 0.2,
};
let addCart = document.querySelectorAll('.add-cart');
// 将对象转为[[键, 值], [键, 值]]格式的二维数组
let toppingList = Object.entries(toppings);

// 遍历按钮,通过下标匹配对应的键值对
for (let i = 0; i < addCart.length; i++) {
  // 避免对象键值对数量少于按钮数量时报错
  if (i >= toppingList.length) break;
  const [name, value] = toppingList[i];
  addCart[i].name = name;
  addCart[i].value = value;
  // 若需要按钮显示对应配料名和价格,可添加下行代码
  // addCart[i].textContent = `${name} $${value}`
}

写法2:for of 写法

let toppings = {
  pepperoni: 0.25,
  meatballs: 0.35,
  mushrooms: 0.35,
  olives: 0.2,
};
let addCart = document.querySelectorAll('.add-cart');
let toppingList = Object.entries(toppings);

// 将节点集合转为数组后,用entries()同时拿到索引和元素
for (const [index, btn] of Array.from(addCart).entries()) {
  if (index >= toppingList.length) break;
  const [name, value] = toppingList[index];
  btn.name = name;
  btn.value = value;
}

注意事项

  • 建议保证toppings对象的键值对数量和按钮数量一致,避免出现部分按钮未赋值的情况
  • 给DOM原生属性赋值时,直接用元素.属性名和元素.setAttribute('属性名', 属性值)两种写法都可以正常生效
  • 如果按钮是动态生成的场景,更建议在创建按钮节点时直接赋值name和value,无需后续单独遍历处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 15:15:03