Skip to content
Menu
Yuuk的博客
  • 首页
  • 前端技术
    • JavaScript
    • HTML & CSS
  • SEO
  • 设计
    • 素材分享
    • 设计教程
  • 随笔
Yuuk的博客

原生JS实现静态数据联想搜索

Posted on 2017年8月31日2017年8月31日 by yuuk

想必上图中的效果大家一定都见过吧~是不是hin常见!其原理其实也很简单。

搜索框输入字符的时候去和数组里面的每一项数据对比,判断输入框的值是否和数组里每一项的值的开头相同。

判断【输入框的值是否和数组里每一项的值的开头相同】有多种方法,这里我们分享两种比较好理解的方法。

1、使用字符串 slice 方法,slice api

var str = 'string';
str.slice(0, 3); // str

于是,我们有以下的代码

var arr = ['apple', 'banana', 'joanna', 'kevin', 'john'];
var ipt = document.querySelector('#ipt');
ipt.addEventListener('input', function(){
    var tempArr = [];
    var val = this.value;
    var len = val.length;
    arr.forEach(function(o, i ,arr) {
    	if (o.slice(0, len) == val) {
    		tempArr.push(o);
    	}
    });
    console.log(tempArr);
}, false);

2、使用正则匹配,代码如下

var arr = ['apple', 'banana', 'joanna', 'kevin', 'john'];
var ipt = document.querySelector('#ipt');
ipt.addEventListener('input', function(){
    var tempArr = [];
    var val = this.value;
    var reg = new RegExp('^'+val); // 以val开头
    arr.forEach(function(o, i ,arr) {
        if (reg.test(o)) {
            tempArr.push(o);
        }
    });
    console.log(tempArr);
}, false);

以上就是提两种实现方式,个人感觉用正则更容易理解一些~

打赏赞(2)分享

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

搜索

近期文章

  • 宝塔面板中使用docker部署nodejs应用
  • 如何将docker镜像上传到阿里云
  • React Native 报错 No bundle URL present 解决方法
  • axios 给每一个请求添加耗时统计
  • css filter属性导致fixed失效

标签

addEventListener ajax ajax跨域 chatAt css居中 DNS缓存 docker gulp ie7 json jsonp margin memcache mysql nodejs ps技巧 typescript void vpn vuejs wampserver webpack win10 XMLHttpRequest z-index 事件冒泡 事件绑定 内容发布时间 图片加载 大写 字符串 封装ajax 广告屏蔽 批量修改图层名称 水平垂直居中 注册码 特殊符号 百度 空元素 站长平台 网页快照 负边界 递减 随机数 首字母

友情链接

  • 蔡甸新闻网
©2025 Yuuk的博客 | 鄂ICP备13014750号-9