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实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
Sep 15 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
Jun 20 Javascript
JavaScript生成福利彩票双色球号码
May 15 Javascript
全面接触神奇的Bootstrap导航条实战篇
Aug 01 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
Nov 02 Javascript
js精确的加减乘除实例
Nov 14 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
vue实现添加与删除图书功能
Oct 07 Javascript
Javascript实现单选框效果
Dec 09 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编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
Python易忽视知识点小结
2015/05/25 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
django 控制页面跳转的例子
2019/08/06 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
python如何从文件读取数据及解析
2019/09/19 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
函授毕业自我鉴定
2014/02/04 职场文书
优良学风班总结材料
2014/02/08 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
秋游活动策划方案
2014/02/16 职场文书
新教师工作感言
2014/02/16 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
学生违反校规检讨书
2014/10/28 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js