您好,我正在尝试根据商品价格(以欧元为单位,并用逗号分隔)以及可以从中获取的份数(以括号表示)来计算得出每份的价格。
因此,想法是获取价格,然后将价格除以份数,即: 49,90 / 14 = 3.56
下面是我的代码。请注意,我无法移动任何代码,这是它在网站上的显示方式。
对此将有任何帮助。
function getDiscount() {
var pattern = /[^0-9\.]/g;
var pattern2 = (/\(*(\d+.\d+)\)/)[0];
var price = parseFloat($(".from_price").text().replace(pattern, ""));
var serving = parseFloat($(".servingScoop").text().match(pattern2).join().replace(pattern, ""));
var pricePerScroop = (Math.abs(price/serving));
$("#discount").html("€" + pricePerScroop.toFixed(2));
$(".scoop").click(getDiscount);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings) </div>
<button type="button" onclick="getDiscount()">get discount</button>
<div id="discount"></div>
答案 0 :(得分:0)
您的逻辑差不多了,但是有三个问题。首先,您要替换价格字符串中的任何非数字字符,因此€49,90
变为4990
。因此,您需要将其除以100,才能将其从美分转换为欧元,以便在计算中使用该值。
第二,用于检索份数的Regex语法不正确。您需要声明不带括号且不尝试访问第0个元素的正则表达式。正则表达式本身不应该包含最后一个)
值,因为您已经错过了“ servings”一词,这意味着它永远不会成功。
最后,当您使用该正则表达式时,您只需要获得第一个匹配项,而不是获取所有匹配项并加入/替换它们。
话虽如此,请尝试以下操作:
jQuery($ => {
$('button').on('click', () => {
var pattern = /[^0-9\.]/g;
var pattern2 = /\((\d+)/;
var price = parseFloat($(".from_price").text().replace(pattern, "")) / 100;
var serving = parseFloat($(".servingScoop").text().match(pattern2)[1]);
var pricePerScroop = Math.abs(price / serving);
$("#discount").html("€" + pricePerScroop.toFixed(2));
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="from_price">€49,90</div>
<div class="servingScoop">100 grams (14 servings)</div>
<button type="button">get discount</button>
<div id="discount"></div>