计算具有特定列值的Ajax源数据表(包括分页行)中的行

时间:2017-06-03 11:43:49

标签: javascript jquery ajax datatable

我有一个源自Ajax的Datatable,我想计算#datatableOne中的行' Status'有一个值'未知'。我尝试了以下内容。

这只计算活动页面中的行数

function tableOneRowCount(){
    var rows = $("#datatableOne td:nth-child():contains('Unknown')" ).length;
    alert("Unknown rows :" + rows);
}

除非您将它们显示一次,否则这也不包括分页行。因此,除非我选择第二页,否则它不会包括“未知”和“未知”。第二页的行。

function tableOneRowCount(){
    var table = $('#datatableOne').DataTable();
    var rows = table.rows(':contains("Unknown")').data().length;
    alert("unknown rows : " + rows);
}

需要帮助,因为我没有非常扎实的javascript经验。

以下是我加载数据表的方式。

var tableOne = $('#datatableOne').DataTable({
        ajax:{
            url: '@Url.Action("AssetsUnderContract_AjaxHandler", "SiteReport")',
            type: 'GET',
            data: { "SiteReportID": SiteReportID }
        },
        "bProcessing": true,
        "columns": [
            {"data": "report_asset_id"},
            {"data": "product_name"},
            {"data": "serial_number"},
            {"data": "description"},
            {"data": "site_location"},
            {"data": "asset_guarantee"},
            {"data": "asset_calibration_status"}
        ],
        "columnDefs": [
            {
            "targets": 7,
            "data": null,
            "defaultContent": '<button class="btn btn-round btn-primary btn-xs" type="button">Load</button>'
            }
        ],
        "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {       

            if(aData["asset_guarantee"] == true){
                $("td:eq(5)", nRow).text("").wrapInner('<span class="glyphicon glyphicon-check"></span>').css("text-align", "center")
            }else {
                $("td:eq(5)", nRow).text("").wrapInner('<span class="glyphicon glyphicon-unchecked"></span>').css("text-align", "center")
            }

            if(aData["asset_calibration_status"] == 0){
                $("td:eq(6)", nRow).text("Unknown").wrapInner('<span class="label label-default"></span>').css("text-align", "center")
            }else if(aData["asset_calibration_status"] == 1){
                $("td:eq(6)", nRow).text("Completed").wrapInner('<span class="label label-success"></span>').css("text-align", "center")
            }else if(aData["asset_calibration_status"] == 2){
                $("td:eq(6)", nRow).text("Not Found").wrapInner('<span class="label label-danger"></span>').css("text-align", "center")
            }else if(aData["asset_calibration_status"] == 3){
                $("td:eq(6)", nRow).text("Pending").wrapInner('<span class="label label-danger"></span>').css("text-align", "center")
            }
            return nRow;
        }
    });

1 个答案:

答案 0 :(得分:-1)

加载数据后,您可以使用data()方法从tableOne检索所有行:

tableOne.data().length

这将为您提供JavaScript中所有行的计数。要仅在status === 'unknown'上过滤,您可以在each()data()对其进行统计。

var unknownCount = 0;
tableOne.data().each(function(row) {
    if (row.status === 'unknown') {
        unknownCount = unknownCount + 1;
    }
}

我假设row是一个对象,但它可能不是,但希望这会让你走上正轨。