`
jh108020
  • 浏览: 110127 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

js搜索提示

    博客分类:
  • html
 
阅读更多
<script src="jquery-1.4.2.js" type="text/javascript"></script>
<style>
.prompt{border:1px solid #d6dce0; background:#fff; position:absolute;  z-index:999}
.prompt p{line-height:25px; height:25px; overflow:hidden; padding:0 10px}
.prompt .hover{background:#ebebeb; cursor:default}
</style>

<script type="text/javascript"> 
String.prototype.startWith=function(str){
if(str==null||str==""||this.length==0||str.length>this.length)
return false;
if(this.substr(0,str.length)==str)
return true;
else
return false;
return true;
}


function Product(name,pinYin,firstPinYin,product){
	if(name==null){
		name="";
	}
	if(firstPinYin==null){
		firstPinYin="";
	}
	if(product==null){
		product="";
	}
	this.name=name;
	this.pinYin=pinYin.toLowerCase();
	this.firstPinYin=firstPinYin.toLowerCase();
	this.product=product.toLowerCase();
}

var arrayObj = new Array();

arrayObj.push(new Product('abc','abc','abc','abc'));
arrayObj.push(new Product('abd','abd','abd','abd'));
arrayObj.push(new Product('acd','acd','acd','acd'));
arrayObj.push(new Product('bfd','bfd','bfd','bfd'));
arrayObj.push(new Product('ebd','ebd','ebd','ebd'));


var oldlength=0;
var oldvalue="";
var index=0;
var tip='汉字∣拼音∣首字母';

function searchProduct(){
	//校验一下
	var product=$("#product").val();
	if(product!=null){
		product=trim(product);
		product=product.toLowerCase();
		if(product!=""){
			var length=product.length;
			if(length!=oldlength||product!=oldvalue){
				oldlength=length;
				oldvalue=product;
				doSearch(product);
			}
			return;
		}
	}
	hiddenDiv();
}

function trim(str){
	return str.replace(/^\s+/g,"").replace(/\s+$/g,"");
}

function gotoProductPage(product){
	alert(product);
}

//搜索是否存在
function doSearch(product){
	var isFound=false;
	var resultArr = new Array();
	for(var j=0,k=arrayObj.length;j<k;j++){
		var obj=arrayObj[j];
		if(obj.name.indexOf(product)>-1||obj.pinYin.indexOf(product)>-1||obj.firstPinYin.indexOf(product)>-1){
			isFound=true;
			resultArr.push(obj);
		}
	}
	if(isFound){
		var tableStr="<table id='resultTable' width='100%'>";
		sortArr(resultArr,product);
		if(resultArr.length>=10){
			var arr = new Array();
			for(var i=0;i<10;i++){
				arr.push(resultArr[i]);
			}
			resultArr=arr;
		}
		for(var i=0,l=resultArr.length;i<l;i++){
			var obj=resultArr[i];
			tableStr+="<tr index='"+(i+1)+"' product='"+obj.product+"' onmouseover=\"mouseOver(this)\" onmouseout=\"mouseOut(this)\" ><td><p class='searchP'>"+obj.name+"</p></td></tr>";
		}
		showDiv(tableStr+"</table>");
	}else{
		index=0;
		$("#resultDiv").css("display","none");
	}
}

//产品排序
function sortArr(arr,prefix){
	for(var i=0,l=arr.length;i<l;i++){
		for(var j=i+1;j<l;j++){
			if(compareProduct(arr[i],arr[j],prefix)>=1){
				var s=arr[i];
				arr[i]=arr[j];
				arr[j]=s;
			}
		}
	}
}

function compareProduct(a,b,prefix){
	if(compare(a,prefix)){
		if(compare(b,prefix)){
			return a.pinYin.localeCompare(b.pinYin);
		}
		return -1;
	}
	if(compare(b,prefix)){
		return 1;
	}
	return a.pinYin.localeCompare(b.pinYin);
}

function compare(a,prefix){
	if(a.firstPinYin.startWith(prefix)||a.pinYin.startWith(prefix)||a.name.startWith(prefix)){	
		return true;
	}
	return false;
}

function showDiv(str){
	$("#resultDiv").html(str);
	$("#resultDiv").css("display","block");
}

function hiddenDiv(){
	index=0;
	oldlength=0;
	oldvalue="";
	$("#resultDiv").css("display","none");
}

//搜索是否只有一个结果
function searchOne(){
	var product=$("#product").val();
	if(product==null||trim(product)==""||product==tip){
		return;
	}
	var result="";
	var i=0;
	for(var j=0,k=arrayObj.length;j<k;j++){
		var obj=arrayObj[j];
		if(obj.name.indexOf(product)>-1||obj.pinYin.indexOf(product)>-1||obj.firstPinYin.indexOf(product)>-1){
			i++;
			if(i>1){
				break
			}
			result=obj.product;
		}
	}
	if(i==1){
		gotoProductPage(result);
	}else{
		showDiv("<div class='msg'>抱歉,没有找到<span>"+product+"</span>相关的产品</div>");
	}
}

function mouseOver(obj){
	$("#resultTable").find("tr[index="+index+"]").removeClass("hover");
	$(obj).addClass("hover");
	index=~~$(obj).attr("index");
}

function mouseOut(obj){
	$(obj).removeClass("hover");
}

$(document).mousedown(
	function(e){ 
		var className;
		if(document.all==null){
			if(e.button==0){//鼠标左键 
				className=e.target.className;
			}
		}else{
		 	ev = document.all ? window.event : e; 
		 	if(ev.button==1) {  //鼠标左键 
		 		className=ev.srcElement.className;
		 	}
		}
		if("searchP"==className){
			var product=$("#resultTable").find("tr[index="+(index)+"]").attr("product");
			if(product!=null){
				gotoProductPage(product);
			}
		}else{
			hiddenDiv(); 
		}
	}
); 

$(document).keydown(
	function(e){   
		var ev 
		if(document.all==null){
			ev=e;
		}else{
			ev = document.all ? window.event : e;  
		}
		if(ev.keyCode==13) {  //回车键  
			if(index>0){
				var product=$("#resultTable").find("tr[index="+(index)+"]").attr("product");
				if(product!=null){
					gotoProductPage(product);
				}
			}else{
				searchOne(); 
			}
		}else if(ev.keyCode==38){//上
			if(index>1){
				$("#resultTable").find("tr[index="+index+"]").removeClass("hover");
				$("#resultTable").find("tr[index="+(index-1)+"]").addClass("hover");
				index--;
			}
		}else if(ev.keyCode==40 ){//下
			var obj=$("#resultTable").find("tr[index="+(index+1)+"]");
			if(obj.length>0){
				$("#resultTable").find("tr[index="+index+"]").removeClass("hover");
				obj.addClass("hover");
				index++;
			}
		}
	}  
); 


</script>

<div >
	<div class="tab-div cs-clear" >
		<div style="white-space:nowrap;">
			<span class="cs-fl tab-div-tit">产品搜索:</span>
			<input id="product" onblur="if (value ==''){value=tip}" onclick="if(this.value==tip)this.value=''" onkeyup="searchProduct();" maxLength="50" size="16" value="汉字∣拼音∣首字母" type="text" class="ipt-t"   />
			<input value="搜索" type='button' onclick="searchOne();" />
		</div>
		<div id='resultDiv'
			style="display: none;" class="prompt">
		</div>
	</div>
</div>

分享到:
评论

相关推荐

    opensug.js搜索提示框 v1.1.2-源码.zip

    总的来说,这个压缩包提供了一个学习JavaScript搜索提示功能实现的机会,对于前端开发者,尤其是对JavaScript和交互式UI感兴趣的开发者来说,这是一个宝贵的资源。通过深入研究源码,可以学习到JavaScript编程技巧,...

    ajax搜索提示js搜索提示

    JavaScript 代码中,定义了一些变量来管理状态和数据,例如 `lastindex` 记录鼠标悬停在搜索提示列表中的位置,`flag` 控制是否允许进行 AJAX 查询,以及 `listlength` 存储返回的搜索提示数量。此外,还定义了一个 ...

    v1.1.0opensug.js搜索提示框

    综上所述,openSug.js是一个方便开发者和站长的JavaScript库,通过简单集成就能实现搜索提示功能,提高用户搜索效率。其1.1.0版本可能包含了一些性能优化或新特性。配合PHP后端,可以轻松实现前后端的数据交互,为...

    基于PHP的opensug.js搜索提示框 PHP版.zip

    【标题】"基于PHP的opensug.js搜索提示框 PHP版.zip" 提供的是一个使用PHP语言实现的搜索提示框功能,结合了JavaScript库opensug.js,用于增强网站的用户搜索体验。这个压缩包包含了实现这一功能所需的核心代码和...

    PHP实例开发源码—opensug.js搜索提示框 PHP版.zip

    在本实例中,我们关注的是一个名为"PHP实例开发源码—opensug.js搜索提示框 PHP版.zip"的压缩包,它显然包含了使用PHP语言实现的搜索提示框功能。搜索提示框是用户交互中常见的一种功能,常用于提高用户体验,帮助...

    基于PHP的opensug.js搜索提示框PHP版源码.zip

    【标题】"基于PHP的opensug.js搜索提示框PHP版源码"是一个针对网页搜索功能优化的项目,它结合了JavaScript库opensug.js与后端的PHP语言来实现高效的搜索建议功能。在网页搜索框中输入关键词时,该功能会即时提供...

    opensug.js搜索提示框 v1.1.1

    "opensug.js搜索提示框 v1.1.1"正是这样一个旨在提升搜索体验的JavaScript库,它为开发者提供了一种简单而高效的方式来实现搜索框的智能提示功能。这款工具的最新版本2018.06.15增加了对Google和Haos的支持,使得...

    用JS实现百度搜索提示效果

    &lt;title&gt;JavaScript搜索提示 ()" placeholder="请输入搜索关键词"&gt; &lt;div id="suggestions"&gt;&lt;/div&gt; &lt;script src="Scripts/search.js"&gt; ``` 接下来,我们编写JavaScript代码,这部分代码将在`Scripts/search....

    opensug.js搜索提示框PHP版v1.1.2

    openSug.js旨在帮助站长、开发者只需引用一段JS即可获得带有“搜索框提示”功能的搜索框,让搜索变得更便捷! 2018.06.15更新: 新增加Google、Haoso、Yahoo、Yandex(俄罗斯)、Taobao(购物)结果源 2018.06.26更新:...

    opensug.js搜索提示框 v1.1.0

    "opensug.js搜索提示框 v1.1.0" 是一个专门为开发者设计的JavaScript库,其目标是简化和加速网页中的搜索功能实现。这个库的主要功能是为搜索框添加智能提示,通过动态加载和显示相关搜索建议,提高用户的搜索效率。...

    opensug.js搜索提示框 v1.1.2

    openSug.js旨在帮助站长、开发者只需引用一段JS即可获得带有“搜索框提示”功能的搜索框,让搜索变得更便捷!2018.06.26更新:新增加酷狗音乐、优酷视频结果源,方便做音乐视频的用户调用。2018.06.15更新:新增加...

    ajax搜索下拉菜单提示js源代码

    总结,Ajax搜索下拉菜单提示js源代码是结合Ajax和JavaScript实现的一种动态搜索功能,通过监听用户输入、发送Ajax请求、处理返回数据并动态更新页面内容,提高了搜索的效率和用户体验。理解并掌握这些知识点,有助于...

    js百度搜索框提示,不包含数据库

    接下来,我们需要创建一个JavaScript文件(如`search.js`),在这里我们将编写搜索提示的逻辑。这里我们假设有一个JSON数组,包含了预设的搜索建议: ```javascript const suggestions = [ "JavaScript", "百度",...

    搜索提示框asp.net+js代码

    在ASP.NET和JavaScript的环境中,我们可以利用这两种技术的结合来实现一个功能丰富的搜索提示框。本篇文章将深入探讨如何使用ASP.NET后端和JavaScript前端来创建这样一个功能。 首先,让我们理解ASP.NET的角色。ASP...

    js仿迅雷搜索提示代码

    "js仿迅雷搜索提示代码"是一个利用JavaScript技术实现的功能,它模仿了迅雷搜索的实时提示功能,为用户提供友好的输入建议,提高了用户体验。这个功能通常与后台数据库进行交互,通过AJAX(异步JavaScript和XML)...

    JS百度搜索框联想词提示代码.zip

    【JS百度搜索框联想词提示代码】是一种使用JavaScript编写的前端技术实现,它主要用于创建一个类似于百度搜索引擎的自动联想提示功能。在用户输入关键词时,该代码能够实时地从预设的数据源中匹配并显示相关的搜索...

    JS搜索框提示 纯JS 结构无数据库

    JS搜索框提示 纯JS 结构无数据库function smanPromptList(arrList,objInputId){ this.style = "background:#E8F7EB;border: 1px solid #CCCCCC;font-size:14px;cursor: default;" if (arrList.constructor!=Array){...

Global site tag (gtag.js) - Google Analytics