2016-06-14 7 views
0

2つの数字の間に負のパーセンテージが入るスクリプトを作成しようとしています。 1つの数字が動的で、異なる通貨、小数点などを持っているので、私は正規表現が必要です。それはほとんど動作しますが、最初の2つの数字は、数字に2つの小数点(.00)を追加すると機能します。どうしてこれなの? JSFIDDLE小数点がないにもかかわらず、この正規表現がすべての数字で動作するようにする

は、HTML::

すべての数字上の出力は33

フィドルする必要があります

<div class="left"> 
<em class="price product-card-price"> 
    €1.000&nbsp; 
    <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&nbsp;000:-&nbsp; 
    <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&nbsp; 
    <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&nbsp; 
    <span class="vatstatus">Exclusief BTW</span> 
</em> 
<em class="price product-card-price before"> 
    15000 
</em> 
<a class="pricebubble"></a> 
</div> 

スクリプト:の両方のため

$('.left').each(function() { 
var frstCol = parseInt($(this).find('em.price.product-card-price').text().replace(/&nbsp;/g, '').replace(/[^0-9.]|\.(?=\d{3,})/g, "").replace(/(\.\d+)+/,''), 10); 
var seCol = parseInt($(this).find('em.price.product-card-price.before').text().replace(/[^0-9.]/g, ""), 10);   
var result = 100 - (frstCol/seCol) * 100; 
console.log("frstCol: ", frstCol, ", seCol: ", seCol); 
$(this).find('a.pricebubble').text(parseInt(result)|| 0); 
}); 
+2

は、読み取りを持っています。 HTMLなどの壁ではなく、正規表現に問題がある場合は、正規表現をどのように使用しているか、入力を期待しているか、予期している出力を表示してください。あなたが期待しているものとは異なる結果を出すことがあります。 –

答えて

1

問題がありますem内の.leftは同じクラスなので、両方のテキストをfrstColに読み込んでいます。あなたは、セレクタを制限する:firstを使用する必要があります。

var frstCol = parseInt($(this).find('em.price.product-card-price:first').text().replace(/&nbsp;/g, '').replace(/[^0-9.]|\.(?=\d{3,})/g, "").replace(/(\.\d+)+/,''), 10); 

Updated fiddle

はまた、あなたが少しあなたのコードを簡素化することができることに注意してください:[MCVE]を通じて

$('.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); 
}); 
+0

ああ、それは意味をなさない - 私はちょっと恥ずかしい私はそれについて考えることをdidnt :(あなたは、感謝! –

関連する問題