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 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
Aug 07 Javascript
js前端面试题及答案整理(一)
Aug 26 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
JS中SetTimeout和SetInterval使用初探
Mar 23 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
Jun 15 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 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版本实现代码
2012/09/15 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php实现简单加入购物车功能
2017/03/07 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python实现读Excel写入.txt的方法
2018/04/29 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
python实现简单图书管理系统
2019/11/22 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
护士专业推荐信
2013/11/02 职场文书
户外活动总结
2015/02/04 职场文书
刑事案件上诉状
2015/05/23 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
webpack的移动端适配方案小结
2021/07/25 Javascript