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

JS获取表格值时报Uncaught TypeError读取textContent错误如何解决

问题根因

你遇到的Uncaught TypeError: Cannot read properties of undefined (reading 'textContent')报错,核心原因是传入setCarrito函数的objeto对象不是表格行<tr>元素:

  • 你在addCarrito中传入的是e.target.parentElement,如果你的.btn-success按钮是放在表格单元格<td>内部的,那么按钮的直接父元素是单个<td>,不是整行<tr>
  • 在单个<td>下执行querySelectorAll('td')只能拿到空节点集合,访问索引[1]、[2]自然返回undefined,读取textContent就触发报错

修复方案

第一步:修正父元素获取逻辑

把addCarrito中传参逻辑换成用closest方法精准匹配表格行,不管按钮嵌套多少层都能找到对应的整行:

const addCarrito = e => {
  if (e.target.classList.contains('btn-success')) {
    console.log(e.target.dataset.id)
    // 替换原来的e.target.parentElement,找最近的<tr>元素
    setCarrito(e.target.closest('tr'))
  }
  e.stopPropagation()
}

第二步:增加空值校验避免报错

可以在setCarrito中增加前置校验,即使节点异常也不会抛出错误:

const setCarrito = objeto => {
  // 前置校验,节点不存在直接返回
  const tds = objeto?.querySelectorAll('td')
  const btn = objeto?.querySelector('.btn-success')
  if (!tds || tds.length < 3 || !btn) return

  const producto = {
    id: btn.dataset.id,
    nombre: tds[1].textContent,
    descripcion: tds[2].textContent,
    cantidad: 1
  }
  console.log(producto)
}

其他潜在问题提醒

你提供的代码中pintarCards函数使用的templateCard变量没有提前声明定义,仅声明了templateCarrito,请补充templateCard的获取逻辑,否则会触发变量未定义报错。


内容的提问来源于stack exchange,提问作者Darwin Quiñones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:04