jquery+javascript编写国籍控件

一直苦于没有好的国籍控件可以用,于是抽空写了一个国籍控件,现分享给大家。

主要功能和界面介绍

国籍控件主要支持中文、英文过滤以及键盘上下事件。

源码介绍

国籍控件核心是两个文件,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下载

(0)

相关推荐

  • 基于jQuery的实现简单的分页控件

    1:效果图 2:素材 3:编码 3.1思考 需要做什么? 1:分页控件需要向后台发送请求,发送的参数包括当前页,每页显示数量,查询条件:并且获取数据加载到当前页面: 2:进行修改删除操作的时候能记住当前页: 3:查询后翻页的时候可以可以记住当前查询的条件 3.2实现 HTML 复制代码 代码如下: <!--存储数据的容器--> <div class="tableData"> </div> <!--分页控件显示--> <div cla

  • 基于jquery跨浏览器显示的file上传控件

    前面我写过一篇短小的文章,简要的介绍了下怎样定义input type="file" 的样式.对于一般的表单,上传控件较少,这样的做法确实不错,既减少了代码,又美化了样式,原文:<定义input type="file" 的样式> 其实要实现给file控件定义样式,大致思想都是一样的. 今天看到博客园的繁花连写两篇文章来研究file控件 <jquery.fileEveryWhere.js--一个跨浏览器的file显示插件> <firefox

  • 使用jquery与图片美化checkbox和radio控件的代码(打包下载)

    效果图: HTML: 复制代码 代码如下: <div id="chklist" style="padding:10px; font-size:14px; "> <input type="checkbox" value='1' /><label>aaaaaa</label> <input type="checkbox" value='2' /><label>

  • 基于jQuery的日期选择控件

    但是也有些问题,第一画日历有点慢,第二兼容性不太好IE Only,第三它不是基于jQuery的哈哈. 那还是老规矩,做之前先看下效果   这下是更酷的Ext风格了. 从上图我们可以看出这个控件其实有两个视图一个日期月视图,还有一个是年月选择视图. 1:还是先从HTML入手 日期控件确定HTML其实还是比较简单,因为明摆着是列表的数据格式,当然主要是采用table了. 两个视图分别用两个Div包裹,控制div的显示隐藏即可以切换视图了.完整的HTMl结构大家可以用IEDeveloper看一下Dem

  • .net mvc页面UI之Jquery博客日历控件实现代码

    一.效果图 二.页面文件 页面上需要添加<div id="cal"></div>标记. 三.JS代码 复制代码 代码如下: // JavaScript 日历 $(document).ready(function () { //当前时间 $now = new Date();                      //当前的时间 $nowYear = $now.getFullYear();          //当前的年 $nowMonth = $now.get

  • asp.net+jquery滚动滚动条加载数据的下拉控件

    这样的需求貌似自己感觉不是很合理,因为数据多了如此下拉无论从人还是机器操作都比较痛苦. 没办法由于需求下来了,只能按需求操作.网上找了很多相关控件都感觉有点庞大,占资源比较多.没办法自己花半天时间弄出个半成品自定义控件,拿出来分享下,如有高手看了请多指点. 需求:AJAX滚动滚动条加载数据的下拉列表 控件名称:Webcombo 所用技术:ASP.NET(C#),jQuery,ASP.NET一般处理文件(.ashx) 下拉列表具体实现:用DIV模拟下拉列表,input和图片模拟下拉框.最终结果如下

  • 基于jquery的让页面控件不可用的实现代码

    应用背景 当用户需要某项功能时要填写一些表单信息,在填写完成并提交后,该部分信息是不允许再次修改的.表单包含TextBox.DropDownList.CheckBox等控件. 需求实现 第一种方案,绑定用户填写的数据时,设置控件的Enable属性为False.如果页面的表单数较少时可采用这样的方法,但是如果在表单较多的情况下则并不是更好的方法. 第二种方案,使用Foreach访问页面控件,判断类型如果是TextBox.DropDownList.CheckBox等,则设置Enable=False.

  • JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")

    样式:$(function (){ $("要选择的标签").click(function (){alert ("弹出对话框内容");}) }); 第一种:Id选择器 用法: 复制代码 代码如下: <head> <title></title> <script src ="Jq/jquery-1.4.2.js" type ="text/javascript" ></script

  • datePicker——日期选择控件(with jquery)

    demo: http://demo.jb51.net/js/2011/jQuery_calendar/index.html down: http://www.jb51.net/jiaoben/19622.html 用法很简单,而且js文件也很小,之前也见过一些日期选择控件,但个头都比较大,影响速度可以设置日期的格式,可以选择日期的起止时间,如果不加参数的话,默认就是之前的日期不可选,而只能从今天开始选择 现在My97 DatePicker也不错,不用jquery 一款很不错的基于JavaScri

  • jquery 日期控件datepicker属性详细解析

    复制代码 代码如下: $("#regDate").datepicker(     {    showMonthAfterYear: true, // 月在年之后显示    changeMonth: true,   // 允许选择月份    changeYear: true,   // 允许选择年份    dateFormat:'yy-mm-dd',  // 设置日期格式    closeText:'关闭',   // 只有showButtonPanel: true才会显示出来    d

  • JQuery EasyUI 日期控件如何控制日期选择区间

    复制代码 代码如下: <tr><th>发售起始日期</th> <td><input type="text" id="usLineTime" name="usLineTime" size="20" class='easyui-validatebox Wdate' onFocus="WdatePicker({el:'usLineTime',dateFmt:'yyyy-

  • Javascript jquery css 写的简单进度条控件

    通过我们伟大的 CSS,可以实现非常漂亮的进度条样式.加上 Javascript 的效果,就可以完全"欺骗"我们的用户,让他们有耐心等待浏览器处理完成.上述的原理已经知道了,那么就可以直接看代码了.本人使用的还是 jQuery 框架,因为这样简短的代码可能会更容易理解. 当然这个控件还有很多需要完成的地方,我仅仅是提供了一种遵循 Web 标准的实现思路.废话不多说. Javascript Progress Bar Demo - jb51.net #progress {backgroun

  • jquery获取tr中控件值并操作tr实现思路

    复制代码 代码如下: <table style="width: 100%; height: 100%" border="1"> <caption> Material/Special Tool Rental/Tool Cantainer/Transportation/Mobile</caption> <tbody><tr> <td> Project No </td> <td>

  • jWiard 基于JQuery的强大的向导控件介绍

    我就不贴我现在做项目的代码,我直接把作者的示例搬过来,因为改动不大,只要做点修改,就能很好的满足我们自己的需求. 原文地址 猛点这里下载 作者官网   不过是英文的,英语好的话 可以看原文,生怕我表达错误. 不知道童鞋们在平时的开发用到用向导式开发这种方式没有?有人问 什么是向导式开发呢?其实,很简单,就是让用户完成一个步骤,然后点击下一步,完成一个步骤就点击下一步,这样 按照我师父的来说,可以很好的提升用户体验. OK,废话不说了,先来一个最简单的例子:例子1: 1.1当然咯,既然是JQuer

  • jquery日历控件实现方法分享

    注释掉的是默认的css样式,你可以修改成自己的样式实现另一个风格,大家参考使用吧 复制代码 代码如下: /** * jQuery Calendar Plugin */(function($, window) { 'use strict';    $.fn.calendar = function(options) {        //check is select, if nothing select, return this        if (!this.length) {        

  • jquery设置控件位置的方法

    纯JS写法: 复制代码 代码如下: document.getElementById("child").style.left="800px";document.getElementById("child").style.top="200px";*/ //offset()获取当前元素基于浏览的位置   var offsettop=$("#unamespan").offset().top;    var offs

  • Jquery获得控件值的三种方法总结

    一 Jquery获得服务器控件值的方法由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法: 服务器控件代码:<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox> 1. $("#<%=txtUserID.ClientID%>").val(); 2. $("inpu

  • jQuery选中select控件 无法设置selected的解决方法

    解决办法:把选中option的语句放到setTimeout中,例: 复制代码 代码如下: setTimeout(function() { var selSorts = $("select[id^='" + controls.selsort + "']"); $.each(selSorts, function(index, sort) { var ope = $(sort).find("option[value='" + arrSort[index

  • 基于jQuery的获得各种控件Value的方法

    HTML代码 复制代码 代码如下: <asp:RadioButtonList ID="RadioButtonList1" runat="server"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> <asp:ListItem>3</asp:ListItem> <asp:ListItem>4&l

随机推荐