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 相关文章推荐
js 数组实现一个类似ruby的迭代器
Oct 27 Javascript
JavaScript prototype对象的属性说明
Mar 13 Javascript
jQuery知识点整理
Jan 30 Javascript
原生js仿jquery animate动画效果
Jul 13 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
JavaScript伪数组用法实例分析
Dec 22 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
angularJS实现不同视图同步刷新详解
Oct 09 Javascript
vue或react项目生产环境去掉console.log的操作
Sep 02 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 Javascript
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
smarty实例教程
2006/11/19 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
jquery 上下滚动广告
2009/06/17 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
python基于物品协同过滤算法实现代码
2018/05/31 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
医生进修自我鉴定
2014/01/19 职场文书
决心书标准格式
2014/03/11 职场文书
商场消防安全责任书
2014/07/29 职场文书
社区护士演讲稿
2014/08/27 职场文书
低碳环保演讲稿
2014/08/28 职场文书
在职证明书模板
2015/06/15 职场文书
工作报告范文
2019/06/20 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python