源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

[JavaScript] jquery+javascript编写国籍控件

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 05:37:06 | 显示全部楼层 |阅读模式
本文给大家分享一个自己编写的使用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.id.indexOf(key) >= 0 || this.data.en.indexOf(key) >= 0 || this.data.cn.indexOf(key) >= 0){
                search.push(this.data);
            }
        }
        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下载

回复

使用道具 举报

1

主题

2万

回帖

176

积分

注册会员

Rank: 2

积分
176
发表于 2022-8-12 22:29:34 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

207

积分

中级会员

Rank: 3Rank: 3

积分
207
发表于 2022-10-12 18:45:38 | 显示全部楼层
哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-1-1 00:24:09 | 显示全部楼层
看看怎么样再说
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
发表于 2023-3-12 16:04:46 | 显示全部楼层
还有什么好东西没
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

59

积分

注册会员

Rank: 2

积分
59
发表于 2023-4-15 02:58:55 | 显示全部楼层
看看看看看看看看看看看看看看看看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2023-5-8 02:06:36 | 显示全部楼层
看到这帖子真是高兴!
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

155

积分

注册会员

Rank: 2

积分
155
发表于 2023-10-18 09:34:12 | 显示全部楼层
搞个免费的用用
回复 支持 反对

使用道具 举报

9

主题

2万

回帖

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2023-11-15 23:00:57 | 显示全部楼层
还有什么好东西没
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

319

积分

中级会员

Rank: 3Rank: 3

积分
319
发表于 2023-12-10 17:14:55 | 显示全部楼层
天天源码社区论坛
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-1-21 12:15 , Processed in 0.071886 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表