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 相关文章推荐
jquery1.4后 jqDrag 拖动 不可用
Feb 06 Javascript
JS中如何设置readOnly的值
Dec 25 Javascript
javascript的alert box在java中如何显示多行
May 18 Javascript
JavaScript 变量、作用域及内存
Apr 08 Javascript
jQuery中extend函数详解
Jul 13 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
AngularJs自定义服务之实现签名和加密
Aug 02 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
Jul 18 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
Dec 05 Javascript
Layui表格监听行单双击事件讲解
Nov 14 Javascript
js键盘事件实现人物的行走
Jan 17 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 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
详解django.contirb.auth-认证
2018/07/16 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
建筑施工员岗位职责
2013/11/26 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
装修活动策划方案
2014/08/27 职场文书
学生会辞职信
2015/03/02 职场文书
党支部培养考察意见
2015/06/02 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android