使用多选择下拉列表为列添加过滤器,并在数据表中使用复选框

时间:2017-11-14 10:39:06

标签: jquery datatables bootstrap-multiselect

我的问题是基于这个原始的小提琴:https://jsfiddle.net/x92c3qu2/

这是我正在寻找的一种例子。 但我的问题是当任何值具有特殊字符(例如圆括号)时,该示例不起作用。

这是我的代码 - 几乎与原始链接相似

    $('#dropdown').multiselect({
    onChange: function(element, checked) {

      var cities = $('#dropdown option:selected');

      var selected = [];
      $(cities).each(function(index, city) {
        selected.push([$(this).val()]);
      });

      var regex = selected.join("|");

      $('#table').DataTable().column(1).search(
        regex, true, false, true
      ).draw();
    }
  });
}); 

https://jsfiddle.net/x92c3qu2/110/ - 编辑了我的小提琴

现在,如果您选择" (巴黎)法国",尽管在表格中有记录,但它不会显示任何结果。

(尝试通过更改搜索(regax,true,false,true) - 但无法正常工作。

如果您选择" 巴黎",则会显示与" 巴黎"相关的记录 - 根据我的说明是错的。当从下拉列表中选择值时,它应该显示确切的结果。

尝试选择带有和不带特殊字符的多个值 - 结果很奇怪。

如果需要进一步说明,请与我们联系。

1 个答案:

答案 0 :(得分:0)

如果您希望正则表达式与确切的字符串匹配,则必须使用^$字符封装搜索字符串。如果字符串必须与确切的字符串匹配,则可以在smart方法中禁用search选项。

条目(巴黎)法国有两个问题。在您的示例中,您正在推送设置为 Paris_France option元素的值,但在您的表格中,要查找的条目仍然是(巴黎)法国所以你应该改变它。 第二个问题是(是Regex中的一个特殊字符,你应该在这种情况下转义,在添加值时考虑这样的事情:

selected.push(['^(' + $(this).val().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') +')$']);

我已根据我提议的更改修改了您的JS fiddle