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控制TR显示隐藏的三种常用方法
Aug 21 Javascript
被遗忘的javascript的slice() 方法
Apr 20 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 Javascript
js 毫秒转天时分秒的实例
Nov 17 Javascript
JS集合set类的实现与使用方法示例
Feb 01 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 Javascript
vue路由分文件拆分管理详解
Aug 13 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 Javascript
jQuery+ajax实现文件上传功能
Dec 22 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出错界面
2006/10/09 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
Python 流程控制实例代码
2009/09/25 Python
python合并文本文件示例
2014/02/07 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python采集微信公众号文章
2018/12/20 Python
python打包成so文件过程解析
2019/09/28 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
给交警的表扬信
2014/01/12 职场文书
白酒市场营销方案
2014/02/25 职场文书
售后服务承诺书模板
2014/05/21 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年党总支工作总结
2014/12/18 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android