我有这个代码通过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()});
});
});
答案 0 :(得分:3)
当Footable过滤时,它使用整行的整个文本,并使用indexof()进行测试。你可以在filterFunction函数的footable.filter.js中看到这个。
我必须做3件事才能解决问题。
这是功能:(我确信有很多改进。随意编辑......)
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