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

JS调用setAttribute报undefined错误的原因及修复方法

错误产生原因

代码里存在两处问题,共同触发了这个报错:

  • getElementsByClassName的入参写错了:这个API接收的参数是不带选择器前缀的纯类名字符串,你传入的是.myclass,会去查找class值为.myclass的元素,根本匹配不到你写了class="myclass"的目标节点,最终返回空的元素集合。
  • 方法调用的主体错了:getElementsByClassName返回值是HTMLCollection类型的类数组集合,不是单个DOM节点,集合本身不存在setAttribute方法,直接调用自然会抛出类型错误。

额外说明:就算修复了上面两个问题,直接调用setAttribute('width','100%')也无法给普通div这类元素改宽度——width是img、input、table等元素的原生属性,普通块元素的宽度需要修改内联style才能生效。

修正后的代码
function changewidth() {
  // 去掉类名前的.,正确获取所有带myclass类的元素集合
  let mynodes = document.getElementsByClassName('myclass');
  // 遍历集合里的每一个DOM节点
  for (const node of mynodes) {
    // 修改节点的内联样式宽度为100%
    node.style.width = '100%';
  }
}

如果页面上只有一个带myclass类的元素,也可以直接取集合第一个元素操作,不需要遍历:mynodes[0].style.width = '100%'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:03:29