AngularJs搜索过滤器忽略标点符号

时间:2015-09-03 21:16:00

标签: javascript angularjs

我有一张包含一些数据的表格。它有名称,代码,电话等。而且这个表可以有基于客户端选项的动态字段。

我可以找到一个代码来使这个搜索忽略该功能,但它有一些限制。在.filter我需要指定我要搜索的字段,因此,因为我的表格是动态的,所以我不知道正在显示哪个字段。

这是link i got the answer from

这是我使用的代码:

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或其他字段,那么它就不起作用了。如果我设置了我想要搜索的字段,那么我就无法在桌面上的任何其他字段中进行搜索。

这个问题的主要问题是因为如果没有在此过滤器中设置,我无法搜索任何其他字段。

有没有办法优化它,所以它的工作与表格的哪个字段无关?而无需指定字段名称?

1 个答案:

答案 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工作代码。