shawl.qiu javascript dom 关键词高亮类 v1.0

说明:
 这个 javascript 类应用于页面搜索上, 主要为高亮显示搜索到的关键词.
 
 下载原格式:
 http://files.myopera.com/btbtd/javascript/function/keywords_v1.0.txt.7z
 
 功能:
 * 支持自定义高亮显示区域
 * 支持自定义关键词链接 / 可选项
 * 支持多关键词显示, 使用正则模式匹配关键词
 * 支持每一关键词显示为不同的背景色和文字颜色
 
 其实前段时段也写过一个类似的 javascript 函数,
 这个:  使用 javascript HTML DOM 高亮显示页面特定字词 By shawl.qiu
 链接:  http://blog.csdn.net/btbtd/archive/2006/11/12/1380221.aspx

 不过从功能上来说有两个不足处:
 1. 相同的关键词可能显示不同的颜色, 这个问题非常不好.
 2. 自定义关键词链接功能很弱
 
 这次重写的这个关键词高亮类解决了上述的两个问题.
 
 目录:
 1. shawl.qiu javascript dom 关键词高亮类 v1.0 源码及演示
 
 shawl.qiu
 2007-01-01
 http://blog.csdn.net/btbtd
 
 1. shawl.qiu javascript dom 关键词高亮类 v1.0 源码及演示

  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2<html xmlns="http://www.w3.org/1999/xhtml">  
  3<!-- DW6 -->  
  4<head>  
  5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6<title>shawl.qiu template</title>  
  7<script type="text/javascript">  
  8//<![CDATA[  
  9 onload=function(){  
 10 var keyword=new keywords();  
 11  keyword.body=document.body; // 要高亮显示关键词的 HTML 元素  
 12  keyword.flag='keyword|纸伞|她|雨巷|儿女情|独自|芬芳|忧愁'// 传递要匹配的关键词, 使用正则匹配.  
 13  keyword.func=iLink; // 自定义链接函数, 可选, 参数为 yourfunc(sMatch, sBgCor, sFgCor);  
 14  keyword.go(); // 执行本程序  
 15  keyword=null;  
 16 }
  
 17  function iLink(sMatch, sBgCor, sFgCor){  
 18  return '<a href="http://127.0.0.1:83/search.asp?sb=gl&key='+sMatch+'&fm=y&sc=desc&sct=stt">'+  
 19   '<span style="background-color:'+sBgCor+'color:'+sFgCor+'">'+sMatch+'</span></a>';  
 20 }
  
 21 /*-----------------------------------------------------------------------------------*\  
 22  * shawl.qiu javascript dom 关键词高亮类 v1.0  
 23 \*-----------------------------------------------------------------------------------*/
  
 24 //---------------------------------begin class keywords()-------------------------------//  
 25 function keywords()// shawl.qiu code  
 26  //------------------------------------begin public variable  
 27  //---------------begin about  
 28  this.auSubject='shawl.qiu javascript dom 关键词高亮类';  
 29  this.auVersion='1.0';  
 30  this.au='shawl.qiu';  
 31  this.auEmail='shawl.qiu@gmail.com';  
 32  this.auBlog='http://blog.csdn.net/btbtd';  
 33  this.auCreateDate='2006-12-31';  
 34  //---------------end about  
 35  this.body=document.body;  
 36  this.flag='';  
 37  this.func='';  
 38  this.iFlag1='@@';  
 39  this.iFlag2='##';  
 40  //------------------------------------end public variable  
 41    //------------------------------------begin public method  
 42  this.go=function(){  
 43   fGetWord(tl.body);  
 44  }
;  
 45  //------------------------------------end public method  
 46    //------------------------------------begin private variable  
 47  var tl=this;  
 48  var tlTemp='';  
 49  //------------------------------------end private variable  
 50   //------------------------------------begin private method  
 51  function fGetWord(oEle){  
 52   for(var i=0, j=oEle.childNodes.length; i<j; i++){  
 53    var oTemp=oEle.childNodes[i];  
 54    if(oTemp.nodeType==1){  
 55      arguments.callee(oTemp);  
 56    }
 else if (oTemp.nodeType==3){  
 57     var oRe=new RegExp(tl.flag,'gi');  
 58          if(oRe.test(oTemp.data)){  
 59      var sTemp=oTemp.data;  
 60       sTemp=sTemp.replace(oRe,function(sMatch){  
 61        if(tlTemp.indexOf(tl.iFlag1+sMatch+tl.iFlag1+tl.iFlag2)==-1){  
 62         var sBgCor=fRndCor(1020);  
 63         var sFgCor=fRndCor(230255);  
 64         tlTemp+=tl.iFlag1+sMatch+tl.iFlag1+tl.iFlag2+sBgCor+tl.iFlag2+sFgCor;  
 65         return fReturnStr(oTemp, sMatch, sBgCor, sFgCor);  
 66        }
 else {  
 67         var sBgCor=sFgCor='';  
 68         var iRe=new RegExp(tl.iFlag1+'('+sMatch+')'+tl.iFlag1+tl.iFlag2+'(.*?)'+  
 69          tl.iFlag2+'(.*?)('+tl.iFlag1+'|'+tl.iFlag2+'|$)','i');  
 70         tlTemp.replace(iRe, function($0,$1,$2,$3)
 71          sBgCor=$2;sFgCor=$3;  
 72         }
);  
 73         return fReturnStr(oTemp, sMatch, sBgCor, sFgCor);  
 74        }
// end if 3  
 75       }
);  
 76             if(typeof sTemp!='undefined'){  
 77       if(sTemp=='')break;  
 78       var oSpan=document.createElement('span');  
 79        oSpan.innerHTML=sTemp;  
 80        oTemp.parentNode.replaceChild(oSpan, oTemp);  
 81        oSpan=null;  
 82      }
 // end if 3  
 83           }
 // end if 2  
 84          oRe=null;  
 85    }
 // end if 1  
 86   }
 // end for  
 87  }
 // end function fGetWord(oEle)  
 88    function fReturnStr(oNode, sMatch, sBgCor, sFgCor){  
 89    if(tl.func==''||oNode.parentNode.nodeName=='A'){  
 90     return '<span style="background-color:'+sBgCor+'color:'+sFgCor+'">'+  
 91      sMatch+'</span>';  
 92    }
 else {  
 93     return tl.func(sMatch, sBgCor, sFgCor);  
 94    }
  
 95  }
 // end function fReturnStr(oNode, sMatch, sBgCor, sFgCor)  
 96    function fRndCor(under, over){  
 97   if(arguments.length==1){  
 98    var over=under;  
 99     under=0;  
100   }
else if(arguments.length==0){  
101    var under=0;  
102    var over=255;  
103   }
  
104   var r=fRandomBy(under, over).toString(16);  
105    r=fStrPadStr(r, r, 2);  
106   var g=fRandomBy(under, over).toString(16);  
107    g=fStrPadStr(g, g, 2);  
108   var b=fRandomBy(under, over).toString(16);  
109    b=fStrPadStr(b, b, 2);  
110    //defaultStatus=r+' '+g+' '+b  
111   return '#'+(r+g+b).toUpperCase()+';';  
112  }
 // shawl.qiu code  
113    function fRandomBy(under, over){  
114   switch(arguments.length){  
115    case 1return parseInt(Math.random()*under+1);  
116    case 2return parseInt(Math.random()*(over-under+1+ under);  
117    defaultreturn 0;  
118   }
  
119  }
  // shawl.qiu code  
120    function fStrPadStr(sSrc, sPad, nLen){  
121   if(!sSrc)return false;  
122   if(!sPad)sPad='0';  
123   if(!nLen)nLen=2;  
124   sSrc+='';  
125   if(sSrc.length>=nLen)return sSrc;  
126   sPad=new Array(nLen+1).join(sPad);  
127   var re=new RegExp('.*(.{'+(nLen)+'})$');  
128   return (sPad+sSrc).replace(re,'$1');  
129  }
  
130  //------------------------------------end private method  
131 }
 // shawl.qiu code  
