`
xangqun
  • 浏览: 82584 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

jquery 实现过滤器(转载)

阅读更多

本文转载自:http://abruzzi.iteye.com/blog/519288

公司产品的一个新功能中涉及到一个过滤器:通过关键字快速的对结果集进行过滤,获得比较少的结果,方便用户选择。在网上找了找,有很多jQuery的插件,要么就是auto complete, 要么就是没有高亮的quick search,都不是很适合我们的场景,于是就自己实现了一个。用起来倒是还过得去,呵呵。

 

效果图:

对一个List进行过滤(假设List很长,隐藏掉其他无关的项,例子里是美国的50个州,只搜索有"na"字符串的):



 对一个table进行过滤(table的其他列不隐藏,只是高亮搜索到的):



 当然,可以将其结合在一起,那样一个页面中可以有多个过滤器:



其实,实现起来,代码量很小,这里先大概说一下原理:

将搜索框中的字符收集起来,作为关键字,当搜索框中的内容发生变化时(keyup事件 ),做一次过滤,将匹配的内容高亮起来(如果有上一次的内容,需要做一个清空处理,比如第一次键入的是a,第二次键入的是al,则在al键入之后要将之前高亮的a恢复正常)。

 

主要用到了javascript的正则表达式,还有就是jQuery的强大的选择器,下边看看具体代码(demo附后下载):

Js代码 复制代码
  1. /**  
  2.  * this is the do-filter function, used to filter the contents  
  3.  *  
  4.  * @params contents contents is the container of all items which  
  5.  *         need to filter, it's a jQuery object.  
  6.  *  
  7.  * @params keyword keyword is a string, used to be the condition  
  8.  *         of the filter  
  9.  *  
  10.  * @params options options is a JSON object, may contains:  
  11.  *         {  
  12.  *          keep : true or false to detemine whether keep the container or not,  
  13.  *          reopts : regular expression options, may be "g", "i", or "gi"   
  14.  *         }  
  15.  *  
  16.  */  
  17. function doFilter(contents, keyword, options){   
  18.     var filterOptions = jQuery.extend({   
  19.         keep : false,    
  20.         reopts : "gi",   
  21.         highlight : "#caff70"  
  22.     }, options);   
  23.        
  24.     if(!filterOptions.keep){contents.hide();}   
  25.     contents.each(function(){   
  26.         var text = $(this).text();   
  27.         var pattern = new RegExp(keyword, filterOptions.reopts);   
  28.         if(pattern.test(text)){   
  29.             var item = text.replace(pattern, function(t){   
  30.                 return "<span style=\"background:"+filterOptions.highlight+"\">"+t+"</span>";   
  31.             });            
  32.             $(this).html(item).show();   
  33.         }else{//clear search result of last   
  34.             $(this).find("span").each(function(){   
  35.                 $(this).replaceWith($(this).text());   
  36.             })   
  37.         }   
  38.     });   
  39. }  
/**
 * this is the do-filter function, used to filter the contents
 *
 * @params contents contents is the container of all items which
 *         need to filter, it's a jQuery object.
 *
 * @params keyword keyword is a string, used to be the condition
 *         of the filter
 *
 * @params options options is a JSON object, may contains:
 *         {
 *          keep : true or false to detemine whether keep the container or not,
 *          reopts : regular expression options, may be "g", "i", or "gi" 
 *         }
 *
 */
function doFilter(contents, keyword, options){
	var filterOptions = jQuery.extend({
		keep : false, 
		reopts : "gi",
		highlight : "#caff70"
	}, options);
	
	if(!filterOptions.keep){contents.hide();}
	contents.each(function(){
		var text = $(this).text();
		var pattern = new RegExp(keyword, filterOptions.reopts);
		if(pattern.test(text)){
			var item = text.replace(pattern, function(t){
				return "<span style=\"background:"+filterOptions.highlight+"\">"+t+"</span>";
			});			
			$(this).html(item).show();
		}else{//clear search result of last
			$(this).find("span").each(function(){
				$(this).replaceWith($(this).text());
			})
		}
	});
}

 

主要的选项可以定制,如过滤的规则(正则表达式的选项,全局? 忽略大小写?),高亮色彩的配置,以及是否保留源数据集的可视性。比如,List这种控件,一般是较长的时候进行一下搜索过滤,不需要保持源数据集,而table这种控件,则一般需要保持控件的结构,需要保持源数据集。

 

用法如下:

Js代码 复制代码
  1. var sb = $("#searchBox").val("").focus();   
  2.   
  3. var resultSet = $("div#contentPanel div.item");//used for restore   
  4. sb.keyup(function(){   
  5.     var str = $(this).val();   
  6.     doFilter(resultSet, str);   
  7. });  
	var sb = $("#searchBox").val("").focus();
	
	var resultSet = $("div#contentPanel div.item");//used for restore
	sb.keyup(function(){
		var str = $(this).val();
		doFilter(resultSet, str);
	});

首先,将用作填写关键字的input获取到,然后取得数据集的list,包装成jQuery对象,将doFilter绑定到input的keyup事件上即可。

 

好了,大概也说明白了,自己也加深一下记忆,这一向在实现一套基于web的控件,基本的模型已经差不多了,过两天整理整理分享一下,呵呵。

 

 

按照bluemeteor的建议,将highlight参数改成更为通用的css class,用户同时可以将字体信息等传入作为highlight。总体效果如前文中的截图。代码更新如下:

Js代码 复制代码
  1. function doFilter(contents, keyword, options){   
  2.     var filterOptions = jQuery.extend({   
  3.         keep : false,    
  4.         reopts : "gi",   
  5.         highlight : "highlight"  
  6.     }, options);   
  7.        
  8.     if(!filterOptions.keep){contents.hide();}   
  9.     contents.each(function(){   
  10.         var text = $(this).text();   
  11.         var pattern = new RegExp(keyword, filterOptions.reopts);   
  12.         if(pattern.test(text)){   
  13.             var item = text.replace(pattern, function(t){   
  14.                 return "<span class=\""+filterOptions.highlight+"\">"+t+"</span>";   
  15.             });            
  16.             $(this).html(item).show();   
  17.         }else{//clear search result of last   
  18.             $(this).find("span."+filterOptions.highlight).each(function(){   
  19.                 $(this).replaceWith($(this).text());   
  20.             })   
  21.         }   
  22.     });   
  23. }  
分享到:
评论

相关推荐

    jQuery Ajax过滤器

    **jQuery Ajax过滤器详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于页面异步更新,提供更流畅的用户体验。jQuery库简化了Ajax操作,它内置了一系列强大的Ajax方法,其中包括Ajax...

    JQuery表单过滤器

    简单的JQuery表单过滤器演示,对初学者应该有帮组!

    jQuery超实用内容过滤器插件

    **jQuery内容过滤器插件详解** 在Web开发中,用户界面的交互性和用户体验至关重要。jQuery作为一款强大的JavaScript库,提供了丰富的API和插件,帮助开发者实现各种动态效果和功能。"jQuery超实用内容过滤器插件...

    jQuery过滤器图片浏览.rar_average91i_jQuery过滤器图片浏览

    在本项目中,"jQuery过滤器图片浏览.rar_average91i_jQuery过滤器图片浏览" 提供了一个使用jQuery实现的图片浏览和过滤效果。这个功能主要用于网页中的图像展示,允许用户根据特定条件筛选和切换图片,提升用户体验...

    jQuery过滤器插件fastLiveFilter.zip

    **jQuery过滤器插件fastLiveFilter详解** 在前端开发中,数据过滤是一个常见的需求,用于在用户输入时实时筛选和展示列表中的匹配项。jQuery快速过滤器插件fastLiveFilter正是为了解决这一问题而设计的。这个轻量级...

    jquery基本过滤选择器

    jquery基本过滤选择器举例、代码、html、可直接运行、学习jquery入门篇

    前端+jQuery+实现烟花特效

    前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+...

    jQuery图片筛选过滤器插件.zip

    《jQuery图片筛选过滤器插件详解》 在Web开发领域,jQuery库因其强大的功能和易用性而备受青睐。在创建交互式网站时,图片筛选和过滤是常见且重要的功能,尤其是在展示大量图片的场景下。本文将深入探讨一款名为...

    jQuery过滤器图片浏览

    在"jQuery过滤器图片浏览"项目中,我们关注的是如何利用jQuery来实现图片的筛选和展示功能,使用户能够更方便地浏览和管理大量的图片资源。 在jQuery中,过滤器是一种强大的工具,可以用来选取满足特定条件的DOM...

    jQuery实现的搜索列表过滤

    本主题聚焦于"jQuery实现的搜索列表过滤",这是一种常见且实用的功能,尤其适用于数据展示和用户交互丰富的Web应用。 首先,我们要理解搜索列表过滤的基本原理。在网页中,当用户在搜索框输入关键词时,页面上的...

    jQuery带过滤功能列表分类筛选插件代码

    本教程将深入讲解基于jQuery实现的带过滤功能的列表分类筛选插件,帮助开发者实现高效的数据展示和用户交互。** **一、jQuery基础知识** 在深入讨论jQuery列表筛选插件之前,我们需要了解jQuery的基本用法。jQuery...

    Jquery即时页面刷新过滤器示例

    本示例“Jquery即时页面刷新过滤器”旨在展示如何利用jQuery实现在表格中进行实时搜索过滤,提高用户体验。这个功能常见于数据量较大,需要用户快速查找特定信息的场景。 首先,我们需要理解jQuery的选择器。选择器...

    jQuery实现轮播图及其原理详解

    本文实例为大家分享了jQuery实现轮播图及其原理的具体代码,供大家参考,具体内容如下 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8" name="viewport" content="width=device-width,...

    Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮

    Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用...

    jquery分类图片过滤器插件代码

    【jQuery 分类图片过滤器插件】是一种基于JavaScript库jQuery实现的动态图片筛选工具,它允许用户根据不同的分类条件快速浏览和筛选图片。这个插件主要用于提升网页中展示大量图片时的用户体验,使得用户能够方便地...

    jquery实现table拖拽列效果

    用jquery实现table拖拽列功能,可动态改变表格列宽度,并且实现table表格100%的问题,如果列缩小,则自动拉伸最后一列以实现table100%的效果,如果拉伸长度比原长度大,则显示x滚动条。

    jquery多条件过滤

    在本文中,我们将深入探讨如何使用jQuery实现一个类似于京东商品的多条件过滤功能。这个功能允许用户根据多个筛选条件快速定位到他们感兴趣的商品,提高用户体验并优化网站的交互设计。 首先,我们需要理解jQuery的...

    jQuery自动过滤单词插件.rar_jQuery自动过滤单词插件

    在实际项目中,"jQuery自动过滤单词插件"可以与其他jQuery库或功能结合使用,如表单验证插件、富文本编辑器等,以实现更复杂的内容管理需求。同时,考虑到性能问题,插件可能还采用了节流或防抖策略,以避免在大量...

    jquery输入字符过滤

    在这个场景下,“`jquery输入字符过滤`”是指利用jQuery来实现对用户输入的字符进行过滤,以防止非法或危险的字符进入系统,确保数据的纯洁性和系统的安全性。 一、jQuery字符过滤基本概念 字符过滤主要涉及两个...

    Jquery实现数据左右移动Demo

    1. jQuery的选择器和DOM操作 2. 使用`.animate()`进行平滑动画 3. 数组操作以实现数据的移动 4. 事件监听和响应用户交互 5. HTML和CSS的配合使用以呈现动态效果 这个Demo为学习和实践jQuery提供了一个很好的实例,...

Global site tag (gtag.js) - Google Analytics