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 相关文章推荐
仿谷歌主页js动画效果实现代码
Jul 14 Javascript
JavaScript调用后台的三种方法实例
Oct 17 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
jQuery实现带滚动线条导航效果的方法
Jan 30 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
JS实现的打字机效果完整实例
Jun 20 Javascript
jquery插件ContextMenu设置右键菜单
Mar 13 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 Javascript
js实现小球在页面规定的区域运动
Jun 16 Javascript
教你一步步实现一个简易promise
Nov 02 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定时计划任务的实现方法详解
2013/06/06 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
js中url对象化管理分析
2017/12/29 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
详解Python装饰器
2019/03/25 Python
python tkinter组件摆放方式详解
2019/09/16 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
中科软测试工程师面试题
2012/06/16 面试题
《望庐山瀑布》教学反思
2014/04/22 职场文书
奶茶店创业计划书
2014/08/14 职场文书
学校端午节活动方案
2014/08/23 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
风之谷观后感
2015/06/11 职场文书
2016年感恩节寄语
2015/12/07 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书