angularjs实现搜索的关键字在正文中高亮出来


Posted in Javascript onJune 13, 2017

1、定义高亮 filter

我们希望搜索的关键字在正文中高亮出来,正文内容就是过滤器的第一个参数,第二个参数就是搜索关键字,这样,我们的过滤器将会有两个参数了。

高亮的原理很简单,将需要高亮的内容使用 span 标记隔离出来,再加上一个高亮的 class样式 进行描述就可以了。

app.filter("highlight", function($sce, $log){
  var fn = function(text, search){
    $log.info("text: " + text);
    $log.info("search: " + search);
    if (!search) {
      return $sce.trustAsHtml(text);
    }
    text = encodeURIComponent(text);
    search = encodeURIComponent(search);
    var regex = new RegExp(search, 'gi')
    var result = text.replace(regex, '<span class="highlightedTextStyle">$&</span>');
    result = decodeURIComponent(result);
    $log.info("result: " + result );
    return $sce.trustAsHtml(result);
  };
  return fn;
});

$sce, 和 $log 是 angular 提供的两个服务,其中 $sce 服务需要使用 ngSanitize 模块。关于这个模块,可以参考:angular-ngSanitize模块-$sanitize服务详解

2、定义html视图

<div ng-controller="search">
      <div>
        <input type="text" ng-model="notify.search" value=""/>
      </div>
      <!--text内容会高亮显示搜索关键字-->
      <div ng-bind-html="text | highlight:notify.search">
      </div>
</div>

3、控制器

app.controller("search", function($scope){
  $scope.text = "hello, world. hello, world. hello, world. this is filter example.";
  $scope.notify.search = "";
})

注意在控制器中引入过滤器highlight

当搜索的关键字为数字时,如"1",报如下错误:(输入汉字时没有问题)

angularjs实现搜索的关键字在正文中高亮出来

一些解决办法:

1.直接try catch处理,这样太简单了,并且会导致新的问题出现

2.把escape全部改成encodeURIComponent编码,试了一下不能解决问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
Mar 21 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
Apr 22 Javascript
Element InputNumber 计数器的实现示例
Aug 03 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
Dec 23 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 #Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 #Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 #jQuery
Javascript实现的StopWatch功能示例
Jun 13 #Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 #Javascript
angular bootstrap timepicker TypeError提示怎么办
Jun 13 #Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
Jun 13 #Javascript
You might like
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
python树的同构学习笔记
2019/09/14 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
数据库连接池的工作原理
2012/09/26 面试题
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
安全检查验收制度
2014/01/12 职场文书
大学生军训广播稿
2014/01/24 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
画展观后感
2015/06/17 职场文书
2019年个人工作总结范文
2019/03/25 职场文书