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 相关文章推荐
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
详解如何去除vue项目中的#——History模式
Oct 13 Javascript
layui的select联动实现代码
Sep 28 Javascript
使用uni-app开发微信小程序的实现
Dec 13 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 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
十天学会php之第六天
2006/10/09 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
jquery模拟按下回车实现代码
2011/09/20 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Python计算一个文件里字数的方法
2015/06/15 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
经理秘书求职自荐信范文
2014/03/23 职场文书
提拔干部考察材料
2014/05/26 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
保险专业求职信
2014/07/07 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
教师教育教学随笔
2015/08/15 职场文书
Django操作cookie的实现
2021/05/26 Python