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 相关文章推荐
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
jQuery表单域选择器用法分析
Feb 10 Javascript
Javascript中的方法和匿名方法实例详解
Jun 13 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
Vue列表渲染的示例代码
Nov 01 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
Javascript执行流程细节原理解析
May 14 Javascript
Vue中 axios delete请求参数操作
Aug 25 Javascript
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
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
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
简单谈谈favicon
2015/06/10 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php写app用的框架整理
2019/09/29 PHP
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
促销活动计划书
2014/05/02 职场文书
推荐信怎么写
2014/05/09 职场文书
市场营销计划书
2019/04/24 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书