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 相关文章推荐
jquery 表单下所有元素的隐藏
Jul 25 Javascript
JQuery UI的拖拽功能实现方法小结
Mar 14 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
jquery、js操作checkbox全选反选
Mar 12 Javascript
js单词形式的运算符
May 06 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
Feb 28 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 Javascript
vue-cli2 构建速度优化的实现方法
Jan 08 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 Javascript
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
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执行速率优化技巧小结
2008/03/15 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
关于Python如何避免循环导入问题详解
2017/09/14 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
基于pandas中expand的作用详解
2019/12/17 Python
python中线程和进程有何区别
2020/06/17 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
存储过程的优缺点是什么
2015/01/10 面试题
生产主管岗位职责
2013/11/10 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
物资采购管理制度
2015/08/06 职场文书