• 查询列表关键字高亮实现


    <!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>
    

      

  • 相关阅读:
    鲍尔默称微软将投入数十亿美元打造数据中心业务(转)
    程序流程的辅助控制
    获取程序所在目录
    越界赋值
    长字串与宽字串
    长字串与短字串
    指针的运算
    Windows API 的数据类型与 Delphi 数据类型对照表
    给动态数组添加一个元素
    Delphi 与 C/C++ 数据类型对照表
  • 原文地址:https://www.cnblogs.com/maomao93/p/11946921.html
Copyright © 2020-2023  润新知