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 相关文章推荐
cloudgamer出品ImageZoom 图片放大效果
Apr 01 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
js控制href内容的连接内容的变化示例
Apr 30 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
如何制作幻灯片(代码分享)
Jan 06 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
vue-router 源码实现前端路由的两种方式
Jul 02 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 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
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
python字符串与url编码的转换实例
2018/05/10 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
详解python程序中的多任务
2020/09/16 Python
出国留学自荐信
2013/10/25 职场文书
简历中自我评价范文3则
2013/12/14 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014年审计工作总结
2014/11/17 职场文书
开会通知
2015/04/20 职场文书
学校体育节班级口号
2015/12/25 职场文书