上来先展示效果:
默认展示效果:

输入内容:

上代码:

css部分:

<style type="text/css">* {padding: 0;margin: 0;}h2 {margin-bottom: 20px;}#container {width: 500px;text-align: center;margin: 0 auto;font-family: "微软雅黑";margin-top: 50px;}.selectContainer {position: relative;}.selectInput {width: 200px;height: 25px;border-style: none;border: 1px solid #999;border-radius: 3px;padding: 0 3px;}.picture_click {background: url(img/select-default.png) no-repeat; opacity: 1; width: 15px; height: 8px;position: absolute;top: 10px;right: 125px;}.picture_click:hover {background-image: url(img/select-hover.png);}.selectList {width: 206px;height: 212px;overflow-y: scroll;text-align: left;margin: 0 172px;border: 1px solid #999;display: none;position: relative;}.selectList div {cursor: pointer;}.nullcon{display: none;text-align: center;padding: 10px;word-break: break-all;}
</style>

html部分:

<div id="container"><h2>模糊搜索</h2><div id="cityContainer" class="selectContainer"><label>公司:</label><input type="text" placeholder="请输入公司名称" list="cityList" class="selectInput" name="cityName" id="cityName" value="" onfocus="fuzzySearch.call(this, 'cityList')" /><div class="picture_click dropDowns" style=""></div><div id="cityList" class="selectList"></div></div>
</div>

js部分:

<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script type="text/javascript">function fuzzySearch(listId) {var that = this;//初始化下拉框
        initSearchInput(that, listId);var listArr = [{'eleId':'01',eleName:'测试公司'},{'eleId':'02',eleName:'出纳测试公司1'},{'eleId':'03',eleName:'期间设置公司'},{'eleId':'04',eleName:'演示公式'},{'eleId':'05',eleName:'公司11'},{'eleId':'06',eleName:'HFY测试公司'},{'eleId':'07',eleName:'测试公司2'},{'eleId':'08',eleName:'中餐饮有限公司'},{'eleId':'09',eleName:'烤匠烤鱼餐厅'},{'eleId':'10',eleName:'呷哺呷哺北京1'},{'eleId':'11',eleName:'呷哺呷哺北京2店'},{'eleId':'12',eleName:'呷哺呷哺北京3店'},{'eleId':'13',eleName:'肯德基'},{'eleId':'14',eleName:'麦当劳'},{'eleId':'15',eleName:'必胜客'},{'eleId':'16',eleName:'麦当劳222'}]var aa=$('#' + listId);//遍历数组,创建元素默认显示$('#' + listId).html('');$.each(listArr, function(index, item){var divStr = '<div id='+item.eleId+'>'+item.eleName+'</div>';$('#' + listId).append(divStr);})$('#' + listId).append('<div id="nullcon" class="nullcon">没有找到内容</div>');//current用来记录当前元素的索引值var current = 0;//匹配文本框中输入的字符串var showList = searchText(that, listArr, listId);bindFun();//为文本框绑定键盘引起事件$(this).keyup(function(e){//如果输入空格自动删除this.value=this.value.replace(' ','');//列表框显示$('#' + listId).show();if(e.keyCode == 38) {//upconsole.log('up');current --;if(current <= 0) {current = 0;}console.log(current);}else if(e.keyCode == 40) {//downconsole.log('down');current ++;if(current >= showList.length) {current = showList.length -1;}console.log(current);}else if(e.keyCode == 13) {//enterconsole.log('enter');//如果按下回车,将此列表项的内容填充到文本框中
                $(that).val(showList[current].eleName);//下拉框隐藏$('#' + listId).hide();}else {//otherconsole.log('other');showList = searchText(that, listArr, listId);current = 0;}//设置当前项的背景色及位置if(showList && showList.length!=0){$.each(showList, function(index, item){if(index == current) {$('#' + item.eleId).css('background', '#eee');$('#' + listId).scrollTop($('#' + item.eleId).get(0).offsetTop);}else {$('#' + item.eleId).css('background', '');}})}//设置下拉框的高度//212为列表框的最大高度if(showList && showList.length!=0){if(212 > $('#' + listId).find('div').eq(0).height() * showList.length) {$('#' + listId).height($('#' + listId).find('div').eq(0).height() * showList.length);}else {$('#' + listId).height(212);}}})}//绑定事件function bindFun(){//给下拉箭头绑定点击事件  点击下拉箭头显示/隐藏对应的列表//输入框的类名为selectInput//下拉箭头的类名为picture_click、dropDowns//下拉列表的类名为selectListfor(var i = 0; i < $('.picture_click').length; i++) {$('.picture_click').eq(i).click(function(){$(this).parent().find('.selectList').toggle();})}//为列表中的每一项绑定鼠标经过事件$('.selectList div').mouseenter(function(){$(this).css("background", "#eee").siblings().css("background", "");});//为列表中的每一项绑定单击事件$('.selectList div').bind('click', function(){//文本框为选中项的值$(this).parent().parent().find('.selectInput').val($(this).html());//下拉框隐藏$(this).parent().hide();}); }function initSearchInput(that, listId) {//点击下拉框外部的时候使下拉框隐藏var dropDowns = document.getElementsByClassName('dropDowns');var selectList = document.getElementsByClassName('selectList');document.body.onclick = function(e){e = e || window.event;var target = e.target || e.srcElement;console.info('target', target);console.info('that', that);console.info('===', target == that)if(target == that){$('#' + listId).show();}else{for(var i = 0; i < dropDowns.length; i++) {if(target != dropDowns[i] && target != selectList[i]){selectList[i].style.display = 'none';}}}}}function searchText(that, listArr, listId){//文本框中输入的字符串var searchVal = $(that).val();var showList = [];if(showList.length== 0 && !$(that).val()){//showList为列表中和所输入的字符串匹配的项showList = listArr;}if(searchVal){//将和所输入的字符串匹配的项存入showList//将匹配项显示,不匹配项隐藏$.each(listArr, function(index, item){if(item.eleName.indexOf(searchVal) != -1) {$('#' + item.eleId).css('display', 'block');showList.push(item);}else {$('#' + item.eleId).css('display', 'none');}})}else{showList = listArr;$.each(listArr, function(index, item){$('#' + item.eleId).css('display', 'block');})$(that).siblings('.selectList').find('#nullcon').hide();}if(showList.length== 0 && $(that).val()){$('#' + listId).height(50);$(that).siblings('.selectList').find('#nullcon').html('没有找到"'+$(that).val()+'"的内容').show();}console.log('showList', showList);return showList;}
</script>

转载于:https://www.cnblogs.com/janice-jia/p/9708815.html

超好用的input模糊搜索 jq模糊搜索,相关推荐

  1. Android 模糊搜索

    在Android移动端开发过程中,列表展示是咱们经常使用的一种展现方式.这个时候就可能有如下情况出现了,比如说现在咱们列表里面的项还是相当可观的,而且咱们只想快速的找到咱们需要的哪些项.例如手机联系人 ...

  2. 使用QE中的ld1.x制作超软赝势

    使用QE中的ld1.x制作超软赝势 输入文件 input rlderiv 计算对数导数的半径 config 电子结构.当"lsd"=1时,向上自旋和向下自旋状态可能出现两次,各自占 ...

  3. 移动端常见的一些兼容性问题

    1.安卓浏览器看背景图片,有些设备会模糊. 是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页,这样字会非常小,所以苹果当初就把iPhone 4的960*640分辨率 ...

  4. 【转】HTML5移动端最新兼容问题解决方案

    1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显 ...

  5. 微信公众号开发,移动端开发遇到的问题及其他技巧

    1.防止手机中网页放大和缩小,这点是最基本的,最为手机网站开发者来说应该都知道的,就是设置meta中的viewport 使用viewport使页面禁止缩放. 通常把user-scalable设置为0来 ...

  6. 移动端开发注意的事宜

    1.什么是移动端开发?以及开发的工具?有哪些方式? 移动开发也称为手机开发,或叫做移动互联网开发.是指以手机.PDA.UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的 ...

  7. jQuery实现简单分页

    现在项目分页好多都是直接用插件,今天发现其实自己写页不难.主要是以前老师讲的时候没听.(对不起老何!哈哈) 今天发布一个前端超简单的分页效果,纯jQ!废话不多说,上代码.要是你们需要,直接复制过去就可 ...

  8. PostgreSQL开发规范

    PostgreSQL开发规范 0x00 背景 0x01 命名规范 0x02 设计规范 0x03 索引规范 0x04 查询规范 0x05 管理规范 0x00 背景 没有规矩,不成方圆. PostgreS ...

  9. ios和android 浏览器适配问题总结

    相关知识点 移动端. 适配(兼容). ios点击事件300ms延迟. 点击穿透. 定位失效...... 问题&解决方案 手机浏览器独有的三个事件? onTouchmove,ontouchend ...

最新文章

  1. C++ 函数参数传递:传值,传指针,传引用
  2. [cb]NGUI组件基类之 UIWidget
  3. 判断浏览器类型及版本
  4. 【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
  5. springbboot加密打包_Spring Boot 配置 Security 密码加密
  6. 卢伟冰再曝Redmi Note 8:拍照、续航、屏占比、手感都更好
  7. ajax教程 异步刷新验证,Ajax实现异步刷新验证用户名是否已存在的具体方法
  8. 多媒体会议系统中的延迟
  9. 分分钟搞定 OpenV2X 开发环境
  10. MATLAB中四阶单位矩阵,matlab-线性代数 创建 N阶数量矩阵 N阶单位矩阵 对角矩阵 范德蒙矩阵 等差数列......
  11. 42. 注入篇——Havij、Pangolin使用
  12. Windows下Python安装并为pip配置阿里镜像
  13. python+xlrd做数字组合
  14. Win10系统通用串行总线(USB驱动损坏)的一种解决方法
  15. 常见的几种云管理平台
  16. 二维图形几何变换(计算机图形学)
  17. CISCO 3750 BUG
  18. 白社会正式开放注册 搜狐全面进军SNS市场
  19. 姚期智的清华十年(转载)
  20. 如何获得一个RAC Oracle数据库(从Oracle Container Registry) - 仿GitHub版

热门文章

  1. iPhone放大模式详解
  2. iptables中关于limit和limit-burst的解释
  3. NodeJs回调操作Promise化
  4. CentOS 更改Apache默认网站目录
  5. poj 3090 amp;amp; poj 2478(法雷级数,欧拉函数)
  6. MyEclipse+Tomcat web项目改名
  7. JAVA中的方法和构造方法有什么区别
  8. JAVA传入一个字符串,返回一个字符串中的大写字母
  9. Android studio 查找文件在电脑路径位置
  10. Chrome网络库的请求处理