2011-09-02 55 views
2

我想使用相關元素的文本(mcost_el=mcount_el*mprice_el)運行計算並將結果寫入另一個元素(「mcost_el」)的文本中。使用jQuery中的元素內容進行計算

<tr> 
<td class="mcount_el">2</td> 
<td class="mprice_el">544,33</td> 
<td class="mcost_el">0</td> 
</tr> 
<tr> 
<td class="mcount_el">3,9</td> 
<td class="mprice_el">460,00</td> 
<td class="mcost_el">0</td> 
</tr> 

我寫這篇文章的代碼:

var count=0; 
var price=0; 
$('.mcost_el').each(function(){ 
     count=parseInt($('.mcount_el').each.text().replace(",",".")); 
     price=parseInt($('.mprice_el').each.text().replace(",",".")); 
     $('.mcost_el').html(parseFloat(count)*parseFloat(price)); 
    }); 

,但它不工作。

+0

我編輯的問題,以反映我的理解你的要求,請回滾如果此編輯爲不正確。 – StuperUser

回答

3

事情是這樣的:

$('tr').each(function(){ 
    var count=parseFloat($('.mcount_el',this).text().replace(",",".")); 
    var price=parseFloat($('.mprice_el',this).text().replace(",",".")); 
    $('.mcost_el', this).html(count*price); 
}); 

活生生的例子:http://jsfiddle.net/BzVyc/

區別在於,不是對字符串做一個parseInt,而是對生成的int進行一個parseFloat,你只對字符串做一個parseFloat

+0

是否需要用小數代替逗號?我認爲JavaScript自動處理這種本地化。 (當然,我從來沒有必要自己處理。) – Blazemonger

+0

在你的例子中,不要在每個結果中的mcost_el身份=( – skywind

+0

@Vlad - yep,我會立即更新 – Jamiec

1

或許真的沿

elements = $("body").children().length 

看看行,length

+0

您還可以在兒童功能中爲更具體的兒童添加過濾器。 –

+0

是的,我只是不明白他到底想要算什麼 –

+0

'mcount_el'包含元素的數量。 'mprice_el'包含價格。 'mcost_el'包含計算的成本。 – Blazemonger

1
$("#table_id tr").each(function() { 
    var count = parseInt($(this).find(".mcount_el").text()); 
    var price = parseFloat($(this).find(".mprice_el").text()); 
    var cost = count * price; 
    $(this).find(".mcost_el").text(cost.toFixed(2)); 
}); 
+0

計數是不是一個整數(3,9)在第二行。 'parseFloat'不會將''作爲小數點分隔符。請參閱:http://jsfiddle.net/78UDy/ – Jamiec

+0

我推測這將作爲本地化問題自動處理,只要本地用戶所在的國家/地區作爲小數分隔符處理即可。我從來沒有必須自己處理這些問題,所以如果我錯了,請執行Jamiec的操作並添加一個'.replace(「,」,「。」)' – Blazemonger

2

你需要這樣的事 -

var count=0; 
var price=0; 
$('tr').each(function(){ 
     count=parseFloat($(this).find('td.mcount_el').text().replace(",",".")); 
    price=parseFloat($(this).find('td.mprice_el').text().replace(",",".")); 
     $(this).find('td.mcost_el').html(count*price); 
}); 

哪樣 -

  • 循環每一個錶行
  • 對於目前的錶行,由 找到數量和價格的變量提取它們從<td>與當前行有關使用$(this).find('td.<classname>')語法
  • 乘以兩個變量,並將結果添加到總<td>

工作演示 - http://jsfiddle.net/ipr101/AVGgU/1

+2

不需要'parseFloat'兩次。 – Jamiec

+0

@Jamiec - 謝謝你指出 - 現在修好了。 – ipr101