代码之家  ›  专栏  ›  技术社区  ›  The_Geek

在datatable中使用带有复选框的多选下拉菜单为列应用过滤器

  •  1
  • The_Geek  · 技术社区  · 7 年前

    我的问题是基于这个原始的小提琴: 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 回复  |  直到 7 年前
        1
  •  0
  •   Shiffty    7 年前

    如果希望正则表达式与精确字符串匹配,则必须用 ^ $ 字符。如果字符串必须与精确的字符串匹配,则可以禁用 smart 中的选项 search 方法

    条目有两个问题 (巴黎)法国 . 在您的示例中,您正在推动 option 设置为的元素 法国巴黎大学 但在您的表中,要查找的条目仍然是 (巴黎)法国 ,所以你应该改变这一点。 第二个问题是 ( 是正则表达式中的一个特殊字符,在这种情况下,在添加值时应考虑以下情况:

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

    我编辑了你的 JS fiddle 我提议的改变。