JavaScript實(shí)現(xiàn)搜索的數(shù)據(jù)顯示
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)搜索的數(shù)據(jù)顯示代碼,供大家參考,具體內(nèi)容如下
今天的效果如下:

這個(gè)案例的要點(diǎn)有兩個(gè):
一是使用CSS顯示樣式
二是使用js比較輸入的內(nèi)容和數(shù)組中的內(nèi)容使得包含輸入內(nèi)容的數(shù)據(jù)顯示出來
首先來看CSS顯示樣式的難點(diǎn):
兩個(gè)div的接觸部分,要想讓它們無縫隙接觸,就需要設(shè)置float:left;
兩個(gè)div盒子左右兩側(cè)的圓角邊框,我們需要分別為border-top-left-radius等設(shè)置值,這樣就大致得到了搜索框的樣式,剩下的細(xì)節(jié)可以去代碼中查看~
接著來看JS進(jìn)行比較的部分:
總的思想呢,就是當(dāng)輸入內(nèi)容時(shí)使下方顯示搜索框,顯示匹配的數(shù)據(jù);不輸入或輸入數(shù)據(jù)不匹配時(shí),不顯示數(shù)據(jù)或顯示暫無數(shù)據(jù);搜索框失去焦點(diǎn)時(shí)使下方的搜索框消失
1、當(dāng)我們在搜索框中輸入內(nèi)容時(shí),我們可以調(diào)用onkeyup函數(shù),先使下方的搜索框display屬性值為block;
然后在其中調(diào)用forEach遍歷數(shù)組中的所有數(shù)據(jù),通過value獲得輸入的內(nèi)容,調(diào)用indexOf將該內(nèi)容與數(shù)組中的數(shù)據(jù)進(jìn)行比較,若有匹配項(xiàng)的話,其返回值是數(shù)組中數(shù)據(jù)的下標(biāo),否則為-1;
若有匹配項(xiàng)的話,我們可以利用innerHTML,在下面的顯示框中添加p標(biāo)簽,p中的內(nèi)容是匹配的數(shù)據(jù);如果沒有就返回內(nèi)容是‘暫無數(shù)據(jù)'的p標(biāo)簽
2、當(dāng)該搜索框失去焦點(diǎn)時(shí),我們令下方搜索框的display屬性值為none就可以了
代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
width: 500px;
height: 160px;
padding: 40px;
margin: 100px auto
}
#one {
width: 268px;
height: 33px;
float: left;
border: 0;
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
background-color: rgb(245, 246, 247);
outline: none;
}
#search {
background-color: rgb(252, 85, 49);
color: white;
width: 70px;
height: 35px;
line-height: 35px;
text-align: center;
font-size: 13px;
border-radius: 20px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
float: left;
}
#show {
width: 270px;
height: 170px;
border: 1px solid rgba(77, 76, 76, 0.459);
display: none;
margin-top: 40px;
overflow: hidden;
}
#show div{
width: 100%;
height: 40px;
line-height: 40px;
text-indent: 1em;
display: block;
}
#show div:hover{
background-color: rgb(240, 240, 245);
cursor:pointer;
}
</style>
</head>
<body>
<div class="container">
<div id="nav">
<input type="text" id="one" placeholder="請輸入課程" autocomplete="on">
<div id="search">搜索</div>
</div>
<div id="show">
<div></div>
</div>
</div>
<script>
let arr = ['蛋糕便宜賣', '想吃水果', '2333', 'css精品課程','2個(gè)小朋友','這兒有2個(gè)面包','我們一起','樂隊(duì)的夏天','天氣真好'];
let one = document.getElementById("one");
let show = document.getElementById("show")
one.onfocus = function () {
show.style.display = "block";
one.style.border = "1px coral solid"
one.onkeyup = function () {
let str = '';
let tem=false;
arr.forEach((item) => {
let index = item.indexOf(one.value);
if (~index) {
tem=true;
str+='<div>'+item+'</div>';//每次都更新str的值,所以不用擔(dān)心重復(fù)
}
})
//很重要
if(one.value=='' || !tem){
show.innerHTML='<div>'+'暫無結(jié)果'+'</div>';
}
else{
show.innerHTML=str;
}
}
}
//onblur 的事件會(huì)在對象失去焦點(diǎn)時(shí)發(fā)生
one.onblur = function () {
show.style.display = "none"
one.style.border = "1px transparent solid"
show.innerHTML='';
}
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript中的50+個(gè)實(shí)用工具函數(shù)小結(jié)
JavaScript可以做很多出色的事情,本篇文章給大家整理50+個(gè)實(shí)用工具函數(shù),可以幫助你提高工作效率并可以幫助調(diào)試代碼,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
基于JavaScript實(shí)現(xiàn)控制下拉列表
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)控制下拉列表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
jquery對單選框,多選框,文本框等常見操作小結(jié)
本篇文章主要是對jquery對單選框,多選框,文本框等常見操作進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
uniapp自定義頁面跳轉(zhuǎn)loading的實(shí)現(xiàn)代碼
有些頁面加載起來比較慢,為了加強(qiáng)用戶體驗(yàn)效果,所以一般都會(huì)做一個(gè)頁面加載等待的提示,頁面加載完成后消失,下面這篇文章主要給大家介紹了關(guān)于uniapp自定義頁面跳轉(zhuǎn)loading的實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-06-06
JavaScript實(shí)現(xiàn)事件的中斷傳播和行為阻止方法示例
這篇文章主要給大家介紹了利用JavaScript實(shí)現(xiàn)事件的中斷傳播和行為阻止的方法示例,文中給出了詳細(xì)的介紹和示例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,需要的朋友們下面來一起看看吧。2017-01-01

