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中使用setInterval和setTimeout的方法
Apr 08 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
jquery+javascript编写国籍控件
Feb 12 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
基于JavaScript表单脚本(详解)
Oct 18 Javascript
JavaScript如何获取一个元素的样式信息
Jul 29 Javascript
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
谈谈node.js中的模块系统
Sep 01 Javascript
利用Vue实现简易播放器的完整代码
Dec 30 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/06/20 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
JavaScript插件化开发教程(五)
2015/02/01 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
python自动裁剪图像代码分享
2017/11/25 Python
谈谈python中GUI的选择
2018/03/01 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
办公室文员自荐书
2014/02/03 职场文书
丧事主持词大全
2014/04/02 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
2016党校学习心得体会
2016/01/07 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
Python pandas求方差和标准差的方法实例
2021/08/04 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS