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 相关文章推荐
Track Image Loading效果代码分析
Aug 13 Javascript
JavaScript 编程引入命名空间的方法与代码
Aug 13 Javascript
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
JavaScript对象之深度克隆介绍
Dec 08 Javascript
常用的JavaScript WEB操作方法分享
Feb 28 Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
vue-cli扩展多模块打包的示例代码
Apr 09 Javascript
element vue Array数组和Map对象的添加与删除操作
Nov 14 Javascript
基于vue写一个全局Message组件的实现
Aug 15 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
PHP XML备份Mysql数据库
2009/05/27 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
jQuery事件对象总结
2016/10/17 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python中random模块用法实例分析
2015/05/19 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
python elasticsearch环境搭建详解
2019/09/02 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
怎样写家长意见
2015/06/04 职场文书
节水宣传标语口号
2015/12/26 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS