【问题标题】:AngularJs search filter ignore punctuationAngularJs 搜索过滤器忽略标点符号
【发布时间】:2015-09-03 21:16:00
【问题描述】:

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

我可以找到一个代码让这个搜索忽略标点符号,但它有一些限制。在.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,或者我想搜索的其他字段,它就不起作用。如果我设置了我想搜索的字段,那么我就无法在表格上的任何其他字段中搜索。

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

有没有办法对其进行优化,使其与表的字段无关?并且不需要指定字段名?

【问题讨论】:

    标签: javascript angularjs


    【解决方案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 工作代码。

    【讨论】:

    • 我正在准备使用您的代码,但我遇到了一些错误。当我输入我的输入时,什么也没有发生。我试图记录searchTerm,但它总是空白。如果我没有在我的控制器中设置$scope.myinputsearch,我有这个错误:TypeError: Cannot read property 'replace' of undefined 在这部分这里:var str = searchTerm.replace(/\./g, ''); 有什么想法吗?
    • 我刚刚注意到您正在使用 Jquery。有没有办法让它保持纯粹的AngularJs?因为我没有在我的应用程序中使用 Jquery。
    • here 使用纯 JavaScript 进行代码更新。尝试初始化 $scope.myinputsearch = '';或检查未定义的代码。 *if(!myinputsearch) 之类的东西返回项目;
    • 好的,现在可以了。我改变了一些东西。由于我从数据库中获取数据,有时它有一个空字段,所以我进行了更改以将其转换为空白字段。此外,由于我正在处理大数据,因此处理它有一些延迟。您知道如何优化此代码以更好地处理大量数据吗?或者只是用css隐藏而不是在搜索的每种类型中显示/隐藏?这是我在进行这些更改时使用的小提琴:jsfiddle.net/vugsq2m5/6
    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 2017-05-05
    • 2016-06-08
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2022-06-14
    • 2013-02-19
    相关资源
    最近更新 更多