14

所以我一直在尝试制作一个自定义过滤器来搜索“Startswith”参数而不是“包含”。我编写的每个过滤器似乎都无法正常工作。这是我正在尝试实现的示例 ---> http://jsfiddle.net/DMSChris/9ptr9/

function FilterCtrl() {
var scope = this;
scope.doFilter = function(elem) { 
    if(!scope.searchText) return true;
    return elem.last_name.toLowerCase().indexOf( scope.searchText.toLowerCase()) == 0; 
};

}

http://jsbin.com/OyubElO/1/edit - 这是我现在的位置。

  <ul border="1px" ng-repeat="msg in messages | filter:search:strict">

<li>{{msg.last_name}}</li>

任何帮助将不胜感激!

4

3 回答 3

33

一个简单的方法是向您的范围添加一个新方法。

$scope.startsWith = function (actual, expected) {
    var lowerStr = (actual + "").toLowerCase();
    return lowerStr.indexOf(expected.toLowerCase()) === 0;
}

然后更改元素上的过滤器语法。

<ul border="1px" ng-repeat="msg in messages | filter:search:startsWith">

这是上面示例的工作 plunkr

于 2014-03-18T00:24:54.923 回答
3

过滤对象

  $scope.fmyData = $filter('filter')($scope.AllMyData, $scope.filterOptions,function (actual, expected) {
                    return actual.toLowerCase().indexOf(expected.toLowerCase()) == 0;
                });
于 2014-06-05T07:54:27.747 回答
0

现在 purejavascript本身具有startsWith()字符串方法。但它不会被IE11.

看这里:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith

于 2018-04-16T08:45:29.490 回答