zoukankan      html  css  js  c++  java
  • 仿google搜索提示

    借用http://www.lioil.net/lbs/article.asp?id=448的例子,再加以完善
    1、实现了提示后数据排序的,按字符串由短至长,相同长度的按字母排序。

    View Code
    1  findList.sort( function(a, b)
    2 {
    3 if(a.length>b.length)return 1;
    4 else if(a.length==b.length)return a.localeCompare(b);
    5 else return -1;
    6 });

    2、实现了不分大小写字母,按字母表排序。

    View Code
    1 findList.sort( function(a, b)
    2 {
    3 if(a.toLowerCase()>b.toLowerCase())return 1;
    4 else if(a.toLowerCase()<b.toLowerCase())return -1;
    5 else return 0;
    6 });

    3、实现当字符串中包含有空格的情况。

     //新增了replaceAll方法
    String.prototype.replaceAll = function(s1,s2){
    return this.replace(new RegExp(s1,"gm"),s2);
    }
    value=value.replaceAll(" ", "&nbsp;"); //先把空格转换成html格式,显示时再转换为空格,否则当字符串中有空格的会出错
    //显示时再转为非html格式的空格
    s=s.replaceAll("&nbsp;", " ");
    s=s.replaceAll("&amp;", "&");

    4、实现了提示下拉框显示多少条记录。

      for( var i=0;i<findList.length;i++)
    {
    if(sum<10)//我这里赋为10条
    {addOption(findList[i]);sum++;}
    else{break;}
    }
    View Code
     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 <head>
    4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    5 <title>GOOGLE</title>
    6 </head>
    7
    8 <body onLoad="begin()">
    9 <form name="search" action="" method="get">
    10 <input autocomplete="off" type="text" id="wd" name="wd">
    11 <input type="submit" value="OK">
    12 </form>
    13 </body>
    14 </html>
    15 <script language="javascript">把js代码拷入来就行了</script>
    View Code
      1 String.prototype.replaceAll  = function(s1,s2){   
    2 return this.replace(new RegExp(s1,"gm"),s2);
    3 }
    4 var intIndex=0;var arrList = new Array();
    5 var findList;//自动搜索到的数据
    6 //将初始化的列表转换成数组
    7 function dearray(str)//定义array
    8 {
    9 arrList = str.split(",");
    10 intIndex = arrList.length;
    11 }
    12
    13 //初始化下拉列表项
    14 function begin()
    15 {
    16 init();
    17 //dearray("asp,csdn,中国,a fr,asp,a 日期,Asp.net,php,jsp,dvbbs,baidu,92mk,123cha,hao123,google,3721,123456,popasp,alimama,aku,cool");
    18 dearray("中国,中华人民共和国,广东省,广州,国本,aa,an,ab,ai,ac,aand,as,AE,AR,AWao,ar,al,ap.ar,aui,avf,art,acxd,aew,are,apo,a,ar,国泊,02TANDEM,1 Luv,10milligram,11days difference,1891 By Sferra,1921 Jeans,2%,21 Things I Love,2117,27 ALAMODE,291venice,2B in style,2-Biz,2K,2ME,2MEN,2ya2yao,3 POMMES,3.1 PhillipLim,39Sixtyone,3GActualwear,3-go,3onoToePyHo,3piece,3QR,4NF,5.10,591MMM,5ive Jungle,5th STREET,667,686,6ixty 8ight,7 Diamonds,77kids,7UNION,96NY,A Child Of The Jago,A Common Thread,A DEGREE FAHRENHEIT,A Detacher,A F,A LAB,A label by Luise&Franck,A M Snyder,A mina,A Peace Treaty,A&G,A.F.Vandevorst ,A.I.C,A.KURTZ,A1A,A6,AB Studio,Abahouse,ABAN,Abigail Keats,Absolutjoy,ABSORBA");
    19 downList(arrList,"wd");
    20 }
    21
    22 function init()
    23 {
    24 if(arrList.constructor!=Array)
    25 {
    26 alert("downList初始化失败:第一个参数非数组!");
    27 return;
    28 }
    29
    30 // arrList.sort();
    31 /*arrList.sort( function(a, b)
    32 {
    33 if(a.length>b.length)return 1;
    34 else if(a.length==b.length)return a.localeCompare(b);
    35 else return -1;
    36 }); */
    37 }
    38
    39 function downList(arrList,objInputId)
    40 {
    41 var objouter=document.getElementById("keysList"); //显示的DIV对象
    42 var objInput = document.getElementById(objInputId); //文本框对象
    43 var selectedIndex=-1;
    44 var intTmp; //循环用的
    45
    46 if (objInput==null)
    47 {
    48 alert("downList初始化失败:没有找到"+objInputId+"文本框");
    49 return;
    50 }
    51 //文本框失去焦点
    52 objInput.onblur=function(){
    53 objouter.style.display="none";
    54 }
    55 //文本框按键抬起
    56 objInput.onkeyup=checkKeyCode;
    57 //文本框得到焦点
    58 objInput.onfocus=checkAndShow;
    59
    60 //判断按下的按键
    61 function checkKeyCode(evt)
    62 {
    63 evt = evt || window.event;
    64 var keyCode = window.event ? evt.keyCode : evt.which;
    65 //var keyCode = String.fromCharCode(key);
    66 if (keyCode==40||keyCode==38)
    67 {//下上
    68 var isUp=false
    69 if(keyCode==40) isUp=true;
    70 chageSelection(isUp);
    71 }
    72 else if (keyCode==13)
    73 {//回车
    74 outSelection(selectedIndex);
    75 }
    76 else
    77 {checkAndShow(evt); }
    78 divPosition(evt);
    79 }
    80 //得到焦点显示
    81 function checkAndShow(evt)
    82 { findList=new Array();
    83 var sum=0;//用于提示显示多行记录
    84 var strInput = objInput.value;
    85 if (strInput!="")
    86 {
    87 divPosition(evt);
    88 selectedIndex=-1;
    89 objouter.innerHTML ="";
    90
    91 for (intTmp=0;intTmp<arrList.length;intTmp++)
    92 {
    93 var s1=arrList[intTmp].substr(0, strInput.length).toUpperCase();
    94 var s2=strInput.toUpperCase();
    95 if (s1==s2)
    96 {
    97 findList.push(arrList[intTmp]);
    98 }
    99 }
    100 //按字符串由短至长,相同长度按字母排序
    101 /* findList.sort( function(a, b)
    102 {
    103 if(a.length>b.length)return 1;
    104 else if(a.length==b.length)return a.localeCompare(b);
    105 else return -1;
    106 }); */
    107 //不分大小写排序
    108 findList.sort( function(a, b)
    109 {
    110 if(a.toLowerCase()>b.toLowerCase())return 1;
    111 else if(a.toLowerCase()<b.toLowerCase())return -1;
    112 else return 0;
    113 });
    114 for( var i=0;i<findList.length;i++)
    115 {
    116 if(sum<10)
    117 {addOption(findList[i]);sum++;}
    118 else{break;}
    119 }
    120 objouter.style.display="";
    121 }
    122 else
    123 { objouter.style.display="none"; }
    124
    125 //想下拉列表里添加匹配项
    126 function addOption(value)
    127 {
    128 value=value.replaceAll(" ", "&nbsp;"); //先把空格转换成html格式,显示时再转换为空格,否则当字符串中有空格的会出错
    129 objouter.innerHTML +="<div onmouseover=this.className=\"sman_selectedStyle\";document.getElementById(\""+objInputId+"\").value=\"" + value + "\" onmouseout=this.className=\"\" onmousedown=document.getElementById(\""+objInputId+"\").value=\"" + value + "\">" + value + "</div>"
    130 }
    131
    132 }//end checkAndShow()
    133 function chageSelection(isUp)
    134 {
    135 if (objouter.style.display=="none")
    136 {objouter.style.display="";}
    137 else
    138 {
    139 if (isUp){selectedIndex++;}
    140 else{ selectedIndex--;}
    141 }
    142
    143 var maxIndex = objouter.childNodes.length-1;
    144 if (selectedIndex<0){selectedIndex=0;}
    145 if (selectedIndex>maxIndex) {selectedIndex=maxIndex;}
    146 for (intTmp=0;intTmp<=maxIndex;intTmp++)
    147 {
    148 if (intTmp==selectedIndex)
    149 {
    150 objouter.childNodes[intTmp].className="sman_selectedStyle";
    151 //当上下键移动时,将选中的文本写到文本框中
    152 var s=objouter.childNodes[intTmp].innerHTML;
    153 s=s.replaceAll("&nbsp;", " ");
    154 s=s.replaceAll("&amp;", "&");
    155 document.getElementById(objInputId).value=s;
    156 }
    157 else
    158 {objouter.childNodes[intTmp].className=""; }
    159 }
    160 }
    161
    162 function outSelection(Index)
    163 {
    164 var s=objouter.childNodes[Index].innerHTML;
    165 s=s.replaceAll("&nbsp;", " ");
    166 s=s.replaceAll("&amp;", "&");
    167 objInput.value = s;
    168 objouter.style.display="none";
    169 }
    170
    171 //显示下拉列表项
    172 function divPosition(evt)
    173 { var e = objInput;
    174 var ie = (document.all)? true:false
    175 //定义列表区在不同浏览器中的位置
    176 if (ie)
    177 { var top = 0; var left = -2; }
    178 else
    179 { var top = 2; var left = 0; }
    180
    181 while (e.offsetParent)
    182 {
    183 left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
    184 top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
    185 e = e.offsetParent;
    186 }
    187
    188 left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
    189 top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
    190 objouter.style.top = (top + objInput.clientHeight) + "px";
    191 objouter.style.left = left + "px";
    192 objouter.style.width= objInput.clientWidth+1 + "px";
    193 }
    194
    195 }//end downList()
    196
    197 Number.prototype.NaN0 = function()
    198 {return isNaN(this)?0:this;}
    199
    200 //出现光标
    201 document.write("<div id=\"keysList\" style=\"position:absolute;display:none;background:#FFFFFF;border: 1px solid #CCCCCC;font-size:14px;cursor: default;\" onblur> </div>");
    202 document.write("<style>.sman_selectedStyle{background-Color:#102681;color:#FFFFFF}</style>");





     

  • 相关阅读:
    [基础]编程环境配置
    MonoDevelop line endings
    Unity手机平台播放影片
    [3D跑酷] GUIManager UI管理
    [3D跑酷] UI事件处理系统
    [3D跑酷] AudioManager
    NGUI学习笔记汇总
    Unity3D开发之搭建Mac OS开发环境
    Unity键值(KeyCode)
    Unity3D多人协作开发环境搭建
  • 原文地址:https://www.cnblogs.com/jyluo03/p/2288756.html
Copyright © 2011-2022 走看看