您好,我正在尝试创建一个计算,以根据产品的价格(以欧元为单位并用逗号分隔)以及括号中的您可以从中获得的份数来获取每份的价格。
所以我们的想法是获取价格,然后将价格除以份数,即: 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>
你的逻辑差不多了,但有三个问题。首先,您要替换价格字符串中的任何非数字字符,因此
€49,90
变为 4990
。因此,您需要将其除以 100,将其从美分转换为欧元,才能在计算中使用该值。
其次,用于检索份数的正则表达式语法不正确。您需要声明不带括号的正则表达式,并且不尝试访问第 0 个元素。正则表达式本身不应包含最后一个
)
值,因为您错过了“份量”一词,这意味着它永远不会命中。
最后,当您使用该正则表达式时,您只需要获取第一个匹配项,而不是获取所有匹配项并加入/替换它们。
综上所述,试试这个:
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>