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跳到页面指定位置的方法
May 12 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
React Native之prop-types进行属性确认详解
Dec 19 Javascript
webpack之devtool详解
Feb 10 Javascript
小程序图片剪裁加旋转的示例代码
Jul 10 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
vuex存储token示例
Nov 11 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
Javascript中Eval函数的使用说明
2008/10/11 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
HTML5地理定位实例
2014/10/15 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
临床医学专业毕业生的自我评价
2013/10/17 职场文书
女子职高个人自荐书
2014/02/01 职场文书
应届毕业生自荐信
2014/05/28 职场文书
授权委托书格式
2014/07/31 职场文书
实验心得体会
2014/09/05 职场文书
世界遗产的导游词
2015/02/13 职场文书
四年级语文教学反思
2016/03/03 职场文书