HTML+CSS完结智能查找作用

我正在参加「码上挑战赛」详情请看:码上挑战赛来了!

我是Sam9029,一个前端

Sam9029的主页:Sam9029的主页

`‍‍祝贺你,若此文你以为写的不错,不要小气你的赞扬,求保藏,求谈论,求一个大大的赞!


嘿嘿,今日,我预备写一个 查找框的智能完结查找后呈现,回来成果的作用

将运用 HTML+CSS + JS 来完结这个作用

以下是需求

需求

  • 作用精良,像查找界面的页面,这当然难不倒我啦
  • 查找后在下方展现模糊查找匹配的数据
  • 模糊匹配的数据种查找的关键字应该加粗标红处理

源码及作用

源码地址:

展现作用:

HTML+CSS完结智能查找作用

思路

HTML 结构

  • 居中查找框
  • 运用图片模糊布景
<div class="mask"></div>
<div class="wrap">
    <div class="searchContainer">
        <div id="searchSubContainer">
            <input type="text" name="" id="searchInput" placeholder="输入 关键词 空格隔开">
            <ul id='resultContainer'>
                <!-- JS 动态展现成果 -->
            </ul>
        </div>
        <button id="searchBtn" title="查找">查找</button>
    </div>
</div>

JS逻辑

  • 设定原始的本地查找库匹配数据
// 查找数据条目库
let dataBase = [
    '一 一 一 一 一',
    '将进酒 唐代诗仙李白沿用乐府古题创作的七言歌行',
    '君不见 黄河之水天上来,奔流到海不复回',
    '君不见 高堂明镜悲白发,朝如青丝暮成雪',
    '人生满意须尽欢,莫使金樽空对月',
    ………………
    //更多数据请检查 源码地址
]
  • 运用DOM API 获取查找框 的值 以及 查找按钮
    • 绑定查找框的查找函数
// 获取
let searchInput = document.querySelector('#searchInput') 
let searchBtn = document.querySelector('#searchBtn') 
let resultContainer = document.querySelector('#resultContainer') 
// 绑定查找事情
searchBtn.addEventListener('click',search)
searchInput.addEventListener('change',search)
  • 创建查找函数—及其内部操作
    • 字符串去掉空格
    • 空值判别
    • 清除查找前史成果
    • 查找关键字去重
    • 匹配本地设置的数据
    • 在回来数据中为 关键词 加标签 处理(加粗标红)
    • 展现成果添加 到页面
function search(){
    // 字符串去掉空格
    let searchInputString = searchInput.value.trim()
    // 空值判别
    if(!searchInputString){
        // 清除前史成果
        resultContainer.innerHTML = ''
        console.log('输入值为空')
        return
    }
    // 转成数组
    let searchInputArray = searchInputString.split(' ')
    // 去掉数组中剩余的空格占位
    searchInputArray = searchInputArray.filter(item=>item)	
    // 数组去重
    // Set数据类型 要转化数组
    searchInputArray = Array.from(new Set([...searchInputArray]))
    // 检测以上过程
    // console.log(searchInputString,searchInputString.split(' '),searchInputArray)
    // console.log(searchInputArray)
    // 比照数据库 提取满意的数据成果
    let resultList = [];
    // 暂存每次循环比照 提取的成果 
    // 之后将每次循环比照提取的暂存成果 兼并至成果数组
    let temp = []
    for(let i=0;i<searchInputArray.length;i++){
        // 亦可在此处 关键词 加标签 处理
        temp = dataBase.filter(item => item.includes(searchInputArray[i]))
        // 将每次循环比照提取的暂存成果 兼并至成果数组
        resultList = resultList.concat(temp)
    }
    // 只回来 关键词一起满意的 查找目???
    // 数组去重
    resultList = Array.from(new Set([...resultList]))
    // 清除前史成果
    resultContainer.innerHTML = ''
    // 成果 关键字 处理
    for(let i=0;i<searchInputArray.length;i++){
        for(let j=0;j<resultList.length;j++){
            // 
            let keyword = searchInputArray[i]
            let resultItem = resultList[j]
            // 存在多条成果,不一定每个成果,都包含所有关键词
            // 关键词 是否 存在
            let keywordIsExist = resultList[j].includes(keyword)
            console.log(keywordIsExist)
            // 存在则 关键词 加标签处理
            if(keywordIsExist){
                // 替换 关键词 并 加上标签回来
                // resultList[j] = resultList[j].replace(keyword,`<strong>${keyword}</strong>`)
                resultList[j] = resultList[j].split(keyword).join(`<strong>${keyword}</strong>`)
                // 一个成果 条目数据 或许包含多个关键词??
                console.log(resultList[j])
            }					
        }
    }
    // 展现成果
    // searchInputArray
    for(let i=0;i<resultList.length;i++){
        // 添加 到页面
        let li = document.createElement('li')
        li.innerHTML = resultList[i]				
        resultContainer.appendChild(li)
    }		
}

待改进

  • 键盘事情判别,键盘enter也可触发查找
  • 输入的自动判别查找
    • 一起绑定防抖函数,提高运用体验,避免过度查找

我是Sam9029,一个前端,深信应无所往

文章若有过错,敬请纠正

**‍‍祝贺你,都看到这了,求保藏,求谈论,求一个大大的赞!不过分吧**

Sam9029的主页:Sam9029的主页