zoukankan      html  css  js  c++  java
  • 查询列表关键字高亮实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>auto complete</title>
      <style>
        bdi {
          color: rgb(0, 136, 255);
        }
    
        li {
          list-style: none;
        }
      </style>
    </head>
    <body>
      <input class="inp" type="text">
      <section>
        <ul class="container"></ul>
      </section>
    </body>
    <script>
    
      function debounce(fn, timeout = 300) {
        let t;
        return (...args) => {
          if (t) {
            clearTimeout(t);
          }
          t = setTimeout(() => {
            fn.apply(fn, args);
          }, timeout);
        }
      }
    
      function memorize(fn) {
        const cache = new Map();
        return (name) => {
          if (!name) {
            container.innerHTML = '';
            return;
          }
          if (cache.get(name)) {
            container.innerHTML = cache.get(name);
            return;
          }
          const res = fn.call(fn, name).join('');
          cache.set(name, res);
          container.innerHTML = res;
        }
      }
    
      function handleInput(value) {
        const reg = new RegExp(`(${value})`);
        const search = data.reduce((res, cur) => {
          if (reg.test(cur)) {
            const match = RegExp.$1;
            res.push(`<li>${cur.replace(match, '<bdi>$&</bdi>')}</li>`);
          }
          return res;
        }, []);
        return search;
      }
      
      const data = ["上海野生动物园", "上饶野生动物园", "北京巷子", "上海中心", "上海黄埔江", "迪士尼上海", "陆家嘴上海中心"]
      const container = document.querySelector('.container');
      const memorizeInput = memorize(handleInput);
      document.querySelector('.inp').addEventListener('input', debounce(e => {
        memorizeInput(e.target.value);
      }))
    </script>
    </html>
    

      

  • 相关阅读:
    TCP协议实现双工通信
    搭建本地FTP服务器
    CSS 3 选择器root、not、empty、target
    CSS 3 中的伪类选择器
    CSS 3 中的属性选择器
    Entity Framework Code First属性映射约定
    Entity Framework数据库初始化四种策略
    HTML 5 Base 64 编码
    HTML 5 离线程序
    HTML5 本地数据库IndexedDB数据库
  • 原文地址:https://www.cnblogs.com/maomao93/p/11946921.html
Copyright © 2011-2022 走看看