交叉过滤表数据

时间:2014-08-21 12:22:16

标签: jquery

我正在基于复选框过滤我的TableA行,现在我想使用TableB可选行来过滤它们,因此使用Checkboxes + TableB进行过滤,此时它只是复选框。

enter image description here

这是代码,

<div class="someRow" style="width: 100%">
    <asp:CheckBox ID="Open" runat="server" ClientIDMode="Static" Checked="true" onclick="RMToggle(this)" />
    <asp:CheckBox ID="New" runat="server" ClientIDMode="Static" onclick="RMToggle(this)" />
    <asp:CheckBox ID="Closed" runat="server" ClientIDMode="Static" onclick="RMToggle(this)" />
    <asp:CheckBox ID="Rejected" runat="server" ClientIDMode="Static" onclick="RMToggle(this)" />
</div>
<table id="tableA" class="dmctable">
    <tr data-id="Open" fid="1"></tr>
    <tr data-id="Rejected" fid="2"></tr>
    <tr data-id="New" fid="1"></tr>
    <tr data-id="Open" fid="3"></tr>
    <tr data-id="Closed" fid="2"></tr>
    <tr data-id="Open" fid="2"></tr>
    <tr data-id="New" fid="1"></tr>
    <tr data-id="Open" fid="3"></tr>
</table>
<table id="tableB" class="dmctable2">
    <tr data-fid="1" Class="selected"></tr>
    <tr data-fid="2"></tr>
    <tr data-fid="3" Class="selected"></tr>
</table>

JS

function RMToggle( elm ) { // elm = element
    var ischecked = elm.checked,
        $target = $('#table1 tr[data-id="' + elm.id + '"]');
    if( ischecked ) {
        $target.show();  // HERE how can I check if tr's FID is visible in tableB or not
    }
    else {
        $target.hide();
    }
}

问题

如何根据TableB中的复选框和行过滤TableA中的行。

我可以在表b中检查是否选择了一行,

if ($("#tableB tr[data-fid='1']").children(".selected").length > 0)

但是如果(isChecked)我怎么能把它放进去?

更新

我可以使用此代码

获取TableB所选行的ID
$("#tableB tr:has(.New.selected)").map(function(){return $(this).data("fid");}).get();

现在我的逻辑是,

function RMToggle( elm ) {
        var wantedFIDs = $("#tableB tr:has(.New.selected)").map(function(){return $(this).data("fid");}).get();
        var ischecked = elm.checked,
            $target = $('#table1 tr[data-id="' + elm.id + '"]');
        if( ischecked ) {
        // Here I want only rows in $target where data-fid = wantedFIDs
        $target.show();
    }
    else {
        $target.hide();
    }
}

2 个答案:

答案 0 :(得分:0)

试试这个:

 $target= $("[data-id='" + wantedFIDs.split(",").join("'],[data-id='") + "']")

答案 1 :(得分:0)

我最终得到了这段代码,

function RMToggle(elm) {

    $target = $('#tableA tr[data-id="' + elm.id + '"]').filter(function () {
        var rowsFilter = $("#tableB tr .New.selected").parent().map(function () {
            return $(this).data("fid");
        }).get();

        return rowsFilter.indexOf($(this).data("fid")) >= 0;
    });

    if (elm.checked) { $target.show(); }
    else { $target.hide(); }
}