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

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.youkuaiyun.com/btbtd/archive/2006/11/12/1380221.aspx

 不过从功能上来说有两个不足处:
 1. 相同的关键词可能显示不同的颜色, 这个问题非常不好.
 2. 自定义关键词链接功能很弱
 
 这次重写的这个关键词高亮类解决了上述的两个问题.
 
 目录:
 1. shawl.qiu javascript dom 关键词高亮类 v1.0 源码及演示
 
 shawl.qiu
 2007-01-01
 http://blog.youkuaiyun.com/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-Typecontent="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.youkuaiyun.com/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(10, 20); 
  63.          var sFgCor=fRndCor(230, 255); 
  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 1: return parseInt(Math.random()*under+1)
  116.     case 2: return 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
  137. keyword 
  138. <div class="at_mainid="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. 散了<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/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12819#anchor">悲惨世界 - 第四部 卜吕梅街的儿女情和圣德尼街的英雄血 - 第五卷 结尾不象开头 - 四 石头下面的一颗心</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12835#anchor">青玉案&nbsp;元夕</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12855#anchor">“科学精神”语义分析</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=3053#anchor">再别康桥 --徐志摩</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12862#anchor">学术论文格式</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12836#anchor">一棵开花的树</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12840#anchor">书信写作格式</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12818#anchor">悲惨世界 - 第四部 卜吕梅街的儿女情和圣德尼街的英雄血 - 第十二卷 科林斯 - 六 等 待</a><br/><href="article.asp?classid=14&amp;nclassid=178&amp;articleid=12834#anchor">卿云歌</a></span
  184. </body
  185. </html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值