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

设置<li>元素字体大小时触发Uncaught TypeError错误求助

问题排查与解决

错误根源

你遇到的Uncaught TypeError: Cannot set properties of undefined (setting 'fontSize')是因为:

  • document.getElementsByClassName()返回的是HTMLCollection(类数组对象),用for...in循环会遍历该对象的所有可枚举属性,包括length、item等非DOM元素属性。当循环到这些属性时,taskList[task]是undefined,自然无法设置style.fontSize,从而抛出错误。
  • 代码中let i; i++;属于无效代码,i未初始化就自增会得到NaN,不过这不是当前报错的直接原因。

修复方案

以下几种写法都可以解决问题:

方案1:使用for...of循环(ES6+)

HTMLCollection是可迭代对象,for...of会直接遍历其中的DOM元素:

<ul id="task-list">
  <li class="task">Gorev1</li>
  <li class="task">Gorev2</li>
  <li class="task">Gorev3</li>
  <li class="task">Gorev4</li>
  <li class="task">Gorev5</li>
</ul>

<script>
  let taskList = document.getElementsByClassName("task");

  for (let task of taskList) {
    task.style.fontSize = "50px";
    task.style.color = "red";
  }
</script>

方案2:传统for循环(兼容所有浏览器)

基于HTMLCollection的length属性遍历索引:

<ul id="task-list">
  <li class="task">Gorev1</li>
  <li class="task">Gorev2</li>
  <li class="task">Gorev3</li>
  <li class="task">Gorev4</li>
  <li class="task">Gorev5</li>
</ul>

<script>
  let taskList = document.getElementsByClassName("task");

  for (let i = 0; i < taskList.length; i++) {
    taskList[i].style.fontSize = "50px";
    taskList[i].style.color = "red";
  }
</script>

方案3:转为数组后用forEach遍历

用Array.from()将HTMLCollection转为数组,再使用数组方法遍历:

<ul id="task-list">
  <li class="task">Gorev1</li>
  <li class="task">Gorev2</li>
  <li class="task">Gorev3</li>
  <li class="task">Gorev4</li>
  <li class="task">Gorev5</li>
</ul>

<script>
  let taskList = Array.from(document.getElementsByClassName("task"));

  taskList.forEach(task => {
    task.style.fontSize = "50px";
    task.style.color = "red";
  });
</script>

内容的提问来源于stack exchange,提问作者Hasan Aydeğer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:06:47