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 相关文章推荐
javascript 函数调用规则
Aug 26 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
Nov 21 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
Ajax清除浏览器js、css、图片缓存的方法
Aug 06 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
Angular2里获取(input file)上传文件的内容的方法
Sep 05 Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 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函数method_exists()与is_callable()的区别
2013/06/21 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python 从远程服务器下载东西的代码
2013/02/10 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
python线程优先级队列知识点总结
2021/02/28 Python
歌唱比赛策划方案
2014/06/06 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
师德师风个人总结
2015/02/06 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android