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 10 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
jQuery实现获取隐藏div高度的方法示例
Feb 09 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
vue配置接口域名方法总结
May 12 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
Dec 01 Javascript
JavaScript中break、continue和return的用法区别实例分析
Mar 02 Javascript
vue $mount 和 el的区别说明
Sep 11 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[00:10]神之谴戒
2019/03/06 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
python方向键控制上下左右代码
2018/01/20 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
网络工程师的自我评价
2013/10/02 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
推普周活动总结
2014/08/28 职场文书
2015年材料员工作总结
2015/04/30 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
旅游安全责任协议书
2016/03/22 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL