总数"是"数据表中的行

时间:2014-08-04 17:24:07

标签: javascript jquery datatables css-selectors totals

我有几张桌子,其中包括" 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/

3 个答案:

答案 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