jquery+javascript编写国籍控件


Posted in Javascript onFebruary 12, 2015

一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家。

主要功能和界面介绍

国籍控件主要支持中文、英文过滤以及键盘上下事件。

jquery+javascript编写国籍控件

源码介绍

国籍控件核心是两个文件,navtionality.js 和 mian.css。navtionality.js主要功能是国籍控件的DOM构建以及相应的事件绑定;main.css主要是用于渲染国籍控件的样式。而main.js是国籍控件的调用方法。

jquery+javascript编写国籍控件

HTML结构

国籍控件要呈现在页面上,必须事先在页面中加以设置以供控件加载使用。control-nationality-suggest 是容器,input 是输入接收,nationality-suggest-list-container是提示列表,用于显示筛选后的国籍列表。

    <div class="container">

        <div class="control-nationality-suggest">

            <input type="text" class="nationality-suggest-input" />

            <div class="nationality-suggest-list-container">

                <div class="nationality-suggest-hint">输入中英文/代码搜索或↑↓选择</div>

                <ul class="nationality-suggest-list"></ul>

            </div>

        </div>

    </div>

navtionality.js 介绍

navtionality是国籍控件的核心,主要负责国籍控件的数据过滤,DOM呈现以及相应的事件绑定。init是整个控件的入口,通过传入的option参数,来确定具体的绑定对象。

var nationality = {

    data:[]

    strData: String,

    input: Object,

    list: Object,

    //功能描述:初始化

    init: function (option) {

    },

    //功能描述:选项设置

    setOption: function (option) {

    },

    //功能描述:绑定事件

    setEvent: function () {

    },

    //功能描述:绑定数据

    setData: function () {

    },

    //功能描述:搜索

    doSearch: function (key) {

    },

    //功能描述:设置列表

    setList: function (fvalue) {

    },

    //功能描述:绑定列表事件

    setListEvent: function () {

    },

    //功能描述:设置单项值

    setValue: function (item, hide) {

    },

    //功能描述:校验数据

    chkValue: function () {

    },

    //功能描述:鼠标事件

    setKeyDownEvent: function (event) {

    }

}

快速搜索介绍

在整个国籍控件中,搜索是最重要的一块,如何根据用户的输入筛选出相应的国籍数据。我们采取的方法是通过正则匹配法,我们把国籍数据首先进行格式化处理

比如原始的国籍数据是这样的:[{ id: "CN", en: "China", cn: "中国大陆" }, { id: "HK", en: "Hong Kong", cn: "中国香港" }, { id: "MO", en: "Macau", cn: "中国澳门" }

那么我们格式化后的数据就是这样的:#CN|China|中国大陆##HK|Hong Kong|中国香港##MO|Macau|中国澳门##

为什么要这么处理呢?是因为我们要借助正则表达式来实现数据的快速匹配。

    //功能描述:搜索

    doSearch: function (key) {

        if (!key || key == "") return ["CN|China|中国大陆", "HK|Hong Kong|中国香港", "MO|Macau|中国澳门", "TW|Taiwan|中国台湾"];

        var reg = new RegExp("#[^#]*?" + key + "[^#]*?#", "gi");

        return this.strData.match(reg);

    }

想必大家看到我们的正则匹配,应该明白一大半了,没错,我们通过将原先的数组转换成字符串的方式,利用正则快速实现数据的筛选过滤。

对比下我们通过遍历实现的搜索方式,可以发现正则的效率会高很多。

    //功能描述:搜索

    doSearch: function (key) {

        if (!key || key == "") return ["CN|China|中国大陆", "HK|Hong Kong|中国香港", "MO|Macau|中国澳门", "TW|Taiwan|中国台湾"];

        var search = [];

        for(var i=0; i< this.data.length; i++){

            if(this.data[i].id.indexOf(key) >= 0 || this.data[i].en.indexOf(key) >= 0 || this.data[i].cn.indexOf(key) >= 0){

                search.push(this.data[i]);

            }

        }

        return search;

    }

main.js 介绍

main是调用国籍控件的方法,通过遍历页面中的calss为control-nationality-suggest的DOM对象来绑定国籍控件。

 $(".control-nationality-suggest").each(function () {

        var input = $(this).find(".nationality-suggest-input");

        var list = $(this).find(".nationality-suggest-list");

        new nationality({ input: input, list: list });

})

演示与下载

查看DEMO DEMO下载

Javascript 相关文章推荐
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
js获取checkbox值的方法
Jan 28 Javascript
JS 对象属性相关(检查属性、枚举属性等)
Apr 05 Javascript
JS实现仿QQ聊天窗口抖动特效
May 10 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
Nov 10 Javascript
Node.js API详解之 console模块用法详解
May 12 Javascript
canvas 中如何实现物体的框选
Aug 05 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 #Javascript
JavaScript中的分号插入机制详细介绍
Feb 11 #Javascript
Javascript核心读书有感之语句
Feb 11 #Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 #Javascript
JavaScript中的函数模式详解
Feb 11 #Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 #Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 #Javascript
You might like
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
python将ip地址转换成整数的方法
2015/03/17 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python http接口自动化脚本详解
2018/01/02 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
django 信号调度机制详解
2019/07/19 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
python退出循环的方法
2020/06/18 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
幼儿园亲子活动方案
2014/01/29 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
爽歪歪广告词
2014/03/20 职场文书
机关作风建设心得体会
2014/10/22 职场文书
入党函调证明材料
2015/06/19 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书