一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家。
主要功能和界面介绍
国籍控件主要支持中文、英文过滤以及键盘上下事件。
源码介绍
国籍控件核心是两个文件,navtionality.js 和 mian.css。navtionality.js主要功能是国籍控件的DOM构建以及相应的事件绑定;main.css主要是用于渲染国籍控件的样式。而main.js是国籍控件的调用方法。
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下载
嗨,我已经习惯了用jQuery编写代码,现在想学习用普通的Javascript编写代码。我用这个例子来显示和隐藏一些选项卡,使用的jQuery,工作正常,但是在JavaScript中如何用不同的方式来编写呢? 我试着比较它们的写法有多不同,这样我就能更好地理解它。如有任何关于如何完成此操作的帮助/提示,将不胜感激。 null null
我只是从阿卡开始,我试图将一些混乱的功能分成更容易管理的部分,每个部分都由不同的演员执行。 我的任务似乎正是适合演员模式的。我有一个对象树,它们保存在数据库中。每个节点都有一些属性;让我们只关注一个,称之为财富。孩子的财富取决于父母的财富。当计算节点上的财富时,这应该会在子节点上触发类似的计算。我想收集节点的所有更新实例,并同时将它们保存在数据库中。 这似乎很简单:一个参与者只需执行计算,然后为当
jQuery 学习通常会经历三个阶段,会用 jQuery 是第一阶段,能抽象成插件是第二阶段…
在创建了书籍后,可以使用免费的在线编辑器进行编辑,也可以使用 gitbook editor 编辑,甚至使用任何喜欢的文本编辑器来编辑,例如:Vim。 在线编辑 进入到书籍的属性页面后,点击 “Edit Book” 按钮即可打开在线编辑器。 GitBook 的在线编辑器对于国内用户来说,很可能不能访问,所以最好还是下载 gitbook editor 到本地,安装后使用,或者使用自己喜欢的文本编辑器直
本章节将和大家说明如何使用 Gitbook 在我们私有文档服务器上添加一本书,并且如何编辑、保存 并发布此书。23 Git简介 Gitbook 是结合 Git 和 Markdown 来进行编排文本的服务软件,此服务已经在我司文档服务器中安装。 这里我对 Gitbook 的文件系统进行一个简短的介绍,在Gitbook 书籍的根目录下,一般有有三个文件: book.json --书籍生成配置json字
专有名词 技术类专有名词依循官方常见用法。 Node.js npm JavaScript 标点符号 以中文全形标点符号为主。 ,、。!「」() 遇英文段落(整句)採用一般(半形)标点符号。 中文与英文单字之间以一个空白字元隔开,标点符号与英文单字之间不需要空隔。 这是为了让排版显示的自动断词断句可以正确运作,以及增加中英文混杂段落的阅读舒适。 Node.js 是一种适合用于 Server-side