现在的位置: 首页 > 综合 > 正文

google热门词(近似词)自动提示的实现及源代码

2013年03月31日 ⁄ 综合 ⁄ 共 6852字 ⁄ 字号 评论关闭

 google热门词(近似词)自动提示源代码

 

在google的搜索框中输入搜索信息的时候,搜索框下方会自动弹出与输入信息内容相近似的列表提示框,供用户选择。
 
自动提示框的原理是把一些热门(近似)词语放在一个数组中,当输入内容时,程序自动进行对比将内容相近的词排列出来。这些热门词语可以手工赋值给数组,也可以利用ASP,PHP等语言与数据库结合,动态生成搜索内容并赋值给数组。
 
一、操作步骤:
1、准备词组设计提示框:
 
  1. document.write("<div id='__smanDisp' style='position:absolute; display:none; background:#E8F7EB; border: 1px solid #CCCCCC; font-size:14px; cursor: default;' onbulr> </div>");  //根据自己喜欢修改样式 
  2. objInput.onblur=fuction()
  3.     objouter.style.display='none';
  4. }
  5. function dearray(aa)//定义array 
  6. {
  7.     arrList = aa.split(',');    
  8. }
  9. dearray("1111,222,222a,aaa,aa1,bb,b222,b3,323313,3213,32213,dsfsdddd");//初始化提示框的内容

2、提示框中显示相近词组:

 
 
  1. var strInput = objInput.value;//设置为搜索的内容
  2. if (strInput!="")
  3. {  // 搜索框中内容不为空时响应,即弹出提示框
  4.    divPosition();
  5.    selectedIndex=-1;
  6.    objouter.innerHTML ="";
  7.    for (intTmp=0;intTmp<arrList.length;intTmp++)
  8.    {
  9.         if (arrList[intTmp].substr(0, strInput.length)==strInput)
  10.         {
  11.             addOption(arrList[intTmp]);  // 显示相似结果
  12.          }
  13.     }
  14.     objouter.style.display=''//显示层
  15. }else{
  16.     objouter.style.display='none'//没有内容,不显示
  17. }
  18. function addOption(value)
  19. {
  20.      objouter.innerHTML +="<div onmouseover=/"this.className='sman_selectedStyle'/" onmouseout=/"this.className=''/" onmousedown=/"document.getElementById('"+objInputId+"').value='" + value + "'/">" + value + "</div>"  
  21. }

3、自动弹出提示框:

 
  1. function getIE(e) // e为对应的文本框对象
  2. {
  3.      var pos = new Array();
  4.      var t = e.offsetTop;
  5.      var l = e.offsetLeft;
  6.      while(e=e.offsetParent)
  7.      {
  8.          t += e.offsetTop;// 文本框距上方或上层控件的位置
  9.          l += e.offsetLeft;// 文本框距左方或上层控件的位置
  10.      }
  11.      pos[0]=t;
  12.      pos[1]=l;
  13.      return pos;
  14. }
  15. function divPosition(objInput)//objInput为对应的文本框对象
  16. {
  17.     arrPos = getIE(objInput);
  18.     objouter.style.top    = arrPos[0] +20;//提示框显示在文本框下方
  19.     objouter.style.left    = arrPos[1]; 
  20.     objouter.style.width= getAbsoluteWidth(objInput);//宽度与文本框一致
  21. }

二、源代码:

