2013-02-05 24 views
0

我想要做的就是检查每个输入的价格,并将其作为总和。jQuery提取数据并制作金额

这里是我的代码

function totalSum(e) { 
    e.preventDefault(); 
    var unit = $("input:checked").parent("dt").siblings("dd").find("span"); 
    total = 0; 
    $.each(unit, function(index, obj){ 
     total += parseInt($(obj).text(), 10); 
    }); 
    $("#totalPrice").html('<span class="count">€ ' + total + '</span> €'); 
} 

每个单元的跨度内找到。 Total设置为0.我尝试在每个检查对象上调用parseInt,然后在一个范围内添加总和。在HTML中,价格是这样表述的:

<dd><span class="costo">€199</span></dd> 

所以当你看到有欧元标记。恐怕不能解析,这是吗?因为没有改变!我应该如何写它? 在此先感谢

好吧,我感到很惭愧,但我不能得到它的工作。我决定把代码在其最小,所以我想这种方式

<body> 
    <div class="bla"><span class="count">1</span></div> 
    <div class="bla"><span class="count">1</span></div> 
    <div class="bla"><span class="count">1</span></div> 

    <div id="total"></div> 
    <script type="text/javascript" src="js/jquery-1.9.0.min.js" /></script> 
    <script> 
    $(document).ready(function(){ 


    function sum() { 
     var prices = $("div.bla").find(".count"); 
     total= 0; 
     $.each(prices, function(index, obj){ 
    total += parseFloat($(obj).text()); 
}); 

$("#total").html('<span class="count">'+total +'</span> €'); 
    }; 

}); 

这应该工作,但没有出现。有人能告诉我发生了什么事吗?!

+0

检查标志,并从中删除一个优雅的解决方案解析之前的字符串。 –

+1

http://stackoverflow.com/questions/559112/how-to-convert-a-currency-string-to-a-double-with-jquery-or-javascript – Dharman

回答

1

你可以简单地从文本中删除单元:

var text = $(obj).text().replace(/[€\$]/,''); // add other units if needed 
total += parseInt(text, 10); // are you sure you don't prefer parseFloat ? 

或者,如果你想只保留数字和+-,做

var text = $(obj).text().replace(/[^\d\-\+]/g, ''); 
+0

这似乎是一个非常合理的解决方案,但没有出现它应该的领域。这里是我的解决方案的HTML,如果它可以帮助

这是很奇怪的,我不明白我在做什么错 –

+0

放一个的console.log (单元)来检查你的span元素是否被正确找到(这取决于你的确切的html树)。如有必要,请在http://jsbin.com上小提琴,以便我们检查它。 –

+0

该树应该工作,我已经使用该配置与“儿童()”,而不是“find()”,它的工作 –

0

更改parseInt函数跳过第一字符。

total += parseInt($(obj).text().substring(1),10); 
1

只需更换任何非数字字符:

total += parseInt($(obj).text().replace(/[^\d.-]/, ''), 10); 

而且,你可以做unit.each()代替$.each(unit,但对你想要做什么没有影响。

+0

这似乎也是一个非常好的解决方案,谢谢你的重构建议。 –

0

几天想和阅读做到这一点的最好办法之后,我相信这可能是什么,我试图实现:)

$("input").on("click", function() { 
    var j = $("input:checked"); 
    t = 0; 
    $(j).each(function() { 

     t += parseInt(this.value, 10); 
    }); 
    $("#total").html("<span>€ " + t + "</span>"); 
    });