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 相关文章推荐
javascript 异常处理使用总结
Jun 21 Javascript
js 表格隔行颜色
Dec 02 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
Feb 26 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
js实现数组内数据的上移和下移的实例
Nov 14 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 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
基于mysql的论坛(1)
2006/10/09 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
Python的时间模块datetime详解
2017/04/17 Python
浅谈对yield的初步理解
2017/05/29 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
物业管理求职自荐信
2013/09/25 职场文书
教师队伍管理制度
2014/01/14 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技