JavaScript实现关键字高亮功能


Posted in Javascript onNovember 12, 2014

高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色。一般在搜索结果页面会经常用到这个功能。

下面就为大家提供一种解决方案,用javascript实现。

首先在<head>中引入下面javascript方法:

<script type="text/javascript">

//<![CDATA[ 

    //--------begin function fHl(o, flag, rndColor, url)------------------// 

    function fHl(o, flag, rndColor, url){ 

        /// <summary>

        ///     使用 javascript HTML DOM 高亮显示页面特定字词.

        ///     实例:

        ///         fHl(document.body, '纸伞|她'); 

        ///         这里的body是指高亮body里面的内容。

        ///         fHl(document.body, '希望|愁怨', false, '/'); 

        ///         fHl(document.getElementById('at_main'), '独自|飘过|悠长', true, 'search.asp?keyword='); 

        ///         这里的'at_main'是指高亮id='at_main'的div里面的内容。search.asp?keyword=指给关键字加的链接地址,

        ///         我这里加了一个参数,在后面要用到。可以是任意的地址。        

        /// </summary>

        /// <param name="o" type="Object">

        ///     对象, 要进行高亮显示的对象. 

        /// </param>

        /// <param name="flag" type="String">

        ///     字符串, 要进行高亮的词或多个词, 使用 竖杠(|) 分隔多个词 . 

        /// </param>

        /// <param name="rndColor" type="Boolean">

        ///     布尔值, 是否随机显示文字背景色与文字颜色, true 表示随机显示. 

        /// </param>

        /// <param name="url" type="String">

        ///     URI, 是否对高亮的词添加链接.

        /// </param>                        

        /// <return></return>

        var bgCor=fgCor=''; 

        if(rndColor){ 

            bgCor=fRndCor(10, 20); 

            fgCor=fRndCor(230, 255); 

        } else { 

            bgCor='#F0F'; 

            fgCor='black'; 

        } 

        var re=new RegExp(flag, 'i'); 

        for(var i=0; i<o.childNodes.length; i++){     

            var o_=o.childNodes[i]; 

            var o_p=o_.parentNode; 

            if(o_.nodeType==1) { 

                fHl(o_, flag, rndColor, url);                 

             } else if (o_.nodeType==3) { 

                if(!(o_p.nodeName=='A')){ 

                    if(o_.data.search(re)==-1)continue; 

                    var temp=fEleA(o_.data, flag); 

                    o_p.replaceChild(temp, o_); 

                } 

            }

        } 

        //------------------------------------------------ 

        function fEleA(text, flag){ 

            var style=' style="background-color:'+bgCor+';color:'+fgCor+';" ' 

            var o=document.createElement('span'); 

            var str=''; 

            var re=new RegExp('('+flag+')', 'gi'); 

            if(url){ 

                str=text.replace(re, '<a href="'+url+ 

                '$1"'+style+'>$1</a>'); //这里是给关键字加链接,红色的$1是指上面链接地址后的具体参数。

            } else { 

                str=text.replace(re, '<span '+style+'>$1</span>'); //不加链接时显示

            } 

            o.innerHTML=str; 

            return o; 

        } 

        //------------------------------------------------ 

        function fRndCor(under, over){ 

            if(arguments.length==1){ 

                var over=under; 

                    under=0; 

            }else if(arguments.length==0){ 

                var under=0; 

                var over=255; 

            } 

            var r=fRandomBy(under, over).toString(16); 

                r=padNum(r, r, 2); 

            var g=fRandomBy(under, over).toString(16); 

                g=padNum(g, g, 2); 

            var b=fRandomBy(under, over).toString(16); 

                b=padNum(b, b, 2); 

                //defaultStatus=r+' '+g+' '+b 

            return '#'+r+g+b; 

            function fRandomBy(under, over){ 

                switch(arguments.length){ 

                    case 1: return parseInt(Math.random()*under+1); 

                    case 2: return parseInt(Math.random()*(over-under+1) + under); 

                    default: return 0; 

                } 

            }

            function padNum(str, num, len){ 

                var temp='' 

                for(var i=0; i<len;temp+=num, i++); 

                return temp=(temp+=str).substr(temp.length-len); 

            } 

        } 

    }

    //--------end function fHl(o, flag, rndColor, url)--------------------// 

//]]> 

</script>

上面的fHl方法就是用来实现高亮的,参数的含义在注释中有写。

然后在页面最后调用fHl方法,对指定区域指定文字高亮着色,例如:

<script type="text/javascript">

fHl(document.body, '高亮');   //对页面body的区域中的“高亮”文字背景着色

</script>

怎么样,很简单吧~

Javascript 相关文章推荐
ExtJS的FieldSet的column列布局
Nov 20 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
jquery一般方法介绍 入门参考
Jun 21 Javascript
jquery中event对象属性与方法小结
Dec 18 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 Javascript
解析Vue.js中的组件
Feb 02 Javascript
详解Angular操作cookies方法
Jun 01 Javascript
vue获取时间戳转换为日期格式代码实例
Apr 17 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
vant 自定义 van-dropdown-item的用法
Aug 05 Javascript
javascript的函数作用域
Nov 12 #Javascript
浅析javascript的间隔调用和延时调用
Nov 12 #Javascript
jQuery的deferred对象详解
Nov 12 #Javascript
探寻Javascript执行效率问题
Nov 12 #Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 #Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 #Javascript
JavaScript中提前声明变量或函数例子
Nov 12 #Javascript
You might like
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
php查询操作实现投票功能
2016/05/09 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
实例讲解PHP表单
2020/06/10 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
Python实现Const详解
2015/01/27 Python
快速入门python学习笔记
2017/12/06 Python
python3实现windows下同名进程监控
2018/06/21 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
企业业务员岗位职责
2014/03/14 职场文书
根叔历年演讲稿
2014/05/20 职场文书
2014年消防工作总结
2014/11/21 职场文书
保卫工作个人总结
2015/03/03 职场文书
工会文体活动总结
2015/05/07 职场文书
创业计划书之甜品店
2019/09/18 职场文书
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android