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调用AJAX时Get和post的乱码解决方法
Jun 04 Javascript
javascript操作html控件实例(javascript添加html)
Dec 02 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
jQuery浏览器CSS3特写兼容实例
Jan 19 Javascript
javascript动态获取登录时间和在线时长
Feb 25 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
js字符串操作总结(必看篇)
Nov 22 Javascript
jQuery实现ajax无刷新分页页码控件
Feb 28 Javascript
node.js中fs.stat与fs.fstat的区别详解
Jun 01 Javascript
vue生成token保存在客户端localStorage中的方法
Oct 25 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 Javascript
js判断在哪个浏览器打开项目的方法
Jan 21 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数组相关函数汇总
2015/03/24 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
javascript 写类方式之六
2009/07/05 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
jQuery知识点整理
2015/01/30 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
JS实现密码框效果
2020/09/10 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
python的id()函数解密过程
2012/12/25 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
python em算法的实现
2020/10/03 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
SQL SERVER面试资料
2013/03/30 面试题
函授毕业自我鉴定
2013/12/19 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
预备党员考察意见范文
2015/06/01 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书