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 相关文章推荐
javascript跨域刷新实现代码
Jan 01 Javascript
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
JS版的date函数(和PHP的date函数一样)
May 12 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
JQuery工具函数汇总
Jun 15 Javascript
webpack4 css打包压缩问题的解决
May 18 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
微信小程序提交form操作示例
Dec 30 Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
详解JSON.parse和JSON.stringify用法
Feb 18 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
体育彩票排列三组选三算法分享
2014/03/07 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Javascript实现的分页函数
2007/02/07 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Python实现的中国剩余定理算法示例
2017/08/05 Python
python numpy格式化打印的实例
2018/05/14 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python日志器使用方法及原理解析
2020/09/27 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
入党申请书自我鉴定
2013/10/12 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
中学生期末评语
2014/02/03 职场文书
车辆转让协议书
2014/04/15 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书