`

[Ext插件]PinyinFilter:使用拼音首字母对数据进行过滤

    博客分类:
  • Ext
阅读更多
这个插件的目的在于提高用户对于数据的选择效率。经常录入数据的人肯定能明白,在一长串列表中选择你想要记录是一件很费眼神的事;记得当初玩开心网可以按拼音首字母找到自己的好友,当时就觉得很是方便。如果您想提高用户对您软件的评价,请您考虑这个插件。


实现原理:重写了Store中返回过滤函数的方法,使其中需要过滤的汉字转换为其拼音首字母数组(因为有多音字,数组内每一项对应一种拼音的可能性),遍历数组每一项与当前输入项生成的前端匹配正则表达式进行比对,有一个满足就返回true,都不满足返回false

附件有示例
/**
 * 修改组件内部Store的createFilterFn方法,使其按照拼音首字母进行过滤
 *
 * 1.0.1修改:
 * 修复了多音字筛选不到的bug
 *
 * 1.0.2修改:
 * 为store添加了一个拼音的缓存
 * 
 * @author chemzqm@gmail.com
 * @version 1.0.2
 * @createTime 2010-04-18 23:12:31
 */
Ext.ns("Ext.ux");

Ext.ux.PinyinFilter=function(){
    //主要方法,由字符串生成拼音首字母
    function makePy(str){
	if(typeof(str) != "string"){
		return str;
	}
	var arrResult = new Array();
	for(var i=0,len=str.length;i<len;i++){
		var ch = str.charAt(i);
		arrResult.push(checkCh(ch));
	}
	var resarr = mkRslt(arrResult);
	return resarr;
    }
    
    function checkCh(ch){
        var uni = ch.charCodeAt(0);
        if(uni > 40869 || uni < 19968)
            return ch; //dealWithOthers(ch);
        return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)));
    }
    
    function mkRslt(arr){
        var arrRslt = [""];
        for(var i=0,len=arr.length;i<len;i++){
            var str = arr[i];
            var strlen = str.length;
            if(strlen == 1){
                for(var k=0;k<arrRslt.length;k++){
                    arrRslt[k] += str;
                }
            }else{
                var tmpArr = arrRslt.slice(0);
                arrRslt = [];
                for(k=0;k<strlen;k++){
                    var tmp = tmpArr.slice(0);
                    for(var j=0;j<tmp.length;j++){
                        tmp[j] += str.charAt(k);
                    }
                    arrRslt = arrRslt.concat(tmp);
                }
            }
        }
        return arrRslt;
    }
    
    var strChineseFirstPY =  【太长,此处省略】
    var oMultiDiff=【太长,此处省略】
    //重写生成过滤方法的方法
    function createFilterFn(property, value, anyMatch, caseSensitive){
        if(Ext.isEmpty(value, false)){
            return false;
        }
        value = this.data.createValueMatcher(value, anyMatch, false);
        return function(r){
	    var os = r.data[property],arr;
	    if(this.pyCache[os]){
		arr = this.pyCache[os];
	    }
	    else{		
		arr = makePy(os);
		this.pyCache[os] = arr;
	    }	    
	    for(var i=0;i<arr.length;i++){
		if(value.test(arr[i])){
		    return true;
		}
	    }
            return false;
        };
    }
  
  return{
        init:function(c){
	    var s=c.store;
            s.createFilterFn = createFilterFn;//覆盖原方法
	    s.pyCache = {};//拼音缓存,汉字字符串与其拼音数组的映射
        }
    }
}()


  • 大小: 2 KB
分享到:
评论
2 楼 cencai09 2011-03-02  
很好的实例,顶!!!!!!
1 楼 luojun1982_2001 2010-12-02  
值得学习研究,顶一个!

相关推荐

    Ext插件安装Ext插件安装

    Ext插件安装Ext插件安装Ext插件安装Ext插件安装Ext插件安装Ext插件安装Ext插件安装Ext插件安装

    深入浅出Ext_JS:数据存储与传输

    深入浅出Ext_JS:数据存储与传输,学习ext 我在百度搜到的。

    Eclipse下Ext插件.rar

    Eclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件.rarEclipse下Ext插件....

    ext使用ext使用ext使用ext使用

    ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ext使用ex

    Ext GWT 2.0: Beginner's Guide

    Ext GWT 2.0: Beginner's Guide pdf 和源码,重点推荐学习GWT-EXT的入门资料,英文版的

    EXT TreeFilter 插件

    EXT TreeFilter 插件 提供ext的tree 快速搜索功能 超简单好用~ 支持拼音首字母和中文模糊查询

    DW CS3--EXT2.2插件

    DW CS3--EXT2.2插件DW CS3--EXT2.2插件DW CS3--EXT2.2插件DW CS3--EXT2.2插件DW CS3--EXT2.2插件

    Ajax和Ext插件的使用

    使用Ajax技术在ExtGrid插件中展示数据,这是一个开源的JavaScript Jabber Messenger,采用Ext2.0与Prototype开发,界面比较美观

    myeclipse Ext插件

    myeclipse Ext插件

    Eclipse Ext插件

    Eclipse Ext插件 Eclipse Ext插件

    帮助JSEclipse开发ext的插件

    帮助JSEclipse开发extjs的插件,安装它使用extjs的时候具有自动导入ext框架中的代码功能,非常的使用哦!免费的,它的安装过程很少有的,找了很多资料,没找到,最后看了一个英文的,我自己翻译装了一次,没问题。...

    eclipse 3.4 ext 插件 spket

    eclipse 3.4 用于 ext 开发的插件 spket。 使用方法: 1.下载后直接解压到 eclipse 插件目录。 2.使用 eclipse 的 links 方式安装。

    EXT2.0插件(完整)

    EXT2.0 插件 Eclipse

    vs2008 ext插件

    vs2008 ext插件vs2008 ext插件vs2008 ext插件 /// &lt;reference path="ext/vswd-ext_2.1.js" /&gt;头上面加这句话就ok了

    Openlayers扩展插件ol-ext ,2022年4月版本v3.2.23

    Openlayers扩展插件ol-ext ,2022年4月版本

    EXT JS eclipse插件

    EXT JS eclipse插件,下了试试,不错的

    ext中combo过滤

    ext中combo过滤,在combo输入条件,就可以快速过滤出想要的结果列

    jira-ext-plugin:以可扩展的方式更新JIRA票证

    jira-ext插件旨在以jira-plugin无法实现的方式进行扩展。 Jenkins和JIRA都用作组织工作流程的一部分,因此可以高度自定义。 jira-ext插件通过使您的组织也可以自定义操作(以及何时执行这些操作)来延续了这一理念。...

Global site tag (gtag.js) - Google Analytics