用JavaScript写一个简易的自动搜索框

一. HTML 部分代码及代码解释

        HTML 中需要注意的是,JavaScript 的引用的位置。JavaScript的位置引用不合适可能会导致代码报错,或者 JavaScript 获取到的内容为空。所以 JavaScript 一般引用在代码最下面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>搜索</title>

    <!-- 链接 index.css 页面 -->
    <link rel="stylesheet" href="index.css"> 
</head>
<body>
    
    <div class="search" id="search">

        <!-- 搜索框 -->
        <div class="search-top" id="search-top">
            <input type="text" id="search-input" placeholder="请输入" value="" oninput="myScript()">
        </div>

        <!-- 数据展示 -->
        <div class="search-content" id="search-content">

            <ul class="ul" id="ul">

            </ul>
        </div>
    
    </div>

</body>

<!-- 链接 index.js 页面 -->
<!-- 注意引入的位置,引入的位置会影响加载的顺序  顺序不对则js会报错 -->
<script type="text/javaScript" src="index.js"></script>
</html>

二. CSS 部分代码及代码解释

        HTML 部分是用 input 输入框和 ul 列表组成的,他们都有自己的默认样式,并且默认样式的优先级比较高,需要自己手动改变。

        calc() 函数 用于动态计算长度值。可以获取 <div> 元素的宽度。

    height: calc(50vh);     /*当前窗口高度的 50%*,动态的,会随页面的大小变动而变动*/

    width: calc(25vw);      /*当前窗口宽度的 25%*,动态的,会随页面的大小变动而变动*/

        需要注意的是,calc() 函数中是可以有计算公式的,但是需要复合calc的规则。并且,运算符前后都需要保留一个空格,例如:

width: calc(100% - 50px)

width: calc(50% - 1em);

        ::-webkit-scrollbar  是CSS 伪类元素,作用是设置  overflow:scroll;  元素的滚动条样式。 

::-webkit-scrollbar {

    display: none;  /* 浏览器隐藏滚动条 */

  }


html,body{
    margin: 0;
    padding: 0;
    font-family: STXinwei; /* 华文新魏*/
}

/* -----------------------------------分割线-------------------------------*/

.search{

    height: calc(50vh);     /*当前窗口高度的 50%*,动态的,会随页面的大小变动而变动*/
    width: calc(25vw);      /*当前窗口宽度的 25%*,动态的,会随页面的大小变动而变动*/
    font-size: 36px;
    margin: 100px auto;

}

.search-content{

    width: 100%;
    height: 100%;
    border: 1px solid black;
    overflow-y: scroll;     /* 仅垂直方向显示滚动条 */
}


::-webkit-scrollbar {
    display: none;  /* 浏览器隐藏滚动条 */
  }
/* -----------------------------------分割线-------------------------------*/

input{
    width: 100%;
    height: 60px;
    border: 1px solid black;    /* input 默认border 不为1*/
    padding: 0;    /* input 默认padding 不为0*/
    font-family: STXinwei; /* input 字体是默认的,可以自行更改 */
    font-size: 48px;
}

ul{
    padding: 0;  /* 消除li前面空白 */
    margin: 0;  /* ul 默认外边距不为0,需要手动设置 */
}

li{
    list-style:none;    /* 取消 li 前面的点 */
    margin: 10px;
}

三. JS 部分代码及代码解释       

 3.1 代码逻辑

  •  HTML 中 input 输入框中设置监听事件 oninput
  • input 输入框内容发生变化时,立即调用 search() 函数
  • 在 search() 函数 中进行数据加载和逻辑判断

3.2 注意事项

indexOf 注意事项

indexOf() 方法可返回,某个指定的字符串值在字符串中首次出现的位置。

如果要检索的字符串值没有出现,则该方法返回 -1

const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('giraffe'));
// Expected output: -1

if 注意事项

 if(-1)  等价于 if(true)

let test = 1;
if(-1){
    test= 2 ;
}
console.log(test)
//  输出为 2

 3.3 代码片段


let ul = document.getElementById("ul")

// 搜索功能
function search(){

    let value =  document.getElementById("search-input").value

    // 数据展示
    let dataList = ["123","123测试","123lmh","lmh","lmh123","lmh测试","测试","测试123","测试lmh","测试成功","测试失败"]

    for(let i=0; i<dataList.length ;i++){

        // if(-1) 等价于 if(true),所以要判断是否等于 -1
        if(dataList[i].indexOf(value) === -1){
            dataList[i] = ""
        }

    }

    ul.innerHTML = " "  // 令之前渲染的数据为空 

     //重新渲染复合条件的数据
    for(let i = 0; i < dataList.length ;i++){

        let li = document.createElement("li")
        li.innerText = dataList[i]
        // li.style.display = "none"
        ul.appendChild(li)
    
    }

}
search()
function myScript(){
    search()
}

四. 效果演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值