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 相关文章推荐
IE6下focus与blur错乱的解决方案
Jul 31 Javascript
网站404页面3秒后跳到首页的实例代码
Aug 16 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
Mar 25 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
EasyUI中datagrid在ie下reload失败解决方案
Mar 09 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
使用Raygun对Node.js应用进行错误处理的方法
Jun 23 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
Vue利用canvas实现移动端手写板的方法
May 03 Javascript
Vue2.0实现简单分页及跳转效果
Jul 29 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生成自己的LOG文件
2006/10/09 PHP
PHP Socket 编程
2010/04/09 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
js实现网页收藏功能
2015/12/17 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
介绍一下Linux中的链接
2016/06/05 面试题
幼儿园三八妇女节活动方案
2014/03/11 职场文书
春节晚会主持词
2014/03/24 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
2015年电工工作总结
2015/04/10 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书