【问题标题】:Remove/delete Datatable row if condition not met如果条件不满足,则删除/删除数据表行
【发布时间】:2019-10-18 07:51:52
【问题描述】:

我的页面上有一个datatable,通过单击按钮调用它。该表显示我的JSON 很好,但我有一个要求,即加深用户进入页面的方式决定应该显示哪些结果,这是我正在努力解决的问题。

这是我为每个 row 返回的数据

显示我的datatable

我想要的是,如果返回的代码不等于 316(例如),那么不要添加 row,这就是我要崩溃的地方。

下面是我必须生成datatable 的所有代码。注释掉的代码,是我尝试过的,也是失败的地方。

callRatesDataTable = $('#callRatesDataTable').DataTable({
    "ordering": true, // Allows ordering
    "paging": true, // Pagination
    "searching": true, // Searchbox
    "info": false, // Shows 'Showing X of X' information
    "pagingType": 'simple_numbers', // Shows Previous, page numbers & next buttons only
    "pageLength": 10, // Defaults number of rows to display in table. If changing this value change the show/hide below
    "dom":
    "<'form-group row buttonRow'<'col-12 text-right'B>>" +
    "<'row dropdownPageRow'<'col-6'l><'col-6'p>>" +
    "<'row'<'col-12'tr>>" +
    "<'row'<'col-6'l><'col-6'p>>",
    "lengthMenu": [
    [10, 25, 50, -1],
    [10, 25, 50, "All"]
    ],
    "buttons": [
    {
        extend: 'csv',
        text: '<i class="fas fa-file-csv" style="font-size: large"></i>',
        titleAttr: 'Click to download as a CSV',
        filename: 'List of accounts',
        className: 'd-flex align-items-center btn roundButton d-flex align-items-center justify-content-center lightYellowButton mb-0 roundButton',
    },
    {
        extend: 'pdf',
        orientation: 'landscape',
        text: '<i class="far fa-file-pdf" style="font-size: large"></i>',
        titleAttr: 'Click to download as a PDF',
        filename: 'List of accounts',
        className: 'd-flex align-items-center btn roundButton d-flex align-items-center justify-content-center lightYellowButton mb-0 roundButton',
    },
    {
        extend: 'print',
        text: '<i class="fas fa-print" style="font-size: large"></i>',
        titleAttr: 'Click to print the results',
        className: 'd-flex align-items-center btn roundButton d-flex align-items-center justify-content-center lightYellowButton mb-0 roundButton'
    }
    ],
    "fnDrawCallback": function () { },
    "language": {
        "lengthMenu":
        "<span class='mb-2' style='display: flex'>" +
        "<span class='mr-2 d-flex align-items-center'>Displaying</span>" +
        "_MENU_" +
        "<span class='ml-2 d-flex align-items-center'>records</span>" +
        "</span>"
    },
    "ajax": {


          "type": 'GET',
            "url": 'test_JS_Files/jsonFiles/reseller_CallRates.json',
            // "data": function (data) {
            //     return data;
            // },
            "dataSrc": function (res) {
                // let data = res.data;

                // var filtered = data.filter(function (code, index, arr,) {
                //     return code[0] != 599;
                // });

                // console.log(filtered)
                // return filtered
                return res.data;
            },
            "error": function () {
            $('#callRatesDataTable_wrapper').hide();
            $('#existingRuleLoadErrorMessage').html(
                '<p>There was an issue retrieving data. Please try again.</p>' +
                '<p>If the error keeps occurring, please get in touch.</p>').addClass('text-danger');
        }
    },
    "columns": [
    {
        "data": null,
        "render": function (data) {
            return data.location.charAt(0).toUpperCase() + data.location.slice(1).toLowerCase();
        }
    },
    {
        "sorting": false,
        "data": null,
        "render": function (data) {
            peakcharge = data.peakcharge;
            peakcharge = +peakcharge;

            if ($('#rateIncreaseField').val() != '') {
                percentAmount = (peakcharge / 100) * percentAmountField
                peakcharge = peakcharge + percentAmount;
                peakcharge = peakcharge.toFixed(6);
            }

            return '<div class="input-group"><div class= "input-group-prepend"><span class="input-group-text font-weight-bold">£</span></div>' +
            '<input name="peakchargeField" class="form-control col-6" type="number" min="0" placeholder="Enter an amount" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57" value="' + peakcharge + '" disabled>' +
            '</div>';
        }
    },
    {
        "sorting": false,
        "data": null,
        "render": function (data) {
            offpeakcharge = data.offpeakcharge
            offpeakcharge = +offpeakcharge;

            if ($('#rateIncreaseField').val() != '') {
                percentAmount = (offpeakcharge / 100) * percentAmountField
                offpeakcharge = offpeakcharge + percentAmount;
                offpeakcharge = offpeakcharge.toFixed(6);
            }

            return '<div class="input-group"><div class= "input-group-prepend"><span class="input-group-text font-weight-bold">£</span></div>' +
            '<input name="offpeakchargeField" class="form-control col-6" type="number" min="0" placeholder="Enter an amount" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57" value="' + offpeakcharge + '" disabled>' +
            '</div>';
        }
    },
    {
        "sorting": false,
        "data": null,
        "render": function (data) {
            connectioncharge = data.connectioncharge
            connectioncharge = +connectioncharge;

            if ($('#rateIncreaseField').val() != '') {
                percentAmount = (connectioncharge / 100) * percentAmountField
                connectioncharge = connectioncharge + percentAmount;
                connectioncharge = connectioncharge.toFixed(6);
            }

            return '<div class="input-group"><div class= "input-group-prepend"><span class="input-group-text font-weight-bold">£</span></div>' +
            '<input name="connectionchargeField" class="form-control col-6" type="number" min="0" placeholder="Enter an amount" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57" value="' + connectioncharge + '" disabled>' +
            '</div>';
        }
    },
    {
        "data": null,
        "render": function (data) {
            return data.manuallyupdated.charAt(0).toUpperCase() + data.manuallyupdated.slice(1).toLowerCase();
        }
    },

    ],
    "createdRow": function () {
        // var table = $('#callRatesDataTable').DataTable();

        // $('#callRatesDataTable').DataTable().rows().eq(0).each(function (index) {
        //     var row = $('#callRatesDataTable').DataTable().row(index);
        //     var data = row.data();
        //     var currentPosition = data.code;

        //     if (currentPosition == 517) {
        //         $('tr').addClass('conMet');
        //     } else {
        //         $('tr').addClass('conNotMet');
        //     }
        // });


        // table.row('.conMet').remove().draw(false);       
    },
    "initComplete": function () {
        window.hideLoader();
        // var table = $('#callRatesDataTable').DataTable();

        // $('#callRatesDataTable').DataTable().rows().eq(0).each(function (index) {
        //     var row = $('#callRatesDataTable').DataTable().row(index);
        //     var data = row.data();
        //     var currentPosition = data.code;

        //     if (addResellerPath && currentPosition == 599) {
        //         $('tr').addClass('conMet');
        //     } else {
        //         $('tr').addClass('conNotMet');
        //     }
        // });

        // table.row('.conMet').remove().draw(false);
    },
    "destroy": true
});

