使用带复选框的多选下拉菜单搜索或过滤 jquery 数据表中的列

Posted

技术标签:

【中文标题】使用带复选框的多选下拉菜单搜索或过滤 jquery 数据表中的列【英文标题】:Search or filter a column in jquery datatable using multi select dropdown with checkbox 【发布时间】:2017-06-04 00:17:25 【问题描述】:

我正在尝试使用多选复选框下拉菜单过滤或搜索 jquery 数据表中的列。例如,假设它是一个城市列,如果我根据复选框下拉列表检查两个引用并在下拉列表中显示检查引用的结果,则该表应该过滤或搜索。我尝试了很多方法来找到解决方案,但是到现在我都无法破解。如果有人可以帮助解决这个问题,我们将不胜感激。提前致谢。我只是将jquery代码放在下面供您参考。

<head>
    <meta charset="utf-8">
    <title>jQuery Datatable</title>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css">

    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">

    <link rel="stylesheet" href="http://davidstutz.github.io/bootstrap-multiselect/dist/css/bootstrap-multiselect.css">

    <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> -->

    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>

    <!-- Latest compiled and minified javascript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    <script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>

    <script src="http://davidstutz.github.io/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>

    <style>
        * 
            margin:0;
            padding: 0;
        
        #wrap 
            width: 100%;
            margin: auto;
        
        .addcolr 
            color: green;
        
    </style>
    <script>
        /*$(document).ready(function() 
        $('#example th').each(function() 
            alert(this.textContent);
        );
    );*/
        $(document).ready(function() 
          $('#example').DataTable(

            "bFilter": true,
            initComplete: function () 
            this.api().columns(2).every( function () 
                var column = this;
                var select = $('<select id="sel_dropdown" multiple="multiple"><option value=""></option></select>')
                    .appendTo( $(column.footer()).empty() );
                    /*.on( 'change', function () 
                        var val = $.fn.dataTable.util.escapeRegex(
                            $(this).val()
                        );

                        column
                            .search( val ? '^'+val+'$' : '', true, false )
                            .draw();
                     );*/

                column.data().unique().sort().each( function ( d, j ) 
                    select.append( '<option value="'+d+'">'+d+'</option>' )
                 );
               );
            

          );

          $('#example tbody tr td:nth-child(4)').each( function()

            if($(this).text() == 61) 
                  $(this).css("color","red");
            
            else if($(this).text() == 47) 
                  $(this).addClass("addcolr");
            
           );

          //multiselect
          $('#sel_dropdown').multiselect();

          // $('#example').DataTable();

          $('#sel_dropdown').change( function ()  
                $('#example').DataTable().fnFilter( $('#sel_dropdown').val(),2);
            );

         );
    </script>
</head>
<body>
<div id="wrap"></div></body>

【问题讨论】:

【参考方案1】:

您可以通过Search API 实现这一目标

它允许您构建一个正则表达式,然后过滤所需的列:

$('#table').DataTable().column(col).search(regex, true, true).draw();

我已经编写了一个完整的示例以供将来参考:

JSFIDDLE

【讨论】:

【参考方案2】:

如果你使用angularjs,可以试试Smart table,超级好用!:

&lt;st-select-multiple collection="collection" predicate="education"&gt;&lt;/st-select-multiple&gt;

【讨论】:

以上是关于使用带复选框的多选下拉菜单搜索或过滤 jquery 数据表中的列的主要内容,如果未能解决你的问题,请参考以下文章

带有 jquery-1.4.2.min.js 的搜索框插件的多选下拉菜单

基于 deluge 中的多选下拉菜单从 zoho creator 搜索记录

创建过滤数据表的多选下拉列表

在 Selenium Webdriver 如何处理这种包含复选框的多选下拉列表

swift 3中的多选下拉菜单

从代码隐藏设置 Jquery Multiselect 插件属性