我试图编写一个脚本,获取两个数字之间的负百分比数。因为一个数字是动态的,有不同的货币,小数等等我需要一个正则表达式。它几乎可以工作,但前两个数字只有在我给数字加上两位小数(.00)才有效。为什么是这样?
所有数字的输出应为33.
小提琴: JSFIDDLE
HTML:
ls -w 500
脚本:
<div class="left">
<em class="price product-card-price">
€1.000
<span class="vatstatus">Exclusief BTW</span>
</em>
<em class="price product-card-price before">
1500
</em>
<a class="pricebubble"></a>
</div>
<div class="left">
<em class="price product-card-price">
1 000:-
<span class="vatstatus">Exclusief BTW</span>
</em>
<em class="price product-card-price before">
1500
</em>
<a class="pricebubble"></a>
</div>
<div class="left">
<em class="price product-card-price">
10,000.00SEK
<span class="vatstatus">Exclusief BTW</span>
</em>
<em class="price product-card-price before">
15000
</em>
<a class="pricebubble"></a>
</div>
<div class="left">
<em class="price product-card-price">
SEK10,000.00
<span class="vatstatus">Exclusief BTW</span>
</em>
<em class="price product-card-price before">
15000
</em>
<a class="pricebubble"></a>
</div>
答案 0 :(得分:1)
问题是因为em
中的.left
具有相同的类,因此您需要在frstCol
中获取两者的文本。您应该使用:first
来限制选择器:
var frstCol = parseInt($(this).find('em.price.product-card-price:first').text().replace(/ /g, '').replace(/[^0-9.]|\.(?=\d{3,})/g, "").replace(/(\.\d+)+/,''), 10);
另请注意,您可以稍微简化代码:
$('.left').each(function() {
var frstCol = parseInt($(this).find('em.price.product-card-price:first').text().trim().replace(/[^0-9.]|\.(?=\d{3,})/g, ""), 10);
var seCol = parseInt($(this).find('em.price.product-card-price.before').text().trim().replace(/[^0-9.]/g, ""), 10);
var result = parseInt(100 - (frstCol / seCol) * 100, 10);
$(this).find('a.pricebubble').text(result || 0);
});