如何隐藏HTML表格行

时间:2019-04-29 08:22:17

标签: javascript jquery html

我正在尝试使用jQuery / JavaScript隐藏HTML表行,我的HTML表正在使用JSON数据呈现

当用户选择多个下拉菜单并单击转到时,我想隐藏某些行

  • 在桌子内,我有几个salesType,分别为CashCreditcardSwiggyZomato
  • 我的下拉菜单也包含这些值
  • 我正在尝试执行用户选择的选项,在单击“ go”后,这些行应填充而其他行应隐藏

我的代码

$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
    $(this).closest("li").toggleClass("active", this.checked);
    var sList = "";
    $('input[type=checkbox]').each(function() {
        if (this.checked) {
            sList += $(this).val() + ","
        }
    });

    $("#To").val(sList.slice(0, -1));
});
$(document).on('click', '.allow-focus', function(e) {
    e.stopPropagation();
});
var cpy = [{
    "Billdate": "2018-08-04",
    "Outlet": "JAYANAGAR",
    "Total": 518212,
    "Cash": 508161,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "10051",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-04",
    "Outlet": "MALLESHWARAM",
    "Total": 104801,
    "Cash": 102675,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "2126",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-04",
    "Outlet": "KOLAR",
    "Total": 138151,
    "Cash": 138151,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "JAYANAGAR",
    "Total": 628358,
    "Cash": 608336,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "20022",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "MALLESHWARAM",
    "Total": 115113,
    "Cash": 108903,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "6210",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "KOLAR",
    "Total": 134107,
    "Cash": 134107,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-06",
    "Outlet": "JAYANAGAR",
    "Total": 177866,
    "Cash": 177866,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-06",
    "Outlet": "KOLAR",
    "Total": 66095,
    "Cash": 66095,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "JAYANAGAR",
    "Total": 283124,
    "Cash": 277098,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "6026",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "MALLESHWARAM",
    "Total": 58789,
    "Cash": 58214,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "575",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "KOLAR",
    "Total": 67886,
    "Cash": 67886,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}]

function getDataList(jsn) {
    var Billdate = [];
    var Outlet = [];
    var SalesType = [];
    Billdate = [...new Set(jsn.map(ele => ele.Billdate))];
    Outlet = [...new Set(jsn.map(ele => ele.Outlet))];
    for (let i in jsn[0]) {
        if (i !== 'Billdate' && i !== 'Outlet') {
            SalesType.push(i)
        }
    }

    return {
        Billdate,
        Outlet,
        SalesType
    }

}

function structureJSON(obj) {
    var arr = [];
    obj.Billdate.forEach((ele1, index1) => {
        obj.SalesType.forEach((ele, index) => {
            let row;
            if (index === 0) {
                row = {
                    Billdate: ele1,
                    SalesType: ele
                };
            } else {
                row = {
                    Billdate: "",
                    SalesType: ele
                };
            }
            obj.Outlet.forEach((ele2, index2) => {
                var selected = cpy.filter((ele3, index3) => {
                    return ele3.Billdate === ele1 && ele3.Outlet == ele2
                });
                if (selected.length != 0)
                    row[ele2] = selected[0][ele]
                else
                    row[ele2] = "0";
            })
            arr.push(row)
        })

    })

    return arr;

}

var tableValue = structureJSON(getDataList(cpy))
addTable(tableValue)