JSON 文件代码

{
    "data": [
        {
            "location": "One",
            "code": 316,
            "peakcharge": "0.002550",
            "offpeakcharge": "0.002500",
            "connectioncharge": "0.000000",
            "manuallyupdated": "yes"
        },
        {
            "location": "Two",
            "code": 3000,
            "peakcharge": "0.003000",
            "offpeakcharge": "0.003000",
            "connectioncharge": "0.000000",
            "manuallyupdated": "no"
        },
        {
            "location": "Three",
            "code": 3001,
            "peakcharge": "0.005000",
            "offpeakcharge": "0.005000",
            "connectioncharge": "0.000000",
            "manuallyupdated": "no"
        }
    ]
}

我可以添加class,但仍然显示不符合条件的行,我缺少什么?

查看JSON 文件代码我不想显示data[0].code 3000 和3001。

【问题讨论】:

    标签: jquery datatable datatables


    【解决方案1】:

    如果你只是想隐藏,可以使用数据表的**"dataSrc"属性。

    您只需过滤 dataSrc 中的数据即可。

    $(document).ready(function() {
        $('#example').dataTable( {
            "ajax": {
                "url": "https://www.mocky.io/v2/5da81a871200004d00edab46 ",
                "dataSrc": function(json) {
                    let data = json.demo;
                    //filtered whatever you want
                    var filtered = data.filter(function(value, index, arr){
                        return value[0] != 'Tiger Nixon';
                    });
                    return filtered;
                }
            }
        } );
    } );
    

    Json 数据

    {
      "demo": [
        [
          "Tiger Nixon",
          "System Architect",
          "Edinburgh",
          "5421",
          "2011/04/25",
          "$320,800"
        ],
        [
          "Garrett Winters",
          "Accountant",
          "Tokyo",
          "8422",
          "2011/07/25",
          "$170,750"
        ],
        [
          "Ashton Cox",
          "Junior Technical Author",
          "San Francisco",
          "1562",
          "2009/01/12",
          "$86,000"
        ],
        [
          "Cedric Kelly",
          "Senior Javascript Developer",
          "Edinburgh",
          "6224",
          "2012/03/29",
          "$433,060"
        ],
        [
          "Airi Satou",
          "Accountant",
          "Tokyo",
          "5407",
          "2008/11/28",
          "$162,700"
        ],
        [
          "Brielle Williamson",
          "Integration Specialist",
          "New York",
          "4804",
          "2012/12/02",
          "$372,000"
        ],
        [
          "Herrod Chandler",
          "Sales Assistant",
          "San Francisco",
          "9608",
          "2012/08/06",
          "$137,500"
        ],
        [
          "Rhona Davidson",
          "Integration Specialist",
          "Tokyo",
          "6200",
          "2010/10/14",
          "$327,900"
        ],
        [
          "Colleen Hurst",
          "Javascript Developer",
          "San Francisco",
          "2360",
          "2009/09/15",
          "$205,500"
        ],
        [
          "Sonya Frost",
          "Software Engineer",
          "Edinburgh",
          "1667",
          "2008/12/13",
          "$103,600"
        ],
        [
          "Jena Gaines",
          "Office Manager",
          "London",
          "3814",
          "2008/12/19",
          "$90,560"
        ],
        [
          "Quinn Flynn",
          "Support Lead",
          "Edinburgh",
          "9497",
          "2013/03/03",
          "$342,000"
        ],
        [
          "Charde Marshall",
          "Regional Director",
          "San Francisco",
          "6741",
          "2008/10/16",
          "$470,600"
        ],
        [
          "Haley Kennedy",
          "Senior Marketing Designer",
          "London",
          "3597",
          "2012/12/18",
          "$313,500"
        ],
        [
          "Tatyana Fitzpatrick",
          "Regional Director",
          "London",
          "1965",
          "2010/03/17",
          "$385,750"
        ],
        [
          "Michael Silva",
          "Marketing Designer",
          "London",
          "1581",
          "2012/11/27",
          "$198,500"
        ],
        [
          "Paul Byrd",
          "Chief Financial Officer (CFO)",
          "New York",
          "3059",
          "2010/06/09",
          "$725,000"
        ],
        [
          "Gloria Little",
          "Systems Administrator",
          "New York",
          "1721",
          "2009/04/10",
          "$237,500"
        ]
      ]
    }
    

    我将分享一个 JSFiddle 链接供您参考,我认为它会对您有所帮助。 链接:https://jsfiddle.net/amitmondal/28Lyndmv/28/

    如果您有任何困惑,请随时告诉我。

    数据表文档:https://datatables.net/reference/option/ajax.dataSrc

    【讨论】:

    • 感谢您的建议,但我才刚刚开始审查它,但我无法让它与我的 JSON 结果一起工作。我已根据您的建议更新了我的 datatable 代码,但已将其注释掉。我还添加了我的JSON 文件代码。我哪里错了?
    • 您返回过滤数据了吗?您应该返回过滤后的数据,根据您的代码,它将返回除 509 代码之外的所有内容。
    • 当我取消注释代码并检查 console.log 它仍然存在并显示在我的 datatable 中,因此我认为我可能做错了什么9: {location: "Blind or Disabled Directory Enquiry Serv", code: 3028, peakcharge: "0.005000", offpeakcharge: "0.005000", connectioncharge: "1.150000", …} 10: {location: "EMERGENCY 112/999", code: 599, peakcharge: "0.000000", offpeakcharge: "0.000000", connectioncharge: "0.000000", …} 11: {location: "NHS Non-Emergency 111", code: 596, peakcharge: "0.000000", offpeakcharge: "0.000000", connectioncharge
    • 查看我昨天添加的JSON文件代码,我不想显示代码的'3000 & 3001'
    • 现在我有点困惑,所以你不想显示 3000 和 3001,对吧?但是您想显示其他代码?
    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多