如何启用对数据表中隐藏列的搜索

How to enable search for hidden column in datatable?

本文关键字:隐藏 搜索 数据表 何启用 启用      更新时间:2023-09-26

我有一个包含Name列的表,但我不想在表中显示该列,但我需要在其上添加搜索过滤器。

我尝试使用下面,但在这种情况下,列和搜索过滤器的文本框都没有显示。

{
    "sName": "Name", 
    "bVisible": false, 
    "bSearchable": true
}

当我设置"bVisible": true时,过滤器和列的文本框都显示出来,搜索也很好。

我使用下面的代码来显示列过滤器。

HTML For Filter:
<div class="col-xs-12 col-sm-6 col-md-4">
     <div class="form-group">
          <label class="col-sm-5 control-label">Customer Name </label>
                 <div class="col-sm-7" id="serName"></div>
      </div><!-- form-group -->
</div>
HTML for Table:

Datatable Javascript After Update:

$(document).ready(function () {
    dTable = $('#exRowTable').dataTable({            
        iDisplayLength: 10,
        sAjaxSource: AjaxSource,
        aoColumns: [               
//            {"sName": "Name", "bVisible": false, "bSearchable": true, "aTargets": [7]},
            {"sName": "Name"}
        ],
        aoColumnDefs: [                            
            {
                "bSearchable": true, 
                "bVisible": false, 
                "aTargets": [ 7 ]
            }
        ],            
        "aaSorting": [[0, 'desc']],
        sPaginationType: "full_numbers"});
    $('#exRowTable').dataTable().columnFilter({
        //sPlaceHolder: "head:after",
        aoColumns: [
            {type: "date-range", sSelector: "#serPickupDate"},
            {type: "text", sSelector: "#serCustId"},
            null,
            null,
            null,
            null,
            null,
            {type: "text", sSelector: "#serName"}
        ],
        bUseColVis: true
    });
});

对于1.9.4版本的DataTables,这可以工作(jsFiddle)

$('#example').dataTable( {
    "aoColumnDefs": [
        { 
            "bSearchable": true, 
            "bVisible": false, 
            "aTargets": [ 2 ]
        },
    ] 
});

可能您缺少aTargets参数?如果您使用aoColumns而不是aoColumnDefs,则数组长度需要等于列(文档)的数量。我不确定sName参数是否会影响其工作方式…

编辑(回答更详细的问题):

我猜(从试图复制你的问题在这里),这是不工作的columnFilter插件。如果您有隐藏列,则必须将bUseColVis参数设置为true (docs)。像这样:

$('#exRowTable').dataTable().columnFilter({     
        //sPlaceHolder: "head:after",
        aoColumns: [    
            { type: "date-range", sSelector: "#serPickupDate" },
            { type: "text", sSelector: "#serCustId" },
            null,
            null,
            null,
            null,
            null,
            { type: "text", sSelector: "#serName"},
            { type: "select", sSelector: "#serTimeslotsId", values: TimeSlotsDP},
            { type: "select", sSelector: "#serPickUpPin", values: PincodeDp },
            { type: "select", sSelector: "#serDeliveryPin", values: PincodeDp },
            { type: "date-range", sSelector: "#serRequestDateTime" },
            { type: "select", sSelector: "#serPickedUpStatus", values: ['Yes','No'] },                                
            { type: "select", sSelector: "#serStaffUser", values: StaffUserDp }
        ],
        bUseColVis: true
    });

您也可以通过搜索特定列来实现:

$("#table").DataTable().column(0).data().search("example");

因为我们链接了.data(),这将允许在列0上索引,即使可见性设置为false。

如果您只想搜索可见列,那么省略.data() .