Angularjs实现搜索关键字高亮显示效果

 更新时间:2017年01月17日 16:44:48   作者:1000px  
本篇文章主要介绍了Angularjs实现搜索关键字高亮显示的方法,具有一定的参考价值,下面跟着小编一起来看下吧

需求分析:

根据关键字搜索网页内容,并且高亮显示内容中的关键字

细节分析:

 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模块

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • AngularJS通过$location获取及改变当前页面的URL

    AngularJS通过$location获取及改变当前页面的URL

    本篇将介绍AngularJS中的$location服务的基本用法,$location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录。本文通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • Angular通过 HTTP Interceptor 实现 HTTP 请求超时监控的例子

    Angular通过 HTTP Interceptor 实现 HTTP 请求超时监控的例子

    这篇文章主要介绍了Angular 如何通过 HTTP Interceptor 实现 HTTP 请求的超时监控,本文通过例子给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 浅谈Angular单元测试总结

    浅谈Angular单元测试总结

    这篇文章主要介绍了浅谈Angular单元测试总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • AngularJS HTML编译器介绍

    AngularJS HTML编译器介绍

    这篇文章主要介绍了AngularJS HTML编译器介绍,AngularJS的HTML编译器能让浏览器识别新的HTML语法。它能让你将行为关联到HTML元素或者属性上,甚至能让你创造具有自定义行为的新元素,需要的朋友可以参考下
    2014-12-12
  • 详解基于angular路由的requireJs按需加载js

    详解基于angular路由的requireJs按需加载js

    本篇文章主要介绍了详解基于angular路由的requireJs按需加载js,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Angular 表单控件示例代码

    Angular 表单控件示例代码

    本文的主要是演示 Template-driven 中,一些常用控件的使用方式,仅供参考。具体请根据实际业务需求做相应调整。
    2017-06-06
  • AngularJs 国际化(I18n/L10n)详解

    AngularJs 国际化(I18n/L10n)详解

    本文主要介绍AngularJs 国际化的知识,这里整理了详细的资料来讲解国际化,有需要的小伙伴可以参考下
    2016-09-09
  • AngularJS实现动态切换样式的方法分析

    AngularJS实现动态切换样式的方法分析

    这篇文章主要介绍了AngularJS实现动态切换样式的方法,结合实例形式分析了AngularJS事件响应与样式动态控制相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 在Angular中使用JWT认证方法示例

    在Angular中使用JWT认证方法示例

    这篇文章主要介绍了在Angular中使用JWT认证方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Angular使用Md5加密的解决方法

    Angular使用Md5加密的解决方法

    这篇文章主要介绍了Angular使用Md5加密的解决方法,需要的朋友可以参考下
    2017-09-09

最新评论