JavaScript和JQuery实现必应搜索

14 篇文章 0 订阅
8 篇文章 0 订阅

最终效果图如下:




html代码如下:

<!doctype html>
<html lang="en">
<head>

	<meta charset="UTF-8">
	<!--IE浏览器兼容性设置,按照正常的文档模式来渲染-->
	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
	<title>bing search</title>
	<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<body>
	<div class="bg-div">
		<div class="search-box">
			<div class="logo"></div>
			<form id="search-form">
				<input type="text" class="search-input-text" autocomplete="off" name="q" id="search_input" />
				<input type="submit" class="search-input-button" value="" id="search_submit">
			</form>
		</div>
	</div>
	
	<div class="suggest" id="search-suggest">
		<ul id="search-result">
			<li>搜索结果1</li>
			<li>搜索结果2</li>
		</ul>
	</div>


	<!-- <script type="text/javascript" src="js_frame/jquery-2.2.0.min.js"></script>
	<script type="text/javascript" src="js/index.js"></script> -->

	<script type="text/javascript" src="js/index2.js"></script>
</body>
</html>

css代码如下:

* {
	padding: 0;
	margin: 0;
}

body {
	background-color: #333;
}

.bg-div{
	background-image: url('../images/river.jpg');
	width: 1228px;
	height: 690px;
	margin: 0 auto;
	position: relative;
}

.logo {
	background-image: url('../images/logo.png');
	width: 107px;
	height: 53px;
	float: left;
	margin: -4px 18px 0 0;
}

form {
	float: left;
	background-color: #fff;
	padding: 5px;
}

.search-input-text {
	border: 0;
	float: left;
	height: 25px;
	line-height: 25px;
	outline: none;
	width: 350px;
	font-size: 16px;
}

.search-input-button {
	border: 0;
	background-image: url('../images/search-button.png');
	width: 29px;
	height: 29px;
	float: left;
}

.search-box {
	position: absolute;
	top: 200px;
	left: 300px;
}

#search-suggest {
	width: 388px;
	background-color: #fff;
	border: 1px solid #999;
	display: none;
}

.suggest ul {
	list-style: none;
}

.suggest ul li {
	padding: 3px;
	font-size: 14px;
	line-height: 25px;
	cursor: pointer;/*手型*/
}

.suggest ul li:hover {
	text-decoration: underline;
	background-color: #e5e5e5;
}


jQuery实现必应搜索:


//jQuery实现功能
$(function() {
	$("#search_input").bind("keyup", function() {
		var searchText = $("#search_input").val();
		/*$.get(
			"http://api.bing.com/qsonhs.aspx?q="+searchText
			, function(data) {

				console.log(data);

				var d = data.AS.Results[0].Suggests;
				var html = "";
				for(var i = 0; i < d.length; i++) {
					html += "<li>"+d[i].Txt+"</li>";
				}
				$("#search-result").html(html);


				$("#search-suggest").show().css({
					top : $("#search-form").offset().top + $("#search-form").height()+10,
					left : $("#search-form").offset().left,
					position : "absolute",
				});
			}
			, "json");*/

		$.ajax({
			type : "GET",
			url:"http://api.bing.com/qsonhs.aspx?type=cb&q="+searchText,
			dataType : "jsonp",
			jsonp:'cb',
			success : function(data) {
				if (data == null) {
					$("#search-suggest").hide();
					return false;
				}
				if (data.AS == null) {
					$("#search-suggest").hide();
					return false;
				}
				if(data.AS.Results == null){
					$("#search-suggest").hide();
					return false;
				}
				if (data.AS.Results[0] == null) {
					$("#search-suggest").hide();
					return false;
				}
				if (data.AS.Results[0].Suggests == null) {
					$("#search-suggest").hide();
					return false;
				}

				var d = data.AS.Results[0].Suggests;
				var html = "";

				for(var i = 0; i < d.length; i++) {

					html += "<li>"+d[i].Txt+"</li>";
				}
				$("#search-result").html(html);


				$("#search-suggest").show().css({
					top : $("#search-form").offset().top + $("#search-form").height()+10,
					left : $("#search-form").offset().left,
					position : "absolute",
				});
			}
		})
	});

	$(document).bind("click", function() {
		$("#search-suggest").hide();
	});

	//事件代理
	$(document).delegate("li", "click", function() {
		var keyword = $(this).text();
		location.href = "http://cn.bing.com/search?q="+keyword;
	});

	$("#search-form").submit(function() {
		var keyword = $("#search_input").val();
		console.log("word="+keyword);
		//if (keyword == null) {return false;}
		location.href = "http://cn.bing.com/search?q="+keyword;
	});
});


原生JavaScript实现功能:

