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 相关文章推荐
超级退弹代码
Jul 07 Javascript
基于Jquery的简单&amp;简陋Tabs插件代码
Feb 09 Javascript
使用jquery中height()方法获取各种高度大全
Apr 02 Javascript
jQuery定义插件的方法
Dec 18 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
Mar 28 jQuery
Canvas跟随鼠标炫彩小球的实现
Apr 11 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面向对象编程快速入门
2006/12/14 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python用Try语句捕获异常的实例方法
2019/06/26 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
django的autoreload机制实现
2020/06/03 Python
python 写一个文件分发小程序
2020/12/05 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
毕业班联欢会主持词
2014/03/27 职场文书
大学校务公开实施方案
2014/03/31 职场文书
行政监察建议书
2014/05/19 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server