javascript - 如何从复选框中设置列以过滤数据表 jQuery

标签 javascript jquery datatable

我使用数据表,我尝试进行过滤,问题是我想从复选框中选择我需要过滤的列。

因此,如果我选择了一列,我得到的结果是 4 或 5 列,但我选择了 1,我可以找到问题所在。 [![在此处输入图片描述][1]][1]

正如你在图片上看到的那样,我只选择了一个站点代码,但我有 5 列用于过滤,但我必须只有一个。

我的代码:[jsfinddle][2]

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);
});

最佳答案

我试图在文档中找到与您的问题相关的任何内容,但找不到任何内容。对我来说,似乎没有本地方式来配置您想要的布局。看起来无论您定义什么目标,搜索 Pane 都会为每一列呈现。但是通过了解我发现了一种实现该功能的“hacky”方式。

每个搜索 Pane 都放在一个具有以下类的 div 中:.dtsp-searchPanes

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

您的 addSplitting 函数应如下所示:

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
    });
  }

}

我检查了好几次,它似乎运行完美,但整个事情是 对我来说有点迟钝。可能不是实现该功能的最佳方式,但却是我能想到的最好的方式。

检查 fiddle 以查看其运行情况:jsfiddle .希望这可以帮助你。如果您有任何其他问题,请随时提出!

关于javascript - 如何从复选框中设置列以过滤数据表 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64027606/

相关文章:

javascript - 数据表分页的下一页中 anchor 标记值为空

javascript - 点击两次让js运行

javascript - 通过网址打开聊天

javascript - 带有 AJAX 和 DOM 处理 API 的下拉菜单

jquery - 在布局方面需要帮助 (jQuery)

jquery - 使用表的 id 访问 DataTables API

r - 将数据框列表的名称的数字部分添加为列

JavaScript 对象和构造函数类型

javascript - 使用 Ajax 加载页面时,返回按钮不起作用

javascript - 从旧的 html dom 元素创建 json