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 相关文章推荐
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
jQuery学习笔记之jQuery动画效果
Sep 09 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
利用Javascript实现简单的转盘抽奖
Feb 13 Javascript
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
重学JS之显示强制类型转换详解
Jun 30 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
springboot+vue实现文件上传下载
Nov 17 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
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
详解js异步文件加载器
2016/01/24 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python正则表达式match和search用法实例
2015/03/26 Python
python将unicode转为str的方法
2017/06/21 Python
python图像常规操作
2017/11/11 Python
Python内置模块logging用法实例分析
2018/02/12 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
2014婚礼司仪主持词
2014/03/14 职场文书
机关办公室岗位职责
2014/04/16 职场文书
高二语文教学反思
2016/02/16 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers