/ / tdクラスjqueryのアイテムごとの平均-jquery、average

tdクラスのアイテムあたりの平均jquery - jquery、average

私は少し助けてください、

私の次の表はこれです:

<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">&nbsp;</td>
</tr>
<tr>
<td>Gon Freecs</td>
<td class="playerClass">17</td>
<td class="test">&nbsp;</td>
</tr>

<tr>
<td>J.K Rolling</td>
<td class="playerClass">21</td>
<td class="test">&nbsp;</td>
</tr>

<tr>
<td><b>Total</b></td>
<td class="totalCountPlayer">&nbsp;</td>
<td>100%</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><b>AVG </b></td>
<td class="avgPlayers">&nbsp;</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">&nbsp;</td>
<td>100%</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><b>AVG </b></td>
<td class="avgPlayers">&nbsp;</td>
</tr>

ここにリンクの説明を入力してください

回答:

回答№1は0

主な2つの問題は次のとおりです。

  1. 移入したかった td 一度に、しかし $( "td.test" ) すべてをターゲット td とともに test クラス
  2. 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


注意:

  1. 最初の割合(たとえば)は実際には20%(切り上げた場合は21%)であり、.20%ではありません。それで、私はその修正を行いました。つまり、予想どおりあなたのパーセンテージは合計で100%になります。

  2. 正しい "AVG"は24ではなく16(48/3)になります。変更も行いましたが、何らかの理由で24を保持したい場合は、変更するだけです var count = 0; 戻る var count = -1;.