132 //---------------------------------end class keywords()---------------------------------//  
133//]]>  
134</script>  
135</head>  
136<body>  
137keyword  
138<div class="at_main" id="at_main"><p/><b>CITE:</b><cite><div class=u_cite>戴望舒写女孩<br/>  
139<br/>  
140&nbsp;雨  巷&nbsp;<br/>  
141撑着油纸伞,独自&nbsp;<br/>  
142彷徨在悠长、悠长&nbsp;<br/>  
143又寂寥的雨巷,&nbsp;<br/>  
144我希望逢着&nbsp;<br/>  
145一个丁香一样地&nbsp;<br/>  
146结着愁怨的姑娘。&nbsp;<br/>  
147她是有&nbsp;<br/>  
148丁香一样的颜色,&nbsp;<br/>  
149丁香一样的芬芳,&nbsp;<br/>  
150丁香一样的忧愁,&nbsp;<br/>  
151在雨中哀怨,&nbsp;<br/>  
152哀怨又彷徨;&nbsp;<br/>  
153她彷徨在这寂寥的雨巷,&nbsp;<br/>  
154撑着油纸伞&nbsp;<br/>  
155像我一样,&nbsp;<br/>  
156像我一样地&nbsp;<br/>  
157默默踟躇着&nbsp;<br/>  
158冷漠、凄清,又惆怅。&nbsp;<br/>  
159她默默地走近,&nbsp;<br/>  
160走近,又投出&nbsp;<br/>  
161叹息一般的眼光&nbsp;<br/>  
162她飘过&nbsp;<br/>  
163像梦一般地,&nbsp;<br/>  
164像梦一般地凄婉迷茫。&nbsp;<br/>  
165像梦中飘过&nbsp;<br/>  
166一枝丁香地,&nbsp;<br/>  
167我身旁飘过这个女郎;&nbsp;<br/>  
168她默默地远了,远了,&nbsp;<br/>  
169到了颓圮的篱墙,&nbsp;<br/>  
170走尽这雨巷。&nbsp;<br/>  
171在雨的哀曲里,&nbsp;<br/>  
172消了她的颜色,&nbsp;<br/>  
173散了<a href="/"></a>的芬芳,&nbsp;<br/>  
174消散了,甚至她的&nbsp;<br/>  
175叹息般的眼光&nbsp;<br/>  
176丁香般的惆怅。&nbsp;<br/>  
177撑着油纸伞,独自&nbsp;<br/>  
178彷徨在悠长、悠长&nbsp;<br/>  
179又寂寥的雨巷,&nbsp;<br/>  
180我希望飘过&nbsp;<br/>  
181一个丁香一样地&nbsp;<br/>  
182结着愁怨的姑娘。</div></cite></div>  
183<span class="left160px"><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12830#anchor">戴望舒写女孩</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12819#anchor">悲惨世界 - 第四部 卜吕梅街的儿女情和圣德尼街的英雄血 - 第五卷 结尾不象开头 - 四 石头下面的一颗心</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12835#anchor">青玉案&nbsp;元夕</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12855#anchor">“科学精神”语义分析</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=3053#anchor">再别康桥 --徐志摩</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12862#anchor">学术论文格式</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12836#anchor">一棵开花的树</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12840#anchor">书信写作格式</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12818#anchor">悲惨世界 - 第四部 卜吕梅街的儿女情和圣德尼街的英雄血 - 第十二卷 科林斯 - 六 等 待</a><br/><a href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12834#anchor">卿云歌</a></span>  
184</body>  
185</html> 
186

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/btbtd/archive/2007/01/01/1471836.aspx


 

posted @ 2009-08-11 14:50  瞭望者  阅读(232)  评论(0)    收藏  举报