为什么JavaScript的.replace()方法无法将.–替换为.00?
错误原因
replace()是纯函数,不会修改原始字符串,只会返回替换后的新字符串,你的写法没有将返回值赋值给变量,相当于没有执行替换操作。- 调用jQuery的
html()方法时,浏览器会自动解析HTML实体,–会被转换成实际的en dash字符(–,Unicode编码为U+2013),它不是普通的半角减号-,所以你匹配–或者普通减号都无法命中目标内容。 - 直接拿
html()还可能带入其他不可见的标签或格式,不如直接取文本内容更稳妥。
解决方案
优先用文本取值+Unicode正则匹配,兼容性最好:
// 取纯文本内容,排除HTML标签干扰 let amount = jQuery("span#product_price").text(); // 用Unicode编码匹配末尾的.en dash,替换为.00 amount = amount.replace(/\.\u2013$/, '.00');
如果需要直接删除后缀,把替换值改成空字符串即可:
amount = amount.replace(/\.\u2013$/, '');
如果不确定字符编码,可以加一行调试代码确认:
// 打印价格最后一位字符的十进制Unicode编码,en dash对应值为8211 console.log(amount.slice(-1).charCodeAt(0));
内容的提问来源于stack exchange,提问作者OuzoPower
相关产品推荐
相关产品推荐

