2009-6
2
高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色。一般在搜索结果页面会经常用到这个功能。下面就为大家提供两种解决方案,分别用javascript和jquery插件实现。
- 使用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>
- 使用Jquery插件实现
jQuery Highlight Plugin是一款专门用来实现文本高亮显示的jquery插件,它用法简单且功能完善。
使用方法如下:
- 在<head>中引入jquery文件及插件文件jquery.highlight.js
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript" src="jquery.highlight.js"></script>
-
在css中或通过jquery指定高亮区域的颜色:
.highlight {background-color: #FFFF88; }
$(".highlight").css({ backgroundColor: "#FFFF88" });
- 设置需要高亮显示的词语或通过事件触发高亮显示。例如:
$("h1").highlight("highlight"); //高亮显示所有h1标签中的“highligh”
$("body p").unhighlight(); //取消所有body中段落里的高亮显示;
$("p").highlight("jQuery highlight plugin"); //高亮段落中的词条 “jQuery highlight plugin”
$("p").highlight(["jQuery", "highlight", "plugin"]); //高亮段落中的 “jQuery”,“highlight”及“plugin”
$("p").highlight("Highlight", { caseSensitive: true }); //高亮段落中的 “Highlight”,区分大小写。
$("p").highlight("light", { wordsOnly: true }); //高亮段落中的 “light”,必须是完整单词,“highlight”中的“light”不会高亮
$("p").highlight("highlight", { element: 'em', className: 'error' }); //高亮段落中的 “hightlight”,并为其指定父标签为em,class为error
$("p").highlight("highlight", { element: 'em', className: 'error' }); //高亮段落中的 “hightlight”,并为其指定父标签为em,class为error
$("body p").highlight("jQuery", { element: 'a', className: 'jQueryLink'}); $("body p a.jQueryLink").attr({ href: 'http://jquery.com' }); //高亮段落中的 “jQuery”,并为其加上链接。
在该插件主页可查看 实际效果
下载该插件:jquery.highlight.js
- 在<head>中引入jquery文件及插件文件jquery.highlight.js
延伸阅读:
- Jquery Tools——不可错过的Jquery UI库(三)
- jQuery Tools——不可错过的jQuery UI库(五)
- Jquery Tools——不可错过的Jquery UI库(二)
- jQuery Tools——不可错过的jQuery UI库(六)
- 使用jQuery及Bing API实现简易搜索引擎
- 使用Jquery实现禁用鼠标右键
- Jquery Tools——不可错过的Jquery UI库(四)
- 易用的JQuery上传插件Uploadify
版权声明:
本站内容受著作权法保护。个人网站、blog转载时请遵循 “署名-非商业用途-保持一致” 的创作共用协议;商业网站或媒体未授权不得复制本站内容。
友情提示:
如对本文有任何疑问,或在示例的使用中遇到问题,或有好的建议,欢迎在下面留言共同学习,有问必答。


上面第二个高亮的插件,我在IE6的环境下测试是有问题的。。
主要表现是以输入框内容作为关键词时,多次重复输入,或者多次输入中文,都会导致垃圾文本出现,拉长版面。不知道博主有没有测试过?
希望能看到您的回复。。
我在IE 6 下看过官方给的测试页面,http://bartaz.github.com/sandbox.js/jquery.highlight.html。
你说的输入框内容作为关键词的场景我没有测试过。这里你说的有些简单,我不能准确重现你说的问题场景。最好能邮件给我一个示例。
I totally love this article. I think you could write some other things to make your blog more complete.For example: ed hardy.vibram five fingers.p90x workout schedule. mbt shoes. hardy caps. vibram fivefingers kso trek. mbt chapa dawn shoes.
ghd straightener
ugg ugg boots
replica louis vuitton handbags
edhardyI thought that many people can like.
[...] 实现文字高亮功能的两种解决方案(Javascript/Jquery) [...]
[...] 实现文字高亮功能的两种解决方案(Javascript/Jquery) [...]