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

解决JS报错:items[i].innerText.splice is not a function

错误原因

你遇到的报错核心是对数据类型的方法调用错误,具体有3个问题:

  • items[i].innerText 返回值是字符串类型,splice() 是数组专属的操作方法,字符串原型上没有这个方法,直接调用必然抛出类型错误
  • 代码中裸写的 splice(-1, -4) 没有绑定调用主体,运行时会直接抛出「splice未定义」的错误,且字符串截取对应的原生方法是slice(),不是数组用的splice()
  • 你每次操作都重复读取innerText,如果中途修改了元素文本,后续读取到的是修改后的值,会导致逻辑计算错误
修复后代码

先把每个元素的原始文本一次性缓存到变量,用字符串原生的slice()方法做截取,逻辑和你的预期完全对齐:

function convert() {
  const items = document.getElementsByClassName("spa");
  for (let i = 0; i < items.length; i++) {
    // 缓存原始文本,避免重复读取DOM属性
    const rawText = items[i].innerText.trim();
    // 截取最后1位拿到乘数(对应你写的splice(-1)逻辑)
    const multiplier = rawText.slice(-1);
    // 截掉最后4位固定后缀(即" x N"部分),移除人民币符号
    const clean = rawText.slice(0, -4).replace('¥', '');
    console.log(clean, multiplier)
    // 示例:这里可以直接计算总价替换原文本,按需修改即可
    items[i].innerText = Number(clean) * Number(multiplier);
  }
};
convert()

对应你的测试DOM结构,运行后会正确解析:

  • 第一个.spa元素解析出价格58.00、乘数2,计算结果为116
  • 第二个.spa元素解析出价格8.00、乘数4,计算结果为32
注意事项
  • 不要混淆数组方法和字符串方法:splice()会直接修改原数组,仅适用于数组;字符串截取请使用slice()、substring()这类字符串原生方法
  • 如果你的文本后缀长度不固定(比如乘数是两位数的情况),可以用split(' x ')拆分字符串取内容,适配性更强:
    const [pricePart, multiplier] = rawText.replace('¥', '').split(' x ');
    
  • getElementsByClassName返回的是动态HTMLCollection,如果遍历过程中会改动DOM结构,建议先转成静态数组再遍历:const items = Array.from(document.getElementsByClassName("spa"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:21:37