提问者:小点点

Datatables插件搜索特定列不工作


我尝试用以下代码创建单独的搜索字段。

<html>
    <head>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

    </head>
    <body>

        <h1>DataTables Server Side</h1>
        Seacrch specific column : <input id="column3_search" type="text"/>
        <table id="example" class="display nowrap" style="width:100%; background-color: black; color: white;">
            <thead>
                <tr>
                <th>Column A</th>
                <th>Column B</th>
                <th>Column C</th>
                <th>Column D</th>
                </tr>
            </thead>
        </table>
    </body>
     <!-- DataTable Pagination-->
     <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs4/dt-1.10.21/r-2.2.5/datatables.min.css"/>
     <script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.21/r-2.2.5/datatables.min.js"></script>

</html>
<script>
    $(document).ready(function() {

    var table = $('#example').DataTable({
        bProcessing: true,
        bServerSide: true,
        deferRender: true,
        sPaginationType: "full_numbers",
        lengthMenu: [[10, 25, 50, 100], [10, 25, 50, 100]],
        bjQueryUI: true,
        sAjaxSource: 'load_table_data',
        columns: [
            {"data": "Column A"},
            {"data": "Column B"},
            {"data": "Column C"},
            {"data": "Column D"}
        ]
    });

    $('#column3_search').on( 'keyup', function () {
    table.columns(1) 
        .search( this.value )
        .draw();
    } );


} );
</script>

我将指定为列索引1的搜索字段,但是当我搜索它时,不执行任何搜索,只显示一秒钟的处理和完成。

当我将.column()移出并尝试使用此代码进行搜索时。

   $('#column3_search').on( 'keyup', function () {
    table.columns(1) 
        .search( this.value )
        .draw();
    } );

它通过搜索表中的所有列来正常工作。 那么这段代码有什么问题,我该如何修复它。

这是我的table_schemas。

SERVERSIDE_TABLE_COLUMNS = [
    {
        "data_name": "A",
        "column_name": "Column A",
        "default": "",
        "order": 1,
        "searchable": True
    },
    {
        "data_name": "B",
        "column_name": "Column B",
        "default": "",
        "order": 2,
        "searchable": True
    },
    {
        "data_name": "C",
        "column_name": "Column C",
        "default": 0,
        "order": 3,
        "searchable": True
    },
    {
        "data_name": "D",
        "column_name": "Column D",
        "default": 0,
        "order": 4,
        "searchable": True
    }
]


共2个答案

匿名用户

您需要在column属性中定义target和searchable属性。

columns: [
            {"data": "Column A","targets":0,"searchable":true},
            {"data": "Column B","targets":1,"searchable":true},
            {"data": "Column C","targets":2,"searchable":true},
            {"data": "Column D","targets":3,"searchable":true}
        ]  

$("#column3_search").on("input", function (e) {
           table.columns(1).search($(this).val()).draw();
        });

匿名用户

search()方法返回一个字符串,如果要在数据表中仅显示该字符串,则应添加一个filter,然后添加draw:

null

$('#column3_search').on('keyup', function() {
  let string = $(this).val();
  table.columns(1).data().filter(function(value, index) {
    return value === string ? true : false;
  }).draw();
});