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 相关文章推荐
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 Javascript
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
javascript中bind函数的作用实例介绍
Sep 28 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 Javascript
深入理解Javascript箭头函数中的this
Feb 13 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
javascript将非数值转换为数值
Sep 13 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
JS扁平化输出数组的2种方法解析
Sep 17 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 Javascript
浅谈node.js中间件有哪些类型
Apr 29 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生成html分页列表的代码
2007/03/18 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP常用的小程序代码段
2015/11/14 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
使用Python生成XML的方法实例
2017/03/21 Python
python实现感知器算法详解
2017/12/19 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Windows下python3.7安装教程
2018/07/31 Python
实例讲解python中的协程
2018/10/08 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
教师节活动主持词
2014/04/02 职场文书
高三学生评语大全
2014/04/25 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
mysql left join快速转inner join的过程
2021/06/30 MySQL