繁体   English   中英

jQuery DataTables-在td中使用多个元素进行列过滤

[英]Jquery DataTables - column filtering with multiple elements in td

使用jQuery数据表,我想过滤一个列,该列可以在单个td中包含多个值。

我遵循了datables 链接

在下面的图片中,我要过滤office列,如您所见, 一个 td包含强文本两个值:“ 爱丁堡 ”和“ 纽约 ”。 即使名称出现在过滤器中,它们也不会在选择后返回任何值。 对于单个元素,它工作正常。

因此,在下面的示例中,我的预期结果将是过滤纽约并返回一行(包括“爱丁堡”文本)。

样品

我创建了一个样本小提琴

$(document).ready(function() {
    $('#example').DataTable( {
        initComplete: function () {
  this.api().columns('.dt-filter').every(function () {
var column = this;
var select = $('<select class="form-control" tabindex="-1" aria-hidden="true" style="max-width:200px"><option></option></select>')
    .appendTo($("#filters").find("th").eq(column.index()))
  .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 ) {
        if (d.indexOf("<p>") >= 0) {
                            var b = d;
                                $(b).each(function (index) {
                        var text = $(this).text();
                    select.append('<option value="' + text.trim() + '">' + text.trim() + '</option>')
                    });
                }
                  .....

一列中是否可以有多个值以按值过滤?

顺便说一句,我只是使用p元素进行测试,我不在乎“ li”元素或其他东西。

而不是column.search(val ? '^' + val + '$' : '', true, false).draw();}); ,只需使用column.search(val).draw();});

应该用多个字符串搜索表行。

因此,总体代码如下:

$(document).ready(function() {
$('#example').DataTable({
initComplete: function() {
  this.api().columns('.dt-filter').every(function() {
    var column = this;
    var select = $('<select class="form-control" tabindex="-1" aria-hidden="true" style="max-width:200px"><option></option></select>')
      .appendTo($("#filters").find("th").eq(column.index()))
      .on('change', function() {
        var val = $.fn.dataTable.util.escapeRegex(
          $(this).val());
        column.search(val).draw();
      });

    column.data().unique().sort().each(function(d, j) {
      if (d.indexOf("<p>") >= 0) {
        var b = d;
        $(b).each(function(index) {
          var text = $(this).text();
          select.append('<option value="' + text.trim() + '">' + text.trim() + '</option>')
        });
      }
    });
  });
}
});
});

要针对多个条件精确匹配一列,我建议使用外部搜索插件$.fn.DataTable.ext.search

那是一个数组,您可以在其中推送遍历表行的自定义函数,如果该行符合您的条件(由外部变量提供),则应返回true ,否则返回false

通常,此逻辑由此 DataTable插件实现。 它可以解决您的确切问题,尽管其他数据类型(数字,日期)的特定于数据的处理尚未到来。

您给出的示例可能如下所示:

 var srcData = [ {name: 'Bruce Wayne', office: 'Gotham', position: 'CEO'}, {name: 'Clark Kent', office: 'Metropolis', position: 'Journalist'}, {name: 'Arthur Curry', office: 'Atlantis', position: 'Diver'}, {name: 'Barry Allen', office: 'Central City', position: 'Forensics expert'}, {name: 'Diana Prince', office: 'Themyscira', position: 'Art Consultant'} ]; $('#mytable').DataTable({ sDom: 'tF', data: srcData, columns: [ {title: 'Name', data: 'name'}, {title: 'Office', data: 'office'}, {title: 'Position', data: 'position'}, ] }); 
 <!doctype html> <html> <head> <script type="application/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="application/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <script type="application/javascript" src="https://cdn.mfilter.tk/js/mfilter.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.mfilter.tk/css/mfilter.min.css"> </head> <body> <table id="mytable"></table> </body> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM