我需要帮助来处理以下情况:我需要在页面中汇总一些值,但是这些值的字段是动态创建的(这些字段的ID也是动态创建的)。
值可以以不同的格式显示(取决于货币或小数位),即:R $ 20.000,2(小数点后一位)或US $ 20.000,18(小数点后两位)或€20,000.180(小数点后3位和英制) 。
到目前为止,我做了什么:
由于字段是动态创建的,因此我在该字段的样式中添加了一个CSS类(它们是通过for每个循环生成的),然后使用我创建的javascript原型类将字符串转换为float(如果我通过R $ 20.000,02或R $ 20,000.02,则返回20000.02)。以下代码在需要汇总的页面中生成的所有字段中进行迭代。
<script>
var sum = 0;
jQuery(".countTotalEffectiveMonth").each(function(){
sum += localeUtils.s2f(jQuery(this).text().replace("R$",""));
jQuery("#ScenarioCurrentYearSavings").text(sum);
})
alert(sum);
</script>
问题:
1:我对货币(“ R $”,“”)进行了硬编码(将其从字符串中删除并进行计算)。关于我该怎么做的任何想法?我尝试使用正则表达式,但失败了:(。我只能使用此正则表达式(/ [^ 0-9-] / g)删除货币,但我不知道如何存储它以便将其连接起来在总和的末尾。
更新:
通过遵循Paul S.的方法,我做到了:
var val;
var re = /^([a-z]+)([^\d])([\d.,]+)$/i;
var m;
jQuery(".countTotalEffectiveMonth").each(function(){
m = jQuery(this).text();
val = re.exec(m);
val += val[3].replace(/,/g, '');
alert(val[1]+val[3]);
jQuery("#ScenarioCurrentYearSavings").text(val[1]+val[3]);
});
它说val为空,但是我在执行之前val = re.exec(m);
就打印了m,并且它打印出这样的数字R $ 91,67,但是我收到TypeError:val为空。
你看到什么错了吗?
看起来像这样的正则表达式呢
var re = /^([a-z]+)([^\d])([\d.,]+)$/i,
m;
m = re.exec('US$20.000,18'); // ["US$20.000,18", "US", "$", "20.000,18"]
m = re.exec('R$20,000.02'); // [ "R$20,000.02", "R", "$", "20,000.02"]
然后m[3]
是数字值,可以使用更多逻辑将其转换为数字,例如,如果采用以下形式x,xxx.xx
var int = +m[3].replace(/,/g, ''); // 20000.02
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句