//构造函数写法
;(function($,window,document,undefined){//注意这里的分号必须加
//插件的全部代码
var FazzSearch = function (ele, options) {
// if(options =='undefinded' || options == Object )
this.$element = ele,
this.defaults = {
//这里的this是JQuery对象
triggerID: this.$element.attr("id"),
fazzArr : [],
searchArr: [],
// methods: methods,
listWidth: '100%',
$this: ele,//提示当前对象的dom节点名称,这里的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。
listDom: null,
selector: this.$element.attr("id")+'_item',
isPos: false,
isNeedBlurSetTime: false,
itemCallback: function () { },
callback: function () { },
},
this.opts = $.extend({}, this.defaults, options);
}
FazzSearch.prototype = {
//初始化
init : function(){
var _this = this;
return this.$element.each(function(){ //遍历匹配的元素及插件实例的所有元素,此处的this表示为jquery对象,而不是dom对象
$(this).css({ })
$(this).bind('input propertychange', function() {
_this.initData();
});
if(this.isNeedBlurSetTime){
$(this).on('blur',function(e){
var self = $(this);
var setT = setTimeout(function(){
self.siblings('.fazzSearchList').html('').hide();
console.log('失交');
clearTimeout(setT)
},300)
})
}
})
},
initData : function(){
this.opts.listDom = this.opts.listDom ? this.opts.listDom : this.$element.next('.fazzSearchList');//如果出现兄弟节点有两个
this.opts.fazzArr = [];
this.initListDomStyle();
this.adEventInputChange();
},
initListDomStyle : function(){
var listDom = this.opts.listDom;
listDom.html('');
listDom.css({'width':this.$element.outerWidth()},{'padding':'10px 0 10px 6px'});
if(("ontouchstart" in window)){
listDom.css('width',this.$element.parent().outerWidth());
if(listDom.hasClass('liPc')){
listDom.removeClass('liPc');
}
listDom.addClass('liMoblie');
}else{
if(listDom.hasClass('liMoblie')){
listDom.removeClass('liMoblie')
}
listDom.addClass('liPc');
}
console.log(this.$element)
if(this.opts.isPos){
listDom.parent().css('position','relative');
listDom.addClass('liPcPosi');
listDom.css('top',this.$element.outerHeight())
}
},
//添加子节点
addChild : function(item,selector){
return "<li class='" + selector + "' data-val='" + item + "'>"+item+"</li>";
},
//如果输入值为空,清除缓存和数组dom
closeData : function(){
this.opts.fazzArr = [];
this.opts.listDom.html('').hide();
},
//监听input输入框值改变
adEventInputChange : function(){
var fazzSearchValue = this.$element.val();//input输入框值改变
console.log('fazzSearchValue->',fazzSearchValue)
if(fazzSearchValue==''){
this.closeData();
return;
}
this.dealWithData(fazzSearchValue);
},
//处理子节点绑定点击事件
listItemBindClick : function(){
$('body').on('click',opts.selector,function(){ })
},
//如果存在模糊数组
hasData : function(item){
var listDom = this.opts.listDom;
listDom.show();
listDom.append(this.addChild(item));
this.opts.fazzArr.push(item);
},
//处理模糊数组匹配和子节点添加
dealWithData : function(fazzSearchValue){
var searchArr = this.opts.searchArr;
for (var i = 0; i < searchArr.length; i++) {
var result = searchArr[i].indexOf(fazzSearchValue);
if( result > -1 && this.opts.fazzArr.indexOf(searchArr[i])== -1){
this.hasData(searchArr[i]);
}
}
} }
//在插件中使用Beautifier对象
$.fn.fazzSearch = function(options){
//创建Beautifier的实体
//this为jQuery选中的元素集合
var fazzSearch = new FazzSearch(this,options);
//调用其beautify方法
return fazzSearch.init();
//以后在此处调用新的方法即可,格式为:
//return beautifier.方法名()
}
})(jQuery,window,document);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link rel="stylesheet" type="text/css" href="./css/fazzSearchBox.css"/>
<style type="text/css">
*{margin: 0;padding: 0;}
</style>
<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/fazzExtend.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<input type="text" name="" id="fazzSearch" value="" class="fazzSearch"/>
<ul class="fazzSearchList fazzSearchList1"></ul> <input type="text" name="" id="fazzSearch1" value="" class="fazzSearch"/>
<ul class="fazzSearchList fazzSearchList2"></ul>
<script type="text/javascript">
// var arr=[{ id:1,val:"sss"},{ id:2,val:"bb"},{ id:11,val:"advvasc"},{ id:3,val:"a"},{ id:4,val:"c"},{ id:5,val:"d"},{ id:6,val:"x"},{ id:7,val:"5"},{ id:8,val:"4"}]
$(function(){
var arr = ['333','1111','aaa','bbb','c','b','z'];
$('#fazzSearch').fazzSearch({
searchArr:arr,
listDom: $('.fazzSearchList1'),
isPos:true
})
$('#fazzSearch1').fazzSearch({
searchArr: arr,
listDom: $('.fazzSearchList2'),
})
});
</script>
</body>
</html>
.fazzSearch{outline: none;border: 1px solid #ccc;width: 80px;height: 40px;line-height: 40px;text-indent: 5px;}
.fazzSearchList{display: block;display: none;width: 100%;max-height: 120px;overflow-y: auto;border: 1px solid #F6F7F8;background-color: #ffffff;}
.fazzSearchList li{cursor: pointer;height: 30px;line-height: 30px;width: 97%;text-align: left;color: #222;border-bottom: 1px solid #CCCCCC;white-space: nowrap;text-overflow: ellipsis;overflow: hidden; word-break: break-all;}
.fazzSearchNoData{padding: 0;color: red;}
.liPcPosi{position: absolute;top: 0;left: 0;}
.liPc li {color: #999;border-bottom: 1px solid #f1f1f1;}
.liPc li:last-child{border-bottom: 0;}
.liMoblie li {color: #999;border-bottom: 1px solid #f1f1f1;}
.liMoblie li:last-child{border-bottom: 0;}
.special{position: absolute;top: 0;left: 0;z-index: 100;}

JQ模糊查询插件的更多相关文章

  1. K3 WISE 开发插件《SQL语句WHERE查询-范围查询/模糊查询》

    0.存储过程开头变量定义 @FBeginDate varchar(10), --单据起始日期 @FEndDate varchar(10), --单据截止日期. @FItemID varchar(50) ...

  2. 十三、K3 WISE 开发插件《SQL语句WHERE查询-范围查询/模糊查询》

    0.存储过程开头变量定义 ), --单据起始日期 ), --单据截止日期. ), ), ), ), ) @FType varchar(50),  --单据类型@FBillNo varchar(50), ...

  3. js前端实现模糊查询

    对于模糊查询,一般都是传关键字给后端,由后端来做.但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验.废话不多说,直接上代码. //字符串方法indexOfvar len ...

  4. 编写简易的JS输入框模糊查询匹配(附有源码和demo)

    前言:JS输入框模糊匹配插件以前在工作写过一个类似的 所以这次写轻松很多,这次写优化了几个方面: 1. 添加动态加载css文件 不需要引入css css全部在JS动态生成. 2. 不需要额外的标签 只 ...

  5. Bootstrap-table学习笔记(二)——前后端分页模糊查询

    在使用过程中,一边看文档一边做,遇到了一些困难的地方,在此记录一下,顺便做个总结: 1,前端分页 2,后端分页 3,模糊查询 前端分页相当简单,在我添加了2w条测试数据的时候打开的很流畅,没有卡顿. ...

  6. 表单模糊查询的三种简单方式(springboot-h2-mybatis)

    前几天运营提到说后台管理系统有几个地方想要模糊查询..   想了下是简单的,就是要注意以前方法的被调用情况,进行增量改动,以免牵一发而动全身.整理一波记录下(本次案例是按名字模糊查询学生信息). 三种 ...

  7. js的模糊查询

    在项目中会用到模糊查询,之前在首页是用的element的tree显示的目录,会有用到搜索,但tree里边会有自带的模糊查询,用filter-node-method方法使用 但上次的项目中 又涉及到不试 ...

  8. MyBatis Plus之like模糊查询中包含有特殊字符(_、\、%)

    传统的解决思路:自定义一个拦截器,当有模糊查询时,模糊查询的关键字中包含有上述特殊字符时,在该特殊字符前添加\进行转义处理. 新的解决思路:将like 替换为 MySQL内置函数locate函数 参考 ...

  9. select2 智能补全模糊查询select2的下拉选择框使用

    我们在上篇文章中已经在SpringMVC基础框架的基础上应用了BootStrap的后台框架,在此基础上记录select2的使用. 应用bootstrap模板 基础项目源码下载地址为: SpringMV ...

  10. MyBatis Plus 实现多表分页模糊查询

    项目中使用springboot+mybatis-plus来实现. 但是之前处理的时候都是一个功能,比如分页查询,条件查询,模糊查询. 这次将这个几个功能合起来就有点头疼,写下这边博客来记录自己碰到的问 ...

随机推荐

  1. 什么是「滑动窗口算法」(sliding window algorithm),有哪些应用场景?

    今天是算法数据结构专题的第2篇文章,我们一起来学习一下「滑动窗口算法」. 前言 最近刷到leetCode里面的一道算法题,里面有涉及到Sliding windowing算法,因此写一篇文章稍微总结一下 ...

  2. Codeforces Round #650 (Div. 3) F1经典离散化DP

    比赛链接:Here 1367A. Short Substrings Description 一个字符串 abac,然后把所有长度为2的子串加起来变成新串,abbaac,由 ab ba ac组成.现在给 ...

  3. vue子页面给App.vue传值

    前端工程现在变成了单页面富文本的模式,整体布局定下来后,跳转只在<router-view>中展示,外层的布局不容易改变.最近发现有如下这个方法可以直接传值给App.vue,经过实践确实可以 ...

  4. freeswitch的mod_xml_cdr模块

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在语音呼叫的过程中,话单是重要的计价和结算依据,话单的产生需要稳定可靠,可回溯. fs中的mod_xml_cdr模块提供了基本话单功 ...

  5. python进阶(2)--列表

    文档目录:一.访问列表元素二.更新列表三.删除元素四.列表排序五.len()与range()/list()六.创建一个包含1-10平方的列表七.复制列表两种方式八.元组:不可变的列表 -------- ...

  6. Python数据可视化-地图可视化

    Python数据可视化-地图可视化 一.基础地图使用 基础地图演示 二.疫情地图-国内疫情地图 具体代码如下 """ 演示全国疫情可视化地图开发 "" ...

  7. java基础-方法method-day05

    1. 语法 [修饰符] 返回值类型 方法名(形参列表){ 逻辑主体 } public class TestMethod01{ public static int add(int num1, int n ...

  8. 每天学五分钟 Liunx 0111 | 服务篇:进程权限

    程序存储在硬盘中,需要执行的时候被加载到内存里,内存中的程序以进程的方式运行,进程会根据程序的内容去做读写文件,执行指令等操作. 文件/指令等都有自己的执行权限,符合权限的才能被执行.相应的,进程也需 ...

  9. AHB 局限性

    AHB's problem SoC bus 架构 AXI is used more and more 频率200M使用AHB,频率再升高就使用AXI AHB的问题 AHB协议本身限制要求较高,比如co ...

  10. JMS微服务开发示例(八)双机热备

    双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上. 要实现这个,只需要设置 SingletonService = true. var mi ...