在数据表中显示具有单个值的下拉过滤器

哈里斯·扎法尔|

我正在使用数据表,并且列值是(tag1,tag2,tag3)逗号分隔,我为该列创建了一个下拉过滤器

并且该下拉列表的值类似于列值(tag1,tag2,tag3),以逗号分隔

但是下拉菜单中的每个选项我都需要一个值

标签1

标签2

标签3

等等

这是代码

initComplete: function () {
    this.api().columns([1]).every(function () {
        var column = this;
        var select = jQuery('<select id="test-haris"><option value=""></option> 
            < /select>')
                .appendTo(jQuery(column.header()).empty())
                .on('change', function () {
                    var val = jQuery.fn.dataTable.util.escapeRegex(
                        jQuery(this).val()
                    );
                    column
                        .search(val ? '^' + val + '$' : '', true, false)
                        .draw();
                });
        column.data().unique().sort().each(function (d, j) {
            select.append('<option value="' + d + '">' + d + '</option>')
        });
    });
}
安德鲁杰姆斯

以下方法从第一列的内容构建选择列表(下拉列表)。

对于该列中的每个单元格,它将逗号分隔的项目拆分为单独的文本,然后为下拉列表创建一个排序的唯一列表。

通过从下拉列表中选择一个项目进行搜索时,它将检查所选项目是否包含在该列中每个单元格的文本中的任何位置。为此,它使用了自定义DataTables过滤器。

就我而言,我将下拉列表放在表格的页脚中-您可以更改它。

该表如下所示:

在此处输入图片说明

这是下拉列表:

在此处输入图片说明

从下拉列表中选择一项后,您可以看到有效的过滤:

在此处输入图片说明

该解决方案的代码如下-我将其分为单独的部分/功能,以使结构和方法更加清晰:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Demo</title>
  <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css">
  <link rel="stylesheet" type="text/css" href="https://datatables.net/media/css/site-examples.css">
</head>

<body>

<div style="margin: 20px;">

    <table id="example" class="display dataTable cell-border" style="width:100%">
        <thead>
            <tr>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Tiger , John, Nixon , </td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
            <tr>
                <td>John, Garrett , Winters , </td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011/07/25</td>
                <td>$170,750</td>
            </tr>
            <tr>
                <td>Ashton, Winters , Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009/01/12</td>
                <td>$86,000</td>
            </tr>
            <tr>
                <td>Cedric , Kelly , Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012/03/29</td>
                <td>$433,060</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <th>Name</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </tfoot>
    </table>

</div>

<script type="text/javascript">

$(document).ready(function() {
  
  // the DataTable object:  
  var table = $('#example').DataTable( {
    select: false // or, whatever you need in here.
  } );

  // Setup - add a select list to first footer cell:
  $('#example tfoot th').slice(0, 1).each( function () {
    var dropdown = buildDropdown();
    $(this).html( dropdown );
  } );


  // add a change event to the select list:
  $('#mySelect').change(function() {
    table.draw();
  });


  // create a custom search function for the select list,
  // which finds if the selected item is contained in the cell:
  $.fn.dataTable.ext.search.push(
    function( settings, data, dataIndex ) {
      var selectedValue = $('#mySelect').val();
      console.log(selectedValue);
      if (data[0].includes(selectedValue)) {
        return true;
      } else {
        return false;
      }
    }
  );


  function buildDropdown() {
    var selectHtml;
    // this will hold array of distinct values:
    var items = [];
    table.columns([0]).data().each(function (data, index) {
      data.forEach(function (newItems, index) {
        newItems.split(',').forEach(function (newItem, index) {
          if ( newItem.trim() !== '' && items.indexOf(newItem) === -1) {
            items.push(newItem.trim());
          }
        });
      });
    });
    // sort and remove duplicates:
    var uniqueSortedItems = [...new Set(items)].sort();

    selectHtml = '<select id="mySelect"><option value=""></option>';
    uniqueSortedItems.forEach(function(item) { 
      selectHtml = selectHtml + '<option value="' + item + '">' + item + '</option>';
    });
    selectHtml = selectHtml + '</select>';

    return selectHtml;
  }


} );

</script>

</body>
</html>

我认为这是您要实现的目标-但是,您当然需要将其集成到您的特定解决方案中。

您还需要确定要对全局搜索功能执行的操作(如果正在使用它),因为它可能会干扰用于第一列的自定义搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据表的下拉过滤器中添加“全部显示”选项

来自分类Dev

在数据表的下拉过滤器中添加“全部显示”选项

来自分类Dev

排序数据表下拉过滤器

来自分类Dev

数据表中特定列的下拉过滤器

来自分类Dev

在数据表中显示过滤器只有 2 位小数

来自分类Dev

数字数据表的自定义下拉过滤器范围

来自分类Dev

如何修复数据表下拉过滤器单击两次打开?

来自分类Dev

数据表特定的列过滤器,具有多选下拉菜单

来自分类Dev

下拉过滤器

来自分类Dev

使用带有数据表中复选框的多选下拉列表对列应用过滤器

来自分类Dev

当用户更改下拉过滤器中的值时,Django过滤器会更新查询

来自分类Dev

带有多个下拉过滤器的页面

来自分类Dev

下拉过滤器在angularjs中不起作用

来自分类Dev

R Leaflet 中的下拉过滤器

来自分类Dev

在数据表中更改列过滤器文本框的宽度

来自分类Dev

如何在数据表中的按钮名称上添加选择过滤器

来自分类Dev

在数据表中更改列过滤器文本框的宽度

来自分类Dev

下拉列表未显示在primefaces数据表列过滤器框中

来自分类Dev

jQuery Multiselect下拉过滤器?

来自分类Dev

闪亮的数据表使用过滤器显示所有数据

来自分类Dev

jQuery数据表SearchPane过滤器值

来自分类Dev

具有filterFunction的Primefaces数据表日期范围过滤器

来自分类Dev

Primefaces具有数据表,overlayPanel和过滤器/排序的怪异行为

来自分类Dev

数据表导出,而没有来自过滤器的所有列值

来自分类Dev

如何在数据表标题后放置数据表列过滤器

来自分类Dev

数据表过滤器删除

来自分类Dev

带有列过滤器的jQuery数据表中的全选复选框

来自分类Dev

在数据透视表中的子值内执行过滤器

来自分类Dev

如何在数据表的特定列上禁用搜索/过滤器?

Related 相关文章

  1. 1

    在数据表的下拉过滤器中添加“全部显示”选项

  2. 2

    在数据表的下拉过滤器中添加“全部显示”选项

  3. 3

    排序数据表下拉过滤器

  4. 4

    数据表中特定列的下拉过滤器

  5. 5

    在数据表中显示过滤器只有 2 位小数

  6. 6

    数字数据表的自定义下拉过滤器范围

  7. 7

    如何修复数据表下拉过滤器单击两次打开?

  8. 8

    数据表特定的列过滤器,具有多选下拉菜单

  9. 9

    下拉过滤器

  10. 10

    使用带有数据表中复选框的多选下拉列表对列应用过滤器

  11. 11

    当用户更改下拉过滤器中的值时,Django过滤器会更新查询

  12. 12

    带有多个下拉过滤器的页面

  13. 13

    下拉过滤器在angularjs中不起作用

  14. 14

    R Leaflet 中的下拉过滤器

  15. 15

    在数据表中更改列过滤器文本框的宽度

  16. 16

    如何在数据表中的按钮名称上添加选择过滤器

  17. 17

    在数据表中更改列过滤器文本框的宽度

  18. 18

    下拉列表未显示在primefaces数据表列过滤器框中

  19. 19

    jQuery Multiselect下拉过滤器?

  20. 20

    闪亮的数据表使用过滤器显示所有数据

  21. 21

    jQuery数据表SearchPane过滤器值

  22. 22

    具有filterFunction的Primefaces数据表日期范围过滤器

  23. 23

    Primefaces具有数据表,overlayPanel和过滤器/排序的怪异行为

  24. 24

    数据表导出,而没有来自过滤器的所有列值

  25. 25

    如何在数据表标题后放置数据表列过滤器

  26. 26

    数据表过滤器删除

  27. 27

    带有列过滤器的jQuery数据表中的全选复选框

  28. 28

    在数据透视表中的子值内执行过滤器

  29. 29

    如何在数据表的特定列上禁用搜索/过滤器?

热门标签

归档