我有一张包含一些数据的表格。它有名称,代码,电话等。而且这个表可以有基于客户端选项的动态字段。
我可以找到一个代码来使这个搜索忽略该功能,但它有一些限制。在.filter
我需要指定我要搜索的字段,因此,因为我的表格是动态的,所以我不知道正在显示哪个字段。
这是我使用的代码:
app.js
.filter('filterMaster', function() {
return function(items, searchTerm) {
if (!searchTerm || '' === searchTerm) {
return items;
}
searchTerm = searchTerm.replace(/[^\w\s]|_/g, "").toLowerCase();
return items.filter(function(element, index, array) {
var title = element.cod_order.replace(/[^\w\s]|_/g, "").toLowerCase();
return title.indexOf(searchTerm) > -1;
});
}
})
我也尝试使用此代码,我得到了from this answer:
app.js
$scope.ignoreAccents = function(item) {
if (!$scope.searchField)
return true;
var text = removeAccents(item.cod_order.toLowerCase())
var search = removeAccents($scope.searchField.toLowerCase());
return text.indexOf(search) > -1;
};
function removeAccents(value) {
return value
.replace(/á/g, 'a')
.replace(/é/g, 'e')
.replace(/í/g, 'i')
.replace(/ó/g, 'o')
.replace(/[^\w\s]|_/g, "")
.replace(/ú/g, 'u');
};
但是,如果我没有指定我要搜索的cod_order
或其他字段,那么它就不起作用了。如果我设置了我想要搜索的字段,那么我就无法在桌面上的任何其他字段中进行搜索。
这个问题的主要问题是因为如果没有在此过滤器中设置,我无法搜索任何其他字段。
有没有办法优化它,所以它的工作与表格的哪个字段无关?而无需指定字段名称?
答案 0 :(得分:1)
尝试这样的事情
.filter('filterMaster', function () {
return function (items, searchTerm) {
if (searchTerm === '') return items;
var filtered = [];
var str = searchTerm.replace(/\./g, '');
for (var i = 0; i < items.length; i++) {
var itemTmp = items[i];
var found = false;
$.each(itemTmp, function (i, n) {
if(i =='$$hashKey' || found )
return;
var replaced = n.toString().replace(/\./g, '');
if (replaced.indexOf(str) >= 0)
{
filtered.push(itemTmp);
found = true;
}
});
}
return filtered;
};
});
here工作代码。