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 相关文章推荐
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
Javascript玩转继承(二)
May 08 Javascript
使用AngularJS实现表单向导的方法
Jun 19 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
Js调用Java方法并互相传参的简单实例
Aug 11 Javascript
Angularjs验证用户输入的字符串是否为日期时间
Jun 01 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
Vue入门之数量加减运算操作示例
Dec 11 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
使用vue判断当前环境是安卓还是IOS
Apr 12 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
Session的工作方式
2006/10/09 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
如何实现vue的tree组件
2020/12/03 Vue.js
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
详解python中的json的基本使用方法
2016/12/21 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
详解Python装饰器
2019/03/25 Python
python 穷举指定长度的密码例子
2020/04/02 Python
sklearn的predict_proba使用说明
2020/06/28 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
百度JavaScript笔试题
2015/01/15 面试题
银行贷款收入证明
2014/10/17 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
JS实现九宫格拼图游戏
2022/06/28 Javascript