【问题标题】:Count rows in an Ajax sourced datatable(including paginated rows) with specific column value计算具有特定列值的 Ajax 源数据表中的行(包括分页行)
【发布时间】:2017-11-04 17:28:12
【问题描述】:

我有一个来自 Ajax 的数据表,我想计算 #datatableOne 中的行数,其中列“状态”的值为“未知”。我尝试了以下方法。

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

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;
        }
    });

【问题讨论】:

    标签: javascript jquery ajax datatable


    【解决方案1】:

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

    tableOne.data().length
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 2021-10-08
      • 2017-06-05
      • 2016-08-24
      • 1970-01-01
      相关资源
      最近更新 更多