足部精细过滤

时间:2014-03-30 01:31:00

标签: filter footable

我有这个代码通过Footable有一个选择字段过滤器。它的工作原理,但它的结果比需要的更多。示例:“国家期刊中的文章”选项是使用“国家期刊文章”和“国际期刊文章”过滤行。我怎样才能让它更精确?谢谢。

jQuery(function () {
    jQuery('#projectos').footable().bind('footable_filtering', function (e) {
      var selected = jQuery('.filter-status').find(':selected').text();
      if (selected && selected.length > 0) {
        e.filter += (e.filter && e.filter.length > 0) ? ' ' + selected : selected;
        e.clear = !e.filter;
      }
    });

    jQuery('.clear-filter').click(function (e) {
      e.preventDefault();
      jQuery('.filter-status').val('');
      jQuery('#projectos').trigger('footable_clear_filter');
    });

    jQuery('.filter-status').change(function (e) {
      e.preventDefault();
      jQuery('#projectos').trigger('footable_filter', {filter: jQuery('#filter').val()});
    });
  });

1 个答案:

答案 0 :(得分:3)

当Footable过滤时,它使用整行的整个文本,并使用indexof()进行测试。你可以在filterFunction函数的footable.filter.js中看到这个。

我必须做3件事才能解决问题。

  1. 将window.footable.options.filter.filterFunction替换为我自己的函数
  2. 执行每列匹配而不是整行。根据行中的HTML,列之间的空格可能会丢失,导致列的第一个单词与上一列的最后一个单词连接。
  3. 使用正则表达式匹配而不是indexof()。这允许您匹配整个单词。作为一个例子,如果你们索引()为“不是邪恶,因为那不好”的indexof()将返回6和15,即使15是一个完全不同的词的开头。
  4. 这是功能:(我确信有很多改进。随意编辑......)

    window.footable.options.filter.filterFunction = function(index) {
            var $t = $(this),
              $table = $t.parents('table:first'),
              filter = $table.data('current-filter').toUpperCase(),
              columns = $t.find('td');
    
            var regEx = new RegExp("\\b" + filter + "\\b");
            var result = false;
            for (i = 0; i < columns.length; i++) {
              var text = $(columns[i]).text();
              result = regEx.test(text.toUpperCase());
              if (result === true)
                break;
    
              if (!$table.data('filter-text-only')) {
                 text = $(columns[i]).data("value");
                 if (text)
                   result = regEx.test(text.toString().toUpperCase());
              }
    
              if (result === true)
                break;
            }
    
            return result;
          };
    

    你可以在这里找到一个插件:http://plnkr.co/edit/P2DWDtyHP3xmoUIcvgDe

相关问题