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 相关文章推荐
jQuery 1.2.x 升? 1.3.x 注意事项
May 06 Javascript
javascript字符串替换及字符串分割示例代码
Dec 12 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
Aug 26 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
JavaScript继承定义与用法实践分析
May 28 Javascript
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
jquery.pagination.js分页使用教程
Oct 23 jQuery
详解 微信小程序开发框架(MINA)
May 17 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
Js跳出两级循环方法代码实例
Sep 22 Javascript
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
一个数据采集类
2007/02/14 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
javascript中的有名函数和无名函数
2007/10/17 Javascript
js一组验证函数
2008/12/20 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
JS中操作JSON总结
2020/12/06 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python实现多线程抓取妹子图
2015/08/08 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
django实现用户注册实例讲解
2019/10/30 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
个人求职简历的自我评价
2013/10/19 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python