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 相关文章推荐
js字符串的各种格式的转换 ToString,Format
Aug 08 Javascript
JS获取农历日期具体实例
Nov 14 Javascript
jquery插件开发之实现md5插件
Mar 17 Javascript
jquery获取复选框被选中的值
Mar 22 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
详解参数传递四种形式
Jul 21 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
Dec 08 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
JavaScript 实现下雪特效的示例代码
Sep 09 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下载文件名中解决乱码的问题
2013/06/20 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
php支付宝APP支付功能
2020/07/29 PHP
jquery和ajax的关系详细介绍
2013/11/29 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
python实现kMeans算法
2017/12/21 Python
Django框架实现的分页demo示例
2019/05/25 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
机电专业毕业生求职信
2013/10/27 职场文书
税务专业毕业生自荐信
2013/11/10 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
党员评议个人总结
2014/10/20 职场文书
用人单位聘用意向书
2015/05/11 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL