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

修复循环处理.price类标签时span被作为字符串插入的问题并优化代码

问题

我网页里有多个class为price的p标签,结构如下:

<p class="price">Price: 45$</p>
<p class="price">Price: 32$</p>

我需要把标签内的文本拆成两个span标签,最终要变成这样:

<p class="price"><span class='h1'>Price:</span> <span class="h2">45$</span></p>

我写了下面的代码,但插入的span被当成纯文本显示,没有被解析成HTML标签:

let price = $(".price");
for (let i = 0; i < price.length; i++) {
    let priceTitle = price[i].innerText.split(":")[0];
    let priceToPay = price[i].innerText.split(":")[1];
    price[i].innerText = ''; // 清空price标签内容
    

    $(".price")[i].append("<span class='h1'>"+ priceTitle+"</span> <span class='h2'>"+ priceToPay +"</span>");

}

}
修复方案

问题根源

你这里的问题出在:$(".price")[i]取到的是原生DOM节点,原生DOM的append()方法只会把传入的字符串当作纯文本插入,不会解析成HTML。而jQuery的append()方法才支持解析HTML字符串,但你没通过jQuery对象调用它。

优化后的代码

$(".price").each(function() {
    // 按冒号加空格拆分,保留标题和价格部分
    const [title, price] = $(this).text().split(/:(?= )/);
    // 直接设置元素的HTML内容
    $(this).html(`<span class='h1'>${title}:</span> <span class='h2'>${price}</span>`);
});

代码解析

  • 用jQuery的.each()遍历所有.price元素,比手动写for循环更简洁,当前元素直接通过this获取,不用重复选择DOM
  • 用正则/(?= )/拆分文本,确保冒号后面的空格留在价格部分,拆分后标题不带冒号,后续手动补上,避免格式混乱
  • 用.html()方法直接替换元素内容,替代先清空再append的冗余操作,一步到位
  • 使用ES6模板字符串拼接HTML,比传统字符串拼接更清晰,不容易出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:35:17