我有几张桌子,其中包括" billable"将数据填入y或n(是或否)的行。我了解如何添加列的总价格金额,但不了解如何计算包含' y'的行数。例如下面,我找到第一行,获取长度并提醒总数。
HTML
<table id='pricetable'>
<tr>
<th>Price</th>
<th>Billable</th>
</tr>
<tr>
<td>201</td>
<td>y</td>
</tr>
<tr>
<td>51</td>
<td>y</td>
</tr>
<tr>
<td>7</td>
<td>n</td>
</tr>
</table>
的jQuery
// initiate table
oPrice = $('#pricetable').dataTable();
var priceTotal = 0;
// iterate through each input and add to sum
$('#pricetable td:nth-child(1)').each(function () {
var dataArray = oPrice._('td:nth-child(1)');
for (var i = 0, len = dataArray.length; i < len; i++) {
priceTotal += +dataArray[i];
}
});
// alert total
alert(priceTotal);
我还需要提醒可计费行的数量......所以像
var billTotal = 0;
$("#pricetable td:nth-child(2)").each(function () {
var val = $(this).text();
if (val == 'y') reimTotal++;
billTotal++;
});
//alert(billTotal); //count is 2
// change value of summary total
$('#myBillable').val(billTotal);
...但问题是这需要与Datatables一起使用。如果您更改行数,您会注意到我有6行,并且4个可计费 - 但它只会提醒3.无论如何,价格总计对我来说很合适,但我需要知道如何计算可计费行数。提前致谢!更新:http://jsfiddle.net/HEDvf/1555/
答案 0 :(得分:2)
添加所有可计费行,你可以使用.DataTable()。rows()。eq(0)并应用这样的过滤器
$(document).ready(function() {
var table=$('#pricetable').DataTable({//use DataTable instead to use .rows()
"sPaginationType": "full_numbers",
"iDisplayLength": 5
});
var priceTotal = 0;
table.rows().eq(0).filter( function (row) {//each row inside the .DataTable
if(table.cell(row,1).data() === 'y'){//if it is billable
priceTotal+=parseInt(table.cell(row,0).data());//parse the data to int and sum
}
});
alert("price "+priceTotal);
});
您需要使用.DataTable()返回DataTables API实例,以便您可以使用.rows()和循环访问每一行以仅添加可计费行 http://jsfiddle.net/s827x/
答案 1 :(得分:1)
http://jsfiddle.net/doniyor/Vc96L/这应该对你有用。
$(function () {
var count = 0;
$("#pricetable").find("td").each(function () {
var val = $(this).text();
if (val == 'y') count++;
});
alert(count);
});
答案 2 :(得分:0)
我改变你的循环来迭代所有的TD,如下所示:
$('#pricetable td').each(function (index) {
var item = $(this).text();
if (index % 2 == 0)
priceTotal += parseFloat(item);
else if (item == "y")
billableCount++;
});
这是一个有效的fiddle