私は少し助けてください、
私の次の表はこれです:
<table class="tableTest" id="tblOne">
<thead>
<tr><strong><h1>Players</h1></strong></tr>
<tr>
<th>Player name</th>
<th># hits</th>
<th>AVG</th>
</tr>
</thead>
<tbody>
<tr>
<td>Charles Xaviers</td>
<td class="playerClass">10</td>
<td class="test"> </td>
</tr>
<tr>
<td>Gon Freecs</td>
<td class="playerClass">17</td>
<td class="test"> </td>
</tr>
<tr>
<td>J.K Rolling</td>
<td class="playerClass">21</td>
<td class="test"> </td>
</tr>
<tr>
<td><b>Total</b></td>
<td class="totalCountPlayer"> </td>
<td>100%</td>
</tr>
<tr>
<td> </td>
<td><b>AVG </b></td>
<td class="avgPlayers"> </td>
</tr>
</tbody>
そして、これは計算するための私のjqueryコードです
$(document).ready(function() {
var classSum = "playerClass"; var classTotal = "totalCountPlayer"; var ClassAvg = "avgPlayers";
calculate(classSum, classTotal, ClassAvg);
function calculate(classSum, classTotal, ClassAvg) {
var sumatoria = $("." + classSum);
var total = 0;
var count = -1;
$.each(sumatoria, function(i, suma){
var pc=$(this).text();
if (pc!= "NA"){
total = total + parseInt(pc,10);
count++;
avg(pc);
}});
$("." + classTotal).text(total);
$("." + ClassAvg).text((total / count).toFixed(3));
function avg(pc){
var avg = 0;
avg = (pc/total);
$( "td.test" ).text(avg);
}
}
});
アイテムごとの平均を計算しようとしていますが、最後に計算された平均を常に取得してください。
次のようになります。
<table class="tableTest" id="tblOne">
<tr><strong><h1>Players</h1></strong></tr>
<tr>
<th>Player name</th>
<th># hits</th>
<th>AVG</th>
</tr>
<tr>
<td>Charles Xaviers</td>
<td class="playerClass">10</td>
<td class="test">0.20%</td>
</tr>
<tr>
<td>Gon Freecs</td>
<td class="playerClass">17</td>
<td class="test">0.35%</td>
</tr>
<tr>
<td>J.K Rolling</td>
<td class="playerClass">21</td>
<td class="test">0.43%</td>
</tr>
<tr>
<td><b>Total</b></td>
<td class="totalCountPlayer"> </td>
<td>100%</td>
</tr>
<tr>
<td> </td>
<td><b>AVG </b></td>
<td class="avgPlayers"> </td>
</tr>
回答:
回答№1は0主な2つの問題は次のとおりです。
- 移入したかった
td
一度に、しかし$( "td.test" )
すべてをターゲットtd
とともにtest
クラス total
正しく計算されていなかった(#1が解決されると表示されるはずだった)
次のことを試してください。これは少し「迅速で汚い」です。
$(document).ready(function() {
var classSum = "playerClass"; var classTotal = "totalCountPlayer"; var ClassAvg = "avgPlayers";
var grandTotal = getGrandTotal();
calculate(classSum, classTotal, ClassAvg);
function calculate(classSum, classTotal, ClassAvg) {
var sumatoria = $("." + classSum);
var total = 0;
var count = 0; // formerly: -1
$.each(sumatoria, function(i, suma){
var pc=$(this).text();
if (pc!= "NA"){
count++;
avg(pc, $(this).next());
}
});
$("." + classTotal).text(grandTotal);
$("." + ClassAvg).text((grandTotal / count).toFixed(3));
function avg(pc, $td){
var avg = 0;
avg = (pc/grandTotal);
$td.text(Math.round(avg * 100, 0) + "%");
}
}
function getGrandTotal() {
var sumatoria = $("." + classSum);
var total = 0;
$.each(sumatoria, function(i, suma){
var pc=$(this).text();
if (pc!= "NA"){
total = total + parseInt(pc, 10);
}
});
return total;
}
});
出力:
Player name # hits AVG
----------- ------ ---
Charles Xaviers 10 21%
Gon Freecs 17 35%
J.K Rolling 21 44%
Total 48 100%
AVG 16.000
注意:
最初の割合(たとえば)は実際には20%(切り上げた場合は21%)であり、.20%ではありません。それで、私はその修正を行いました。つまり、予想どおりあなたのパーセンテージは合計で100%になります。
正しい "AVG"は24ではなく16(48/3)になります。変更も行いましたが、何らかの理由で24を保持したい場合は、変更するだけです
var count = 0;
戻るvar count = -1;
.