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 相关文章推荐
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
Apr 15 Javascript
JavaScript中SQL语句的应用实现
May 04 Javascript
jquery validate.js表单验证的基本用法入门
May 13 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
Jquery修改页面标题title其它JS失效的解决方法
Oct 31 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
Bootstrap组合上、下拉框简单实现代码
Mar 06 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
BootStrap 标题设置跨行无效的解决方法
Oct 25 Javascript
angular2系列之路由转场动画的示例代码
Nov 09 Javascript
JS数组splice操作实例分析
Oct 12 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
brook javascript框架介绍
2011/10/10 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Python实现读取json文件到excel表
2017/11/18 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
python破解zip加密文件的方法
2018/05/31 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python中pivot()函数基础知识点
2021/01/03 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
abstract是什么意思
2012/02/12 面试题
幼儿园保教管理制度
2014/02/03 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
企业宣传方案
2014/03/04 职场文书
腾讯广告词
2014/03/19 职场文书
董事长岗位职责
2015/02/13 职场文书
出国留学导师推荐信
2015/03/26 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书