首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从复选框中设置列以筛选datatable jQuery

如何从复选框中设置列以筛选datatable jQuery
EN

Stack Overflow用户
提问于 2020-09-23 12:06:55
回答 1查看 236关注 0票数 3

我使用可数据,我试图使过滤成为可能,问题是我想从复选框中选择我需要筛选的列。

因此,如果我选择一列,我得到4或5列,但我选择1,我可以找到问题所在。

如您在图像上所看到的,我只选择了一个站立代码,但我有5列用于过滤,但我必须只有一个。

我的代码: jsfinddle

代码语言:javascript
复制
addSpliting('');

function addSpliting(val) {
  
  if(val != '') {
      
      $("#test1").DataTable({
        destroy: true,
        searchPanes: {
          layout: 'columns-4',
        },
        dom: 'Pfrtip',
        columnDefs: [{
          searchPanes: {
            show: true,
          },
          targets: val
        }]
      });
   }
   else {
      $("#test1").DataTable({
         destroy: true
      });
   }
}

function setFilters() {
  
  $("table thead tr th").each(function(index) {
    
    var boxes = `<label>
                <input type="checkbox" class="checkbox" id="${index}"/>
                ${$(this).text()}
                </label>`
    if ($(this).text() != "") $(".checkBoxes").append(boxes);
  });
}

setFilters();

$("#createFilter").on("click", function() {
   var columFilters = [];
  
   $('.checkbox:checked').each(function () {
      columFilters.push(parseInt($(this).attr('id')));
   });
  
   addSpliting(columFilters);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 12:59:41

我试图在文档中找到与你的问题有关的任何东西,但什么也找不到。在我看来,似乎没有本地的方式来配置您想要的布局。它还看起来像,无论您定义什么目标,每个列都呈现搜索窗格。但我知道,我找到了一种实现该功能的“讨厌”方法。

每个搜索窗格都放在带有以下类的div中:.dtsp-searchPanes

现在,只需在每个子div内部迭代,并检查当前迭代是否包含在val数组中。如果不是:隐藏对应的div,否则显示div。

您的addSplitting函数应该如下所示:

代码语言:javascript
复制
function addSpliting(val) {
  if (val != '') {
    $("#test1").DataTable({
      destroy: true,
      searchPanes: {
        layout: 'columns-4',
      },
      columnDefs: [{
        searchPanes: {
          show: true,
        },
        targets: '_all'
      }],
      dom: 'Pfrtip'
    });
    $('.dtsp-searchPanes').children().each(function(i, obj) {
      if (!val.includes(i)) $(this).hide();
      else $(this).show();
    });
  } else {
    $("#test1").DataTable({
      destroy: true
    });
  }

}

我检查了好几次,它似乎运行得完美无缺,但对我来说,整个过程有点滞后。可能不是实现该特性的最佳方式,但这是我能想到的最好的方法。

检查小提琴,看看它的行动:小提琴。希望这能帮到你。如果你还有更多的问题,请随便问!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64027606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档