function addTable(tableValue) {
    var $tbl = $("<table />", {
            "class": "table table-striped table-bordered table-hover"
        }),
        $thd = $("<thead/>"),
        $tb = $("<tbody/>"),
        $trh = $("<tr/>", {
            "class": "text-center"
        });

    $.each(Object.keys(tableValue[0]), function(_, val) {
        $("<th/>").html(val).appendTo($trh);
    });
    $trh.appendTo($thd);
    $.each(tableValue, function(_, item) {
        $tr = $("<tr/>", {
            "class": "filterData"
        });
        console.log(item.SalesType) // this one is sales type
        $.each(item, function(key, value) {
            if (isNaN(value)) {
                $("<td/>", {
                    "class": "text-left"
                }).html(value).appendTo($tr);
            } else {
                $("<td/>", {
                    "class": "text-right"
                }).html(value.toLocaleString('en-in')).appendTo($tr);
            }

            $tr.appendTo($tb);
            if (item.Billdate != "") {
                $tr.css("background-color", "#DFADF4");

            }

        });
    });
    $tbl.append($thd).append($tb);
    $("#salesBreakupTable").html($tbl);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<label for="subCategoryCode">Filter Data :</label>
<div class="input-group" id="hideFilter">
    <input type="text" class="form-control" aria-label="Text input with dropdown button" name="To" id="To" readonly>
    <div class="input-group-append">
        <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
        <ul class="dropdown-menu checkbox-menu allow-focus" aria-labelledby="dropdownMenu1">
            <li><label> <input type="checkbox" value="Cash"> Cash </label></li>
            <li><label> <input type="checkbox" value="Creditcard"> Creditcard </label></li>
            <li><label> <input type="checkbox" value="Coupon"> Coupon </label></li>
            <li><label> <input type="checkbox" value="Credit"> Credit </label></li>
            <li><label> <input type="checkbox" value="Swiggy"> Swiggy </label></li>
            <li><label> <input type="checkbox" value="uber Eats"> uber Eats	</label></li>
            <li><label> <input type="checkbox" value="Zomato"> Zomato </label></li>
        </ul>
    </div>
    <button type="button" class="commonButton" id="save">
    <i class="fa fa-search"></i>&nbsp;Go
    </button>
</div>
<div align="Center" class="table table-responsive" id="commonDvScroll">
    <table id="salesBreakupTable"></table>
</div>

要将表格导出到excel中,我正在使用此代码

$("#export").click(function() {
    var copyTable = $("#salesBreakupTable").clone(false).attr('id', '_copy_dailySales');

    copyTable.insertAfter($("#dailySales"))
    copyTable.find('display:none').remove()

    copyTable.table2excel({
        filename: "Daily Sales Report.xls"
    });
    copyTable.remove()

});

我正在使用此插件从jQuery生成excel: <script src="https://cdn.rawgit.com/rainabba/jquery-table2excel/1.1.0/dist/jquery.table2excel.min.js"></script>

但导出的全表包含隐藏行。

1 个答案:

答案 0 :(得分:1)

尝试一下:

$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
    $(this).closest("li").toggleClass("active", this.checked);
    var sList = "";
    $('input[type=checkbox]').each(function() {
        if (this.checked) {
            sList += $(this).val() + ","
        }
    });

    $("#To").val(sList.slice(0, -1));
});
$(document).on('click', '.allow-focus', function(e) {
    e.stopPropagation();
});
var cpy = [{
    "Billdate": "2018-08-04",
    "Outlet": "JAYANAGAR",
    "Total": 518212,
    "Cash": 508161,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "10051",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-04",
    "Outlet": "MALLESHWARAM",
    "Total": 104801,
    "Cash": 102675,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "2126",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-04",
    "Outlet": "KOLAR",
    "Total": 138151,
    "Cash": 138151,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "JAYANAGAR",
    "Total": 628358,
    "Cash": 608336,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "20022",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "MALLESHWARAM",
    "Total": 115113,
    "Cash": 108903,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "6210",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-05",
    "Outlet": "KOLAR",
    "Total": 134107,
    "Cash": 134107,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-06",
    "Outlet": "JAYANAGAR",
    "Total": 177866,
    "Cash": 177866,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-06",
    "Outlet": "KOLAR",
    "Total": 66095,
    "Cash": 66095,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "JAYANAGAR",
    "Total": 283124,
    "Cash": 277098,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "6026",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "MALLESHWARAM",
    "Total": 58789,
    "Cash": 58214,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "575",
    "uber Eats": "0",
    "Zomato": "0"
}, {
    "Billdate": "2018-08-07",
    "Outlet": "KOLAR",
    "Total": 67886,
    "Cash": 67886,
    "Creditcard": 0,
    "Coupon": 0,
    "Paytm": 0,
    "Credit": 0,
    "Swiggy": "0",
    "uber Eats": "0",
    "Zomato": "0"
}]

function getDataList(jsn) {
    var Billdate = [];
    var Outlet = [];
    var SalesType = [];
    Billdate = [...new Set(jsn.map(ele => ele.Billdate))];
    Outlet = [...new Set(jsn.map(ele => ele.Outlet))];
    for (let i in jsn[0]) {
        if (i !== 'Billdate' && i !== 'Outlet') {
            SalesType.push(i)
        }
    }

    return {
        Billdate,
        Outlet,
        SalesType
    }

}

function structureJSON(obj) {
    var arr = [];
    obj.Billdate.forEach((ele1, index1) => {
        obj.SalesType.forEach((ele, index) => {
            let row;
            if (index === 0) {
                row = {
                    Billdate: ele1,
                    SalesType: ele
                };
            } else {
                row = {
                    Billdate: "",
                    SalesType: ele
                };
            }
            obj.Outlet.forEach((ele2, index2) => {
                var selected = cpy.filter((ele3, index3) => {
                    return ele3.Billdate === ele1 && ele3.Outlet == ele2
                });
                if (selected.length != 0)
                    row[ele2] = selected[0][ele]
                else
                    row[ele2] = "0";
            })
            arr.push(row)
        })

    })

    return arr;

}

var tableValue = structureJSON(getDataList(cpy))
addTable(tableValue)

function addTable(tableValue) {
    var $tbl = $("<table />", {
            "class": "table table-striped table-bordered table-hover"
        }),
        $thd = $("<thead/>"),
        $tb = $("<tbody/>"),
        $trh = $("<tr/>", {
            "class": "text-center"
        });

    $.each(Object.keys(tableValue[0]), function(_, val) {
        $("<th/>").html(val).appendTo($trh);
    });
    $trh.appendTo($thd);
    $.each(tableValue, function(_, item) {
        $tr = $("<tr/>", {
            "class": "filterData"
        });
        console.log(item.SalesType) // this one is sales type
        $.each(item, function(key, value) {
            if (isNaN(value)) {
                $("<td/>", {
                    "class": "text-left"
                }).html(value).appendTo($tr);
            } else {
                $("<td/>", {
                    "class": "text-right"
                }).html(value.toLocaleString('en-in')).appendTo($tr);
            }

            $tr.appendTo($tb);
            if (item.Billdate != "") {
                $tr.css("background-color", "#DFADF4");

            }

        });
    });
    $tbl.append($thd).append($tb);
    $("#salesBreakupTable").html($tbl);
}

$("#save").on("click", function() {
    var selectedType = [];
    $.each($(".dropdown-menu input[type='checkbox']:checked"), function() {
        selectedType.push($(this).val());
    });
    $.each($("#salesBreakupTable tr.filterData td:nth-child(2)"), function() {
        if (jQuery.inArray($(this).text(), selectedType) == -1 && $(this).text() != "Total") {
            $(this).parent().css("display", "none");
            $(this).parent().addClass("hide-data");
        } else {
            $(this).parent().css("display", "");
            $(this).parent().removeClass("hide-data");
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<label for="subCategoryCode">Filter Data :</label>
<div class="input-group" id="hideFilter">
    <input type="text" class="form-control" aria-label="Text input with dropdown button" name="To" id="To" readonly>
    <div class="input-group-append">
        <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
        <ul class="dropdown-menu checkbox-menu allow-focus" aria-labelledby="dropdownMenu1">
            <li><label> <input type="checkbox" value="Cash"> Cash </label></li>
            <li><label> <input type="checkbox" value="Creditcard"> Creditcard </label></li>
            <li><label> <input type="checkbox" value="Coupon"> Coupon </label></li>
            <li><label> <input type="checkbox" value="Credit"> Credit </label></li>
            <li><label> <input type="checkbox" value="Swiggy"> Swiggy </label></li>
            <li><label> <input type="checkbox" value="uber Eats"> uber Eats	</label></li>
            <li><label> <input type="checkbox" value="Zomato"> Zomato </label></li>
        </ul>
    </div>
    <button type="button" class="commonButton" id="save">
    <i class="fa fa-search"></i>&nbsp;Go
    </button>
</div>
<div align="Center" class="table table-responsive" id="commonDvScroll">
    <table id="salesBreakupTable"></table>
</div>

我只在您的代码中添加了这一部分:

$("#save").on("click", function() {
    var selectedType = [];
    $.each($(".dropdown-menu input[type='checkbox']:checked"), function() {
        selectedType.push($(this).val());
    });
    $.each($("#salesBreakupTable tr.filterData td:nth-child(2)"), function() {
        if (jQuery.inArray($(this).text(), selectedType) == -1 && $(this).text() != "Total") {
            $(this).parent().css("display", "none");
            $(this).parent().addClass("hide-data");
        } else {
            $(this).parent().css("display", "");
            $(this).parent().removeClass("hide-data");
        }
    });
});

我已将您的excel代码更新如下:

$("#export").click(function() {
    var copyTable = $("#salesBreakupTable").clone(false).attr('id', '_copy_dailySales');

    copyTable.insertAfter($("#dailySales"));
    copyTable.find('.hide-data').remove();

    copyTable.table2excel({
        filename: "Daily Sales Report.xls"
    });
    copyTable.remove();
});

display:none不能在jQuery中使用find()来找到,而是我添加了该类并在find()中使用了该类。