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

使用querySelectorAll实现多圆形进度条时报getAttribute不存在错误如何解决

报错原因分析
  • document.querySelectorAll() 返回的是包含所有匹配元素的NodeList类数组集合,而非单个DOM元素,集合本身没有getAttribute方法,只有集合内的单个DOM元素支持该API,直接对circle变量调用getAttribute就会抛出你遇到的类型错误。
  • 同理原代码中直接对circle设置style属性、对number设置innerHTML也会失效,因为这两个变量都是集合,不能直接操作单个元素的属性。
多圆形进度条适配方案

核心思路是遍历每一个进度条元素,和对应的百分比文本绑定,给每一组单独执行计数动画逻辑,修改后的JS代码如下:

const circles = document.querySelectorAll(".progress");
const numbers = document.querySelectorAll(".progress-percent");
const cir = 377;

// 按索引匹配每一组进度条与百分比文本,分别执行动画逻辑
circles.forEach((circle, index) => {
  // 读取当前进度条的目标值
  const targetVal = parseInt(circle.getAttribute("data-value"));
  const currentNumberEl = numbers[index];
  let counter = 0;

  // 每组进度单独绑定定时器
  const timer = setInterval(() => {
    if (counter === targetVal) {
      clearInterval(timer);
      return;
    }
    counter += 1;
    circle.style.strokeDashoffset = cir - (cir / 100) * targetVal;
    currentNumberEl.innerHTML = counter;
  }, 25);
})

原代码还存在clearInterval()未传入定时器ID的问题,修改后给每个定时器单独标记ID,清除时传入对应ID即可正常终止计时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:54:02