1、脚本函数源代码:
  1. <script language="javascript">
  2. var intIndex=0;arrList = new Array();
  3. function test() 
  4. {    
  5.     dearray("1111,222,222a,aaa,aa1,bb,b222,b3,323313,3213,32213,dsfsdddd");
  6.     smanPromptList(arrList,"inputer1");
  7.     smanPromptList(arrList,"inputer2");
  8.     smanPromptList(arrList,"inputer3")
  9. }
  10.    
  11. function dearray(aa)//定义array
  12. {
  13.     arrList = aa.split(',');
  14.     
  15. }
  16. function getAbsoluteWidth(ob)
  17. {
  18.         return ob.offsetWidth
  19. }
  20. function smanPromptList(arrList,objInputId)
  21. {
  22.         var objouter=document.getElementById("__smanDisp"//显示的DIV对象
  23.         var objInput = document.getElementById(objInputId); //文本框对象
  24.         var selectedIndex=-1;
  25.         var intTmp; //循环用的:)
  26.         if (objInput==null) {alert('smanPromptList初始化失败:没有找到"'+objInputId+'"文本框');return ;}
  27.             //文本框失去焦点
  28.             objInput.onblur=function(){
  29.                 objouter.style.display='none';
  30.             }
  31.             //文本框按键抬起
  32.             objInput.onkeyup=checkKeyCode;
  33.             //文本框得到焦点
  34.             objInput.onfocus=checkAndShow;
  35.             function checkKeyCode(){
  36.                 var ie = (document.all)? true:false
  37.                 if (ie){
  38.                     var keyCode=event.keyCode
  39.                     if (keyCode==40||keyCode==38){ //下上
  40.                         var isUp=false
  41.                         if(keyCode==40) isUp=true ;
  42.                         chageSelection(isUp)
  43.                     }else if (keyCode==13){//回车
  44.                         outSelection(selectedIndex);
  45.                     }else{
  46.                         checkAndShow()
  47.                     }
  48.                 }else{
  49.                     checkAndShow()
  50.                 }
  51.                 divPosition()
  52.             }
  53.             function checkAndShow(){
  54.                         var strInput = objInput.value
  55.                         if (strInput!=""){
  56.                             divPosition();
  57.                             selectedIndex=-1;
  58.                             objouter.innerHTML ="";
  59.                             for (intTmp=0;intTmp<arrList.length;intTmp++){
  60.                                 if (arrList[intTmp].substr(0, strInput.length)==strInput){
  61.                                     addOption(arrList[intTmp]);
  62.                                 }
  63.                             }
  64.                             objouter.style.display='';
  65.                         }else{
  66.                             objouter.style.display='none';
  67.                     }
  68.                     function addOption(value){
  69.                         objouter.innerHTML +="<div onmouseover=/"this.className='sman_selectedStyle'/" onmouseout=/"this.className=''/" onmousedown=/"document.getElementById('"+objInputId+"').value='" + value + "'/">" + value + "</div>"    
  70.                     }
  71.             }
  72.             function chageSelection(isUp){
  73.                 if (objouter.style.display=='none'){
  74.                     objouter.style.display='';
  75.                 }else{
  76.                     if (isUp)
  77.                         selectedIndex++
  78.                     else
  79.                         selectedIndex--
  80.                 }
  81.                 var maxIndex = objouter.children.length-1;
  82.                 if (selectedIndex<0){selectedIndex=0}
  83.                 if (selectedIndex>maxIndex) {selectedIndex=maxIndex}
  84.                 for (intTmp=0;intTmp<=maxIndex;intTmp++){
  85.                     if (intTmp==selectedIndex){
  86.                         objouter.children[intTmp].className="sman_selectedStyle";
  87.                     }else{
  88.                         objouter.children[intTmp].className="";
  89.                     }
  90.                 }
  91.             }
  92.             function outSelection(Index){
  93.                 objInput.value = objouter.children[Index].innerText;
  94.                 objouter.style.display='none';
  95.             }
  96.             function divPosition(){
  97.                 var clx,cly;
  98.                 clx=event.clientX;
  99.                 cly = event.clientY;
  100.                 objouter.style.top    = cly+10;
  101.                 objouter.style.left    = clx+20; 
  102.                 objouter.style.width= getAbsoluteWidth(objInput)
  103.             }
  104.     }
  105.     document.write("<div id='__smanDisp' style='position:absolute;display:none;background:#E8F7EB;border: 1px solid #CCCCCC;font-size:14px;cursor: default;' onbulr> </div>");
  106.     document.write("<style>.sman_selectedStyle{background-Color:#102681;color:#FFFFFF}</style>");
  107.         
  108. </script>

2、在HTML中引用的源代码:

  1. <body onLoad="test()">
  2.       <table border="1" align="center" cellspacing="1" bordercolor="#9CD7FF"  id="table1" style="BORDER-COLLAPSE: collapse"  >
  3.           <tr bgcolor="#99CCFF">
  4.             <td bgcolor="#CEE3FF"><font class="text">查询1</font></td>
  5.             <td bgcolor="#FFFFFF"><input type="text" id="inputer1"></td>
  6.           </tr>
  7.           <tr bgcolor="#99CCFF">
  8.             <td bgcolor="#CEE3FF"><font class="text">查询2</font></td>
  9.             <td bgcolor="#FFFFFF"><input type="text" id="inputer2"></td>
  10.           </tr>
  11.           <tr bgcolor="#99CCFF">
  12.             <td height="24" bgcolor="#CEE3FF"><font class="text">查询3</font></td>
  13.             <td height="24" bgcolor="#FFFFFF"><input type="text" id="inputer3"></td>
  14.           </tr>
  15.     </table>
  16. </body>

(《电脑报》2008年第18期)

抱歉!评论已关闭.