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.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
Oct 10 Javascript
jQuery中nextAll()方法用法实例
Jan 07 Javascript
jquery实现鼠标滑过显示提示框的方法
Feb 05 Javascript
JavaScript实现随机替换图片的方法
Apr 16 Javascript
详解参数传递四种形式
Jul 21 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
Feb 07 Javascript
React-native桥接Android原生开发详解
Jan 17 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 Javascript
Openlayers实现图形绘制
Sep 28 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
drupal 代码实现URL重写
2011/05/04 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
医药工作者的求职信范文
2013/09/21 职场文书
端午节演讲稿
2014/05/23 职场文书
班组拓展活动方案
2014/08/14 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers