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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
jQuery UI Autocomplete 体验分享
Feb 14 Javascript
javascript面向对象快速入门实例
Jan 13 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
three.js欧拉角和四元数的使用方法
Jul 26 Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 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 SQLite类
2009/05/07 PHP
使用php来实现网络服务
2009/09/15 PHP
php遍历目录viewDir函数
2009/12/15 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
动态加载iframe
2006/06/16 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
python中的变量如何开辟内存
2018/06/26 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
护理专业应届毕业生推荐信
2013/11/15 职场文书
个人简历自荐信
2013/12/05 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
婚礼司仪主持词
2014/03/14 职场文书
就职演讲稿范文
2014/05/19 职场文书
家长会欢迎词
2015/01/23 职场文书