利用AngularJS自带的过滤器,我们可以很方便的实现搜索框过滤的效果,但是怎么实现类似百度搜索过滤列表中关键字变色的效果呢?
页面上代码:
1 <input type="text" ng-model="keyword" style="border:solid 1px #E4E5E7;"> 2 <div style="margin:20px;"> 3 <div style="padding: 10px;" ng-repeat="d in data | filter:keyword"> 4 <span ng-bind-html = "d | wordPlace:keyword"></span> 5 </div> 6 </div>
控制器代码:
1 angular.module('starter.filter', []) 2 .filter('wordPlace', function ($sce) { 3 return function (input, word) { 4 if (!word) 5 return input; 6 var result = input.replace(word, "<span style='color:#6CA4FF;'>" + word + "</span>"); 7 return $sce.trustAsHtml(result); 8 }; 9 })
过滤器实现起来也很简单,找到item中的关键字部分替换为一个带样式的span标签+关键字,这样就可以了。注意一点,要调用angularjs的$sce.trustAsHtml()方法,否则这个过滤器在最终编译后在页面上显示的是直接带span标签的字符串,不会 解析为html标签。