я хочу трохи допомогти, будь ласка,
моя наступна таблиця така:
<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);
}
}
});
Я намагаюся обчислити середній розмір за елемент, але завжди беру останній середній розрахунок, як я можу зробити, щоб написати розрахунок у .test клас, будь ласка, допоможіть мені
Має виглядати так:
<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>
Відповіді:
0 для відповіді № 1Ваші два основні питання:
- Ви хотіли заповнити його
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" було б 16 (48/3), а не 24. Я також змінив цю модифікацію, але якщо ви чомусь хочете зберегти 24, просто змініть
var count = 0;
повертатися доvar count = -1;
.