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

使用forEach通过索引获取下一个元素时出现Uncaught TypeError错误

解决"Cannot read properties of undefined (reading 'getBoundingClientRect')"错误

错误原因很明确:当forEach循环执行到最后一个元素时,index + 1会超出timeslot集合的长度,此时timeslot[index + 1]返回undefined,调用getBoundingClientRect()自然会抛出类型错误。

给你两种修复方案:

方案一:提前终止最后一个元素的循环

直接在循环内判断当前元素是否为最后一个,如果是则跳过后续操作:

var timeslot = document.getElementsByClassName('uk-card');
console.log(timeslot[3]);

Array.from(timeslot).forEach(function(element, index) {
  // 最后一个元素没有下一个元素,直接跳过
  if (index === timeslot.length - 1) return;
 
  var rect = element.getBoundingClientRect();
  var next = timeslot[index + 1];
  var rectNext = next.getBoundingClientRect();
  console.log(rect.top, rect.right, rect.bottom, rect.left);
  console.log(rectNext.top, rectNext.right, rectNext.bottom, rectNext.left);
});

方案二:先判断下一个元素是否存在

在调用getBoundingClientRect()之前,先检查next是否为有效元素:

var timeslot = document.getElementsByClassName('uk-card');
console.log(timeslot[3]);

Array.from(timeslot).forEach(function(element, index) {
 
  var rect = element.getBoundingClientRect();
  var next = timeslot[index + 1];
  
  // 只有当下一个元素存在时,才执行后续的坐标获取和打印操作
  if (next) {
    var rectNext = next.getBoundingClientRect();
    console.log(rect.top, rect.right, rect.bottom, rect.left);
    console.log(rectNext.top, rectNext.right, rectNext.bottom, rectNext.left);
  }
});

两种方案都能解决报错问题,考虑到你需要绘制元素间的连接线,最后一个元素没有后续元素可连接,所以不需要处理,选哪种都可以。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:48:21