如何在Haml模板中为小数的小数部分(含小数点)包裹span标签
在Haml中包裹价格的小数部分
嘿,这个需求很常见,我给你两种实用的实现方式,都能完美搞定你的需求:
方法1:字符串分割法(直观易读)
因为你的something.price已经是保留两位小数的字符串,我们可以直接用split('.')把整数和小数部分拆分开,再分别输出:
- # 先判断是否包含小数点,避免无小数时出错 - if something.price.include?('.') - integer_part, decimal_part = something.price.split('.') = integer_part # 输出整数部分,比如"1234" %span.decimal .#{decimal_part} # 用span包裹小数点和小数部分,比如".41" - else = something.price # 如果是整数形式的价格,直接输出原内容
这种方法逻辑清晰,新手也能快速理解,适合需要明确处理整数/小数分支的场景。
方法2:正则替换法(简洁高效)
如果想少写点代码,用正则匹配替换是更快捷的选择,一行代码就能搞定所有情况(不管有没有小数点都能兼容):
= something.price.gsub(/(\.\d+)/, '<span class="decimal">\1</span>').html_safe
代码解释:
gsub(/(\.\d+)/, ...):匹配所有以.开头、后面跟着数字的片段(也就是你要包裹的小数部分),\1代表匹配到的内容.html_safe:告诉Rails不要转义HTML标签,确保<span>能正常渲染成DOM元素
两种方法都能实现你要的效果,比如输入"1234.41"时,最终都会输出:
1234<span class="decimal">.41</span>
内容的提问来源于stack exchange,提问作者Merkelst
相关产品推荐
相关产品推荐

