高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色。一般在搜索结果页面会经常用到这个功能。
首先在<head>中引入下面javascript方法:
01 |
<script type= "text/javascript" >
|
02 |
//<![CDATA[ |
03 |
//--------begin function fHl(o, flag, rndColor, url)------------------//
|
04 |
function fHl(o, flag, rndColor, url){
|
05 |
/// <summary>
|
06 |
/// 使用 javascript HTML DOM 高亮显示页面特定字词.
|
07 |
/// 实例:
|
08 |
/// fHl(document.body, '纸伞|她');
|
09 |
/// 这里的body是指高亮body里面的内容。
|
10 |
/// fHl(document.body, '希望|愁怨', false, '/');
|
11 |
/// fHl(document.getElementById('at_main'), '独自|飘过|悠长', true, 'search.asp?keyword=');
|
12 |
/// 这里的'at_main'是指高亮id='at_main'的div里面的内容。search.asp?keyword=指给关键字加的链接地址,
|
13 |
/// 我这里加了一个参数,在后面要用到。可以是任意的地址。
|
14 |
/// </summary>
|
15 |
/// <param name="o" type="Object">
|
16 |
/// 对象, 要进行高亮显示的对象.
|
17 |
/// </param>
|
18 |
/// <param name="flag" type="String">
|
19 |
/// 字符串, 要进行高亮的词或多个词, 使用 竖杠(|) 分隔多个词 .
|
20 |
/// </param>
|
21 |
/// <param name="rndColor" type="Boolean">
|
22 |
/// 布尔值, 是否随机显示文字背景色与文字颜色, true 表示随机显示.
|
23 |
/// </param>
|
24 |
/// <param name="url" type="String">
|
25 |
/// URI, 是否对高亮的词添加链接.
|
26 |
/// </param>
|
27 |
/// <return></return>
|
28 |
var bgCor=fgCor= '' ;
|
29 |
if (rndColor){
|
30 |
bgCor=fRndCor(10, 20);
|
31 |
fgCor=fRndCor(230, 255);
|
32 |
} else {
|
33 |
bgCor= '#F0F' ;
|
34 |
fgCor= 'black' ;
|
35 |
}
|
36 |
var re= new RegExp(flag, 'i' );
|
37 |
for ( var i=0; i<o.childNodes.length; i++){
|
38 |
var o_=o.childNodes[i];
|
39 |
var o_p=o_.parentNode;
|
40 |
if (o_.nodeType==1) {
|
41 |
fHl(o_, flag, rndColor, url);
|
42 |
} else if (o_.nodeType==3) {
|
43 |
if (!(o_p.nodeName== 'A' )){
|
44 |
if (o_.data.search(re)==-1) continue ;
|
45 |
var temp=fEleA(o_.data, flag);
|
46 |
o_p.replaceChild(temp, o_);
|
47 |
}
|
48 |
}
|
49 |
}
|
50 |
//------------------------------------------------
|
51 |
function fEleA(text, flag){
|
52 |
var style= ' style=" width: auto !important; margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; line-height: 1.1em !important; min-height: inherit !important; background: none !important;">+bgCor+ ';color:' +fgCor+ ';" '
|
53 |
var o=document.createElement( 'span' );
|
54 |
var str= '' ;
|
55 |
var re= new RegExp( '(' +flag+ ')' , 'gi' );
|
56 |
if (url){
|
57 |
str=text.replace(re, '<a href="' +url+
|
58 |
'$1"' +style+ '>$1</a>' ); //这里是给关键字加链接,红色的$1是指上面链接地址后的具体参数。
|
59 |
} else {
|
60 |
str=text.replace(re, '<span ' +style+ '>$1</span>' ); //不加链接时显示
|
61 |
}
|
62 |
o.innerHTML=str;
|
63 |
return o;
|
64 |
}
|
65 |
//------------------------------------------------
|
66 |
function fRndCor(under, over){
|
67 |
if (arguments.length==1){
|
68 |
var over=under;
|
69 |
under=0;
|
70 |
} else if (arguments.length==0){
|
71 |
var under=0;
|
72 |
var over=255;
|
73 |
}
|
74 |
var r=fRandomBy(under, over).toString(16);
|
75 |
r=padNum(r, r, 2);
|
76 |
var g=fRandomBy(under, over).toString(16);
|
77 |
g=padNum(g, g, 2);
|
78 |
var b=fRandomBy(under, over).toString(16);
|
79 |
b=padNum(b, b, 2);
|
80 |
//defaultStatus=r+' '+g+' '+b
|
81 |
return '#' +r+g+b;
|
82 |
function fRandomBy(under, over){
|
83 |
switch (arguments.length){
|
84 |
case 1: return parseInt(Math.random()*under+1);
|
85 |
case 2: return parseInt(Math.random()*(over-under+1) + under);
|
86 |
default : return 0;
|
87 |
}
|
88 |
}
|
89 |
function padNum(str, num, len){
|
90 |
var temp= ''
|
91 |
for ( var i=0; i<len;temp+=num, i++);
|
92 |
return temp=(temp+=str).substr(temp.length-len);
|
93 |
}
|
94 |
}
|
95 |
}
|
96 |
//--------end function fHl(o, flag, rndColor, url)--------------------//
|
97 |
//]]> |
98 |
</script> |
上面的fHl方法就是用来实现高亮的,参数的含义在注释中有写。
然后在页面最后调用fHl方法,对指定区域指定文字高亮着色,例如:
1 |
<script type= "text/javascript" >
|
2 |
fHl(document.body, '高亮' ); //对页面body的区域中的“高亮”文字背景着色
|
3 |
</script> |