您的位置:首页 > Web前端 > JavaScript

JavaScript搜索关键字高亮的实现

2014-12-02 16:54 633 查看
高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色。一般在搜索结果页面会经常用到这个功能。

下面就为大家提供一种解决方案,用javascript实现。


首先在<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: