`

chiron.search 输入框模糊搜索插件

 
阅读更多

css:

.chiron-search-dropdown{
    padding-left: 0;
    background-color: white;
    list-style: none;
    padding:5px 0;
    font-size:14px;
    border-radius:4px;
    border:1px solid #ddd;
}
.chiron-search-dropdown-item a{
    text-decoration:none;
    display:block;
    padding:2px .4em;
    line-height:1.5;
    min-height:0;
    font-weight:400;
    color:#262626;
}
.chiron-search-dropdown-item a:hover,.chiron-search-dropdown-item a:focus{
    text-decoration:none;
    background: #f5f5f5;
    color:#262626;
}
.chiron-search-result-item{
    padding:2px 0;
    margin-right: 5px;
    display:inline-block;
}
.chiron-search-result-remove{
    color:#5596f2;
    font-size:12px;
    margin-left: 2px;
    cursor:pointer;
}

 

js:

/*@auther alfred.qiu*/

(function($){

var ChironSearch=function(element,options){
	  this.$trigger=$(element);
	  this.options=options;

	  this.init();
};

ChironSearch.DEFAULTS={
	  removeIcon:"glyphicon glyphicon-trash",
		zIndex:0,
	  method: 'get',
	  url: undefined,
	  ajax: undefined,
	  cache: true,
	  contentType: 'application/json',
	  dataType: 'json',
	  sideSearch:"client",// "client" or "server"
	  name:"searchText",
	  uploadForm:false,
	  data:[],
		queryParam:{},
	  selectedData:[],
		dealy:300,
		sortable:false,
		sortOrder:"asc",// "desc" or "asc"
	  formatResponse:function(res){
	  	  return res.data;
	  },
		formatSorter:function(value){
				return value;
		},
		sorter:function(a,b){
				return 1;
		},
	  formatDropdown:function(value){
	  	  return value;
	  },
		success:function(res){
			return true;
		},
		error:function(res){
			return true;
		}
};

ChironSearch.prototype.init=function(){
		this.initData();
	  this.bindSearchEvent();
	  this.initResult();
};

ChironSearch.prototype.initData=function(){
		if ( !$.isEmptyObject(this.options.selectedData) ){
				this.options.originSelected=$.extend([],this.options.selectedData,true);
		};

		if ( !$.isEmptyObject(this.options.data) ){
				this.originData=$.extend([],this.options.data,true);
		};

		if ( this.$trigger.attr("name") ){
				this.options.name=this.$trigger.attr("name");
				this.$trigger.removeAttr("name");
		};
};

ChironSearch.prototype.bindSearchEvent=function(){
	  var that=this;

	  this.$trigger.off("keyup").on("keyup",function(event){
			  var which=event.which,
				    isValiated=( which>=65 && which<=90) || (which>=48 && which<=57) || which==8 || which==13
					      || which==16 || which==32 || (which>=96 && which<=105 );

				if ( !isValiated ) return;

				if ( $(this).val()=="" ){
					  $(this).siblings(".chiron-search-dropdown").remove();
					  return;
				};

				that.options.value=that.$trigger.val();

				setTimeout(function(){
					  if ( that.options.sideSearch=="server" ){
						    that.initServer.call(that);
					  }else {
						    that.updateData.call(that);
					  };
				},that.options.dealy);
		});
};

ChironSearch.prototype.initServer=function(){
	  var that=this,
		    name,data={};

		data[this.options.name]=this.options.value;

		if ( $.isEmptyObject(this.options.queryParam) ){
				$.extend(data,this.options.queryParam);
		};

		var request={
		type: this.options.method,
	      url: this.options.url,
	      data: this.options.contentType==='application/json' && this.options.method==='post' ?
	          JSON.stringify(data):data,
	      cache: this.options.cache,
	      contentType: this.options.contentType,
	      dataType: this.options.dataType,
	      success: function (res) {
						that.options.success.call(this,res);
	      		that.$trigger.trigger("search-success",res);
	      		that.updateData(res);
	      },
	      error: function (res) {
						that.options.error.call(this,res);
	      		that.$trigger.trigger("search-error",res);
	    	}
    };

		$.ajax(request);
};

ChironSearch.prototype.updateData=function(res){
		var that=this;

		if ( this.options.sideSearch=="server" && res ){
				that.options.data=that.options.formatResponse(res);
		}else{
				var that=this,
						value=this.options.value,
						reg=new RegExp(value);

				this.options.data=$.extend([],this.originData,true);

				this.options.data=$.grep(this.options.data,function(item,index){
						if ( String(item.field).match(reg) || item.value.match(reg) ) return true;
						return false;
				});
		};

		$.each(this.options.data,function(index,item){
				if (item.html) return;
				item.html=item.value;
		});

		if ( this.options.sortable ){
				this.initSort();
		};

		this.initDropDown();
};

ChironSearch.prototype.initSort=function(){
		var that=this,
				order = this.options.sortOrder=='desc'?-1:1;

		this.options.data.sort(function(a,b){
				var aa=that.options.formatSorter(a.html),
						bb=that.options.formatSorter(b.html),
						sorter=that.options.sorter(aa,bb);

				if ( sorter!=undefined ){
            return order*sorter;
        };

        if ($.isNumeric(aa) && $.isNumeric(bb)) {
            aa = parseFloat(aa);
            bb = parseFloat(bb);
            if (aa < bb) {
                return order * -1;
            };
            return order;
        };

        if (aa === bb) {
            return 0;
        };

        if (typeof aa!=='string') {
            aa=aa.toString();
        };

        if (aa.localeCompare(bb)===-1) {
            return order*-1;
        };

        return order;
		});
};

ChironSearch.prototype.initDropDown=function(){
		var that=this,
				html=[];

		if ( this.$dropdown && this.$dropdown.length ){
				this.$dropdown.html("");
		}else{
				this.$trigger.after("<ul class='chiron-search-dropdown'></ul>");
		};

		this.$dropdown=this.$trigger.siblings(".chiron-search-dropdown");

		$.each(that.options.data,function(index,item){
				var dropdownItem=that.options.formatDropdown(item.html);
				html.push(
						"<li data-field='",
						item.field,
						"' data-value='",
						item.value,
					"' class='chiron-search-dropdown-item'><a>",
					dropdownItem,
					"</a></li>"
				);
		});

		html=html.join("");

		this.$dropdown.append(html);

		this.place();

		this.$trigger.siblings(".chiron-search-dropdown").off("click").on("click",".chiron-search-dropdown-item",function(){
				var field=$(this).data("field"),
						value=$(this).data("value");

				that.$trigger.val("");
				that.updateSelectedData.call(that,field,value);
				that.$dropdown.remove();
		});

		$(document).on("click",this.$trigger.parent(),function(event){
				that.$dropdown.remove();
		});
};

ChironSearch.prototype.place=function(){
		var top=this.$trigger.parent().top,
				width=this.$trigger.innerWidth(),
				zIndex=99,
				that=this;

		if (!this.options.zIndex) {
	      var index_highest = 0;
	      $('div').each(function () {
	      		var index_current=parseInt($(this).css('zIndex'), 10);
			      if ( index_current>index_highest ) {
			            index_highest=index_current;
			      };
	      });
	      this.options.zIndex=index_highest+10;
	  };

		this.$trigger.parent().css({position:"relative"});
		this.$dropdown.css({position:"absolute",top:top,"z-index":that.options.zIndex})
				.width(width);
};

ChironSearch.prototype.updateSelectedData=function(field,value){
		var that=this,
				isRepeated=false;

		$.each(this.options.selectedData,function(inde,item){
				if (item.field==field){
						isRepeated=true;
				};
		});

		if (!isRepeated){
				that.options.selectedData.push({field:field,value:value});
				that.initResult.call(that);
		};
};

ChironSearch.prototype.initResult=function(){
		var that=this,
				html=[],
				deleteIndex;

		if ( this.$result ){
				this.$result.html("");
		}else{
				this.$trigger.parent().append("<div class='chiron-search-result'></div>");
				setTimeout(function(){
						var width=that.$trigger.innerWidth();
						that.$trigger.siblings(".chiron-search-result").width(width);
				},300);
		};

		this.$result=this.$trigger.siblings(".chiron-search-result");

		$.each(this.options.selectedData,function(index,item){
				html.push(
						"<span data-field='",
						item.field,
						"' class='chiron-search-result-item'>",
						item.value,
						"<span class='chiron-search-result-remove ",
						that.options.removeIcon,
						"'></span></span>"
				);
		});

		html=html.join("");

		this.$result.append(html);

		if ( that.options.uploadForm ){
				that.uploadForm();
		};

		$(".chiron-search-result-remove").off("click").on("click",function(){
				var field=$(this).parent().data("field");

				$.each(that.options.selectedData,function(index,item){
						if (item.field==field){
								deleteIndex=index;
								return;
						};
				});
				that.options.selectedData.splice(deleteIndex,1);
				$(this).parent().remove();
		});
};

ChironSearch.prototype.uploadForm=function(){
		var that=this,
				html,$input,fields=[];

		html="<input type='hidden' name='"+this.options.name+"'>";
		this.$trigger.parent().append(html);
		$input=this.$trigger.siblings("[name='"+this.options.name+"']");

		$.each(this.options.selectedData,function(index,item){
				fields.push(item.field);
		});
		fields=fields.join(",");

		$input.val(fields);
};

ChironSearch.prototype.getSelectedData=function(){
		return this.options.selectedData;
};

ChironSearch.prototype.reset=function(){
		if ( this.options.originSelected ){
				this.options.selectedData=$.extend([],this.options.originSelected);
				this.destroy();
				this.initResult();
		};
};

ChironSearch.prototype.destroy=function(){
		this.$trigger.siblings(".chiron-search-result").remove();
		this.$trigger.siblings("[name='"+this.options.name+"']").remove();
		delete this.$result;
		return this.$trigger;
};

var allowedMethods=["getSelectedData","reset","destroy"];

$.prototype.chironSearch=function(option){
		var value,
				args=Array.prototype.slice.call(arguments, 1),
				data=$(this).data("chiron-search"),
				that=this,
				options=$.extend({},ChironSearch.DEFAULTS,$(this).data(),typeof option==='object' && option);

		if ( typeof option=="string" ){
				if ( $.inArray(option,allowedMethods)<0 ) {
	      		throw new Error("Unknown method: "+option);
	    	};

		    if ( !data ){
		      	return;
		    };

	    	value=data[option].apply(data, args);

		    if (option==='destroy') {
		      	$(this).removeData('chiron-search');
		    };
		};

		if ( !data ){
				$(this).data('chiron-search', (data=new ChironSearch(this, options)));
		};

		return typeof value === 'undefined' ? this : value;
};

})(jQuery)

 

分享到:
评论

相关推荐

    小米MIX2一键刷入recovery 需要先解bl锁 20180127

    4. **刷入Recovery**:通过Fastboot模式,执行`fastboot flash recovery chiron.img`命令,将chiron.img这个Recovery镜像写入手机特定分区。 5. **重启设备**:刷入完成后,使用`fastboot reboot`命令重启设备,...

    chiron-sans-hk:昭源黑体

    【标题】:“chiron-sans-hk:昭源黑体”是开源字体项目,专注于提供一种高质量的中文黑体字体,适用于多种设计和文本显示场景。这个标题表明我们正在讨论的是一款名为“昭源黑体”的字体家族,其设计灵感可能来源于...

    Bugatti Chiron HD Wallpapers New Tab-crx插件

    我们向您介绍我们的新布加迪Chiron扩展,我们希望它对这款非常受欢迎的汽车的所有粉丝来说都是完美的。 它带有Chiron的随机高质量墙纸。 只要您打开新的标签页,壁纸就会打开。 此外,我们的扩展程序为您提供了多种...

    chiron-sans-hk-pro:Chiron没有HK +来源没有Pro = Chiron没有HK Pro

    昭源黑体Pro(Chiron Sans HK Pro) 概述 TL; DR:Chiron Sans HK + Source Sans 3 = Chiron Sans HK Pro Chiron Sans HK Pro (昭源黑体Pro)是无衬线CJK字体。 在,它整合了发现的整个字符集。 Chiron Sans HK是...

    Chiron-开源

    Chiron的另一个亮点是它的集合搜索框架和基于有限状态机(Finite State Machine, FSM)的控制器。集合搜索框架提供了对数据的强大查询能力,允许开发者高效地定位和操作数据。另一方面,有限状态机控制器则为复杂的...

    凯龙

    设置chiron.docker.local的HOSTS文件条目,使其指向正在运行的docker主机(即127.0.0.1) 从PS Shell运行./build.ps1 找到您的docker0 IP地址并使用该IP更新docker-compose.yml traefik 使用docker compose启动...

    CHIRON:两个循环中ChaPTER数值结果的软件包

    本文档介绍了C HIRON软件包,其中包括两个库,chiron本身和jbnumlib。 chiron是一组可用于手性摄动理论(ChPT)的两环数值结果的例程。 它包括用于所需的一环和二环积分的程序,以及处理ChPT参数的例程。 当前版本...

    Chiron rowing monitor for Linux-开源

    《Chiron:Linux下的开源划船机监测工具》 Chiron是一款专为Linux用户设计的开源软件,旨在帮助用户监控和分析划船机的性能。它不仅提供了实时的数据反馈,如速度、冲程功率等关键指标,而且还能够展示每个冲程的力...

    android_device_xiaomi_chiron

    小米MIX 2(代号“Chiron” )是小米的高端智能手机。 它于 2017 年 10 月宣布。发布日期是 2017 年 12 月。 设备规格 基本的 规格表 中央处理器 四核 2.45 GHz Kryo 280 和四核 1.9 GHz Kryo 280 芯片组 高通 MSM...

    chiron:凯龙(Chiron)是英雄和女英雄的人为老师

    凯龙凯龙(Chiron)是英雄和女英雄的老师。 这是一个基于PHP的多用户,多源,多输出,多cms新闻阅读器和跨站点网络工具。 目前,它为Wordpress提供了一个基于代码的所有功能集成。 希望Drupal会很快跟进。参考半人马...

    chiron calendar-开源

    "Chiron Calendar" 是一个开源的Web日历应用,它以简洁的设计和高效的功能为特点,使得用户可以在同一个页面上方便地管理多个人员或项目的计划。这个应用是基于PHP编程语言和MySQL数据库系统构建的,这使得它具有...

    d-Chiron:d-Chiron是面向数据流的科学工作流管理系统,该系统在分布式数据库管理系统中管理数据来源,域数据和执行数据。 d-Chiron是Renan Souza硕士论文的一部分,由Marta Mattoso在巴西UFRJ(里约热内卢联邦大学)COPPE计算机科学计划的指导下进行开发

    d-Chiron存储库 欢迎使用d-Chiron存储库。 d-Chiron是一个科学的工作流管理系统,具有并行功能,可管理复杂的数据密集型工作流,​​并在运行时记录数据出处,以实现用户指导和在环操作。 d-Chiron利用MySQL Cluster...

    WSNFuse-开源

    WSNFuse为无线传感器网络提供了一个抽象层,允许通过不同的访问技术(例如文件系统,JMS,RMI,Smart-Spaces等)公开一个或多个WSN,其基于插件的体系结构允许用户进行开发和开发。采用自己的插件并配置WSN保险丝,...

    ChironEnviron:CHIRON 环境页面的存储库

    CHIRON 环境页面建立在框架之上,时间序列图是使用创建的,它通过 PHP 连接到 MySQL 数据库。 有18个传感器监测仪器的环境。 Shell 脚本用于收集此数据并将其从智利同步。 每天上午 11 点 10 分,LaunchDaemon 脚本...

    机器学习隐私的安全隐患.pdf

    为了在享受机器学习服务的同时保护个人隐私,研究人员提出了一种名为Chiron的系统模型。 Chiron的设计目标是提供一种“机器学习即服务”(MLaaS)方式,使得用户能够在不泄露训练数据的前提下使用机器学习服务。它...

    RR-N-v5.8.10-20190128-mondrianwifi-Unofficial.zip

    标题中的"RR-N-v5.8.10-20190128-mondrianwifi-Unofficial.zip"表明这是一个基于安卓系统的第三方ROM(Recovery Room)包,由用户或社区开发,非官方版本。"RR"可能代表Resurrection Remix,一个知名的Android自定义...

    奢侈品LOGO名字大全.doc

    31. Bugatti 布加迪:布加迪是法国超跑品牌,以Chiron和Veyron等极致性能车型著称。 32. Patek Philippe 百达翡丽:百达翡丽是瑞士顶级手表制造商,以其复杂机械表和Nautilus系列受到收藏家的青睐。 33. Bvlgari ...

    布加迪跑车高清壁纸新标签「Bugatti Sports Cars HD Wallpapers for New Tab」-crx插件

    布加迪Chiron,布加迪威龙16.4超级体育,EB 110,大众布加迪豪华车高清壁纸新标签的主题。 BUGATTI NEW TAB-由FreeAddon提供安装我的Bugatti New Tab主题,每次您打开一个新选项卡时,就可以欣赏Bugatti的各种高清...

    J.P. 摩根-美股-制药行业-2020美国制药业HC会议手册-2020.1-28页.pdf

    其中,Chiron和迈蓝被列为较受欢迎的投资选择,而Endo、Amneal和Mallinckrodt等被视为不太理想的投资目标。 5. **动物健康领域**:动物健康子板块被视作行业中基本面最吸引人且估值最高的部分,但尽管如此,报告仍...

    下支臂零件机械加工工艺过程卡片及工序卡.doc

    加工过程主要分为九个工序,使用的是Chiron FZ 12KW精密机床,配备有专用夹具、不同规格的刀具(如端铣刀、麻花钻、铰刀等)以及游标卡尺进行测量: 1. 粗铣φ24×4 下端面:首先去除毛坯表面多余材料,初步形成下...

Global site tag (gtag.js) - Google Analytics