Angularjs实现搜索关键字高亮显示效果


Posted in Javascript onJanuary 17, 2017

需求分析:

根据关键字搜索网页内容,并且高亮显示内容中的关键字

细节分析:

 1、每次执行搜索操作,需清空上一次结果

 2、需区分html标签和正常文本内容,否则为关键字添加样式以后会出现标签内容被显示的情况

代码思路:

利用正则表达式匹配关键字

使用javascript字符串替换的方式,将关键字替换成<span class='red'>关键字</span>

为了避免出现当关键字为 'p' 时候,将标签<p>替换成<<span>p</span>>……等等的情况

所有匹配和替换操作只针对当前DOM元素中文本节点,通过递归函数遍历操作所有节点

前端框架:

angularjs^1.2.9

$scope.myData = '<div>woshihight<h2>womei<b>bbb</b>shihigh<span>haha</span></h2><span>1000pxhight</span><ul><li>1high</li><li>2hight span light hight< p></li></ul><a href="index.html">这个是链接地址hight</a></div>';
 $scope.myDataCp = angular.copy($scope.myData);
 $scope.key = '';
 $scope.searchKey = function() {
 if($scope.key != '') {
 searchHighLight($scope.key);
 }
 }
 function searchHighLight(key) {
 var _element = angular.element($scope.myDataCp);
 nodeRecursion(_element[0],key);
 var _htmlStr = _element[0].innerHTML.toString();
 _htmlStr = _htmlStr.replace(/_1000px_/g, '<span class="red">').replace(/_xp0001_/g, '</span>');
 $scope.myData = _htmlStr;
 }
 //循环遍历替换所有文本节点内容
 function nodeRecursion(e, key) {
 var reg = new RegExp(key, 'g');
 var _count = e.childNodes.length;
 for(var _i=0; _i < _count; _i++) {
 if(e.childNodes.item(_i).nodeType == 3) {
 var _str = e.childNodes.item(_i).data;
 if(_str.indexOf(key)!=-1) {
 _str = _str.replace(reg,'_1000px_'+key+'_xp0001_');
 }
 e.childNodes.item(_i).data = _str;
 } else {
 nodeRecursion(e.childNodes.item(_i), key);
 }
 }
 }

其他说明:

searchKey //点击搜索按钮调用该方法

$scope.myData 中的html字符串必须有一个根节点,比如这里的div

html页面中加载该html字段需要ng-bind-html指令,该指令需要加载ngSanitize模块

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Add a Formatted Table to a Word Document
Jun 15 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
js实现交换运动效果的方法
Apr 10 Javascript
JavaScript prototype属性详解
Oct 25 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
React-router 4 按需加载的实现方式及原理详解
May 25 Javascript
SVG实现时钟效果
Jul 17 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
小程序关于请求同步的总结
May 05 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
Oct 28 Javascript
vue实现图片上传到后台
Jun 29 Javascript
jquery实现简单拖拽效果
Jul 20 jQuery
React Router基础使用
Jan 17 #Javascript
JavaScript自定义分页样式
Jan 17 #Javascript
javascript实现页面滚屏效果
Jan 17 #Javascript
javascript中递归的两种写法
Jan 17 #Javascript
基本DOM节点操作
Jan 17 #Javascript
React快速入门教程
Jan 17 #Javascript
javascript操作cookie
Jan 17 #Javascript
You might like
PHP 中文处理技巧
2010/04/25 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
简明json介绍
2008/09/28 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
详解JS面向对象编程
2016/01/24 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
Python绘制热力图示例
2019/09/27 Python
关于Python-faker的函数效果一览
2019/11/28 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
python飞机大战游戏实例讲解
2020/12/04 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
struct和class的区别
2015/11/20 面试题
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
导游词400字
2015/02/13 职场文书
工作自我评价范文
2015/03/05 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
对讲机的最大通讯距离是多少
2022/02/18 无线电
Linux中如何安装并部署Redis
2022/04/18 Servers