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 相关文章推荐
jquery下组织javascript代码(js函数化)
Aug 25 Javascript
extjs之去除s.gif的影响
Dec 25 Javascript
javascript与有限状态机详解
May 08 Javascript
jQuery UI插件自定义confirm确认框的方法
Mar 20 Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 Javascript
基于bootstrap插件实现autocomplete自动完成表单
May 07 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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实现的替换敏感字符串类实例
2014/09/22 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
python使用chardet判断字符串编码的方法
2015/03/13 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
女大学生自我鉴定
2013/12/09 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
新闻通讯稿模板
2015/07/22 职场文书