//原生JavaScript实现功能
window.onload = function() {
		
	addEvent("search_input", "keyup", function() {

		var searchText = getDOM("search_input").value;
		var element = getDOM("search-suggest");
		//--------------
		//正常情况下
		/*ajaxGet("http://api.bing.com/qsonhs.aspx?type=cb&cb=callback&q="+searchText, function(data) {
			if (data == null) {
				element.style.display = "none";
				return false;
			}
			if (data.AS == null) {
				element.style.display = "none";
				return false;
			}
			if(data.AS.Results == null){
				element.style.display = "none";
				return false;
			}
			if (data.AS.Results[0] == null) {
				element.style.display = "none";
				return false;
			}
			if (data.AS.Results[0].Suggests == null) {
				element.style.display = "none";
				return false;
			}

			var d = data.AS.Results[0].Suggests;
			var html = "";

			for(var i = 0; i < d.length; i++) {

				html += "<li>"+d[i].Txt+"</li>";
			}

			var sf = getDOM("search-form");
			element.innerHTML = html;
			element.style.top = getElementTop(sf) + 38 + "px";
			element.style.left = getElementLeft(sf) + "px";
			element.style.position = "absolute";
			element.style.display = "block";
		});*/

		//---------------------

		//跨域的情况

		ajaxGet2("http://api.bing.com/qsonhs.aspx?type=cb&cb=callback&q="+searchText);

		
		
	});


}

var getDOM = function(id) {
	return document.getElementById(id);
}

/*
*正常情况下这样做
*JavaScript的Ajax实现方法
*url 传入的地址
*callback 回调方法
*/
var ajaxGet = function(url, callback) {
	var _xhr = null;
	/*
	*window.XMLHttpRequest是非IE浏览器
	*window.ActiveXObject 是IE浏览器
	*/
	if (window.XMLHttpRequest) {
		_xhr = new window.XMLHttpRequest();
	} else if (window.ActiveXObject) {
		_xhr = new ActiveXObject("Msxml2.XMLHTTP");
	}

	_xhr.onreadystatechange = function() {
		if (_xhr.readyState == 4 && _xhr.status == 200) {
			callback(JSON.parse(_xhr.responseText));
		}
	}
	//第三个参数设置成false表示采用异步的方式
	_xhr.open("get", url, false);
	_xhr.send(null);

}


//------------------------------------
//跨域情况下这样做
var ajaxGet2 = function(url) {
	var JSONP = document.createElement("script");
	JSONP.src = url;
	document.getElementsByTagName("body")[0].appendChild(JSONP);
}

var callback = function(data) {

	var searchText = getDOM("search_input").value;
	var element = getDOM("search-suggest");

	if (data == null) {
		element.style.display = "none";
		return false;
	}
	if (data.AS == null) {
		element.style.display = "none";
		return false;
	}
	if(data.AS.Results == null){
		element.style.display = "none";
		return false;
	}
	if (data.AS.Results[0] == null) {
		element.style.display = "none";
		return false;
	}
	if (data.AS.Results[0].Suggests == null) {
		element.style.display = "none";
		return false;
	}

	var d = data.AS.Results[0].Suggests;
	var html = "";

	for(var i = 0; i < d.length; i++) {

		html += "<li>"+d[i].Txt+"</li>";
	}

	var sf = getDOM("search-form");
	element.innerHTML = html;
	element.style.top = getElementTop(sf) + 38 + "px";
	element.style.left = getElementLeft(sf) + "px";
	element.style.position = "absolute";
	element.style.display = "block";
}

//------------------------------------

/**
*id 需要绑定事件的元素id
*event 需要绑定的事件
*fn 事件的回调函数
*这里使用addEventListener的方法绑定事件,相比onclick事件,
*它的优点在于可以绑定多个事件
*/
var addEvent = function(id, event, fn) {
	//这里用一个 ||document,为了防止getDOM为null的时候程序会报错
	var el = getDOM(id) || document;
	/*
	el.addEventListener适用于非IE浏览器,el.attachEvent适用于IE浏览器
	*/
	if (el.addEventListener) {
		el.addEventListener(event, fn, false);
	} else if (el.attachEvent) {
		el.attachEvent("on"+event,fn);
	}
}

/**
*获取元素距离浏览器左边的距离
*/
var getElementLeft = function(element) {
	/*offsetLeft只能拿到距离父元素左边的距离,
	所以需要用循环获取距离浏览器左边的距离*/
	var actualLeft = element.offsetLeft;
	var current = element.offsetParent;

	while(current != null) {
		actualLeft += current.offsetLeft;
		current = current.offsetParent;
	}

	return actualLeft;
}

//获取元素距离浏览器顶部的距离
var getElementTop = function(element) {
	var actualTop = element.offsetTop;
	var current = element.offsetParent;

	while(current !== null) {
		actualTop += current.offsetTop;
		current = current.offsetParent;
	}

	return actualTop;
}


//事件代理
var delegateEvent = function(target, event, fn) {  
    addEvent(document, event, function(e) {  
        if(e.target.nodeName == target.toUpperCase()) {  
            fn.call(e.target);  
        }  
    });  
};

delegateEvent("li", "click", function() {
	var keyword = this.innerHTML;
	location.href = "http://cn.bing.com/search?q=" + keyword;
})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值