【问题标题】:parseFloat for multiple entries with the same classparseFloat 用于具有相同类的多个条目
【发布时间】:2015-11-03 10:03:57
【问题描述】:

我有一个类别页面,在其中显示不同的产品。在每个产品中,我都有一个显示原价保存价格新价格的部分。只是为了说明 Was Price 的结构:

<p class="old-price">
    <span class="price-label">Was</span>
    <span class="price" id="old-price-65848">
        <span class="price">
            <span class="currency">£</span>
        </span> 
    </span>
</p>

目前在使用 jQuery 的产品页面上,我可以获取价格并将其转换为数字:

var oldPrice = parseFloat(jQuery('.old-price .price .price').first().text().replace(/[^0-9\.]+/g, ""), 10);

在只有一个 Was Price 块的产品页面上一切正常。但是,当我转到类别页面时,我有多个块使用相同的结构和相同的类,上面的代码只拾取第一个块并忽略其余块。这可以很容易地使用:

console.log(oldPrice, "%");

我如何修改代码,以便它可以拾取类别页面上的所有Was Price

编辑:

我已经成功地使用下面的代码映射了旧价格和保存价格。但是我正在尝试执行条件为的数学函数:

var oldPrices = jQuery('.old-price .price .price').map(function(){
    return parseFloat(jQuery(this).text().replace(/[^0-9\.]+/g, ""), 10);

}).get();

var specialPrices = jQuery('.special-price .price .price').map(function() {
    return parseFloat(jQuery(this).text().replace(/[^0-9\.]+/g, ""), 10);

}).get();

var youSave = specialPrices / (oldPrices / 100);

不幸的是它返回了 NaN 值

PS:所有价格都是动态生成的。

谢谢

【问题讨论】:

  • “这很容易显示”,因为它中间有一个明显的.first()...
  • 您希望用新的“oldPrice”值做什么?您可以将它们放在一个数组中,但是然后呢?您如何将旧值与新值匹配?还是那不重要?
  • @freedomn-m 如果我删除 .first() 它将计算所有 Was 价格。
  • 基本上逻辑是转换为数字,然后使用新价格进行一些数学计算以显示折扣百分比。
  • 您的原始问题似乎已得到解答,而编辑是一个新问题。我可以建议您在此处标记答案并提出一个新问题吗?也就是说,specialPrices[0] 是您应该访问单个数字进行计算的方式。尝试更多console.log() 输出以查看。

标签: javascript jquery html


【解决方案1】:

你可以把它映射成一个数组:

var oldPrices = jQuery('.old-price .price .price').map(function(){
    return parseFloat($(this).text().replace(/[^0-9\.]+/g, ""), 10);
}).get();

console.log(oldPrices);

也就是说,您最好设置一个data-* 属性来处理特定于每个元素的旧价格,例如:&lt;p class="old-price" data-old-price="12345"&gt;

顺便说一句,您的 sn-p 似乎与您发布的 HTML 标记无关,那里没有旧的价格值可以检索,除了可能与 ID 属性有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 2023-03-29
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多