当前位置: 首页 > 编程日记 > 正文

完整中英文世界国家级联下拉列表插件【前端版】

为什么80%的码农都做不了架构师?>>>   hot3.png

这个小东西是之前小项目上临时增加功能的产物,那时候在网上找了很久都没有能用的插件,要么是数据残缺少得可怜,还有就是实现手段非常低效不可维护那种,各种奇拔问题!反正就没有逞心如意!那时候又急需要这样一个功能,百般无奈后灵机一动,想起某企鹅功能选项不是有这样的世界国家级联功能嚒!那肯定有地方存着这数据的哇!嘿嘿!心里突然暗喜,终于有方向,然后就是向这企鹅开刀找!在某个i18n国际化文件夹中找到了!立马放下心头大石!

003006_98dM_4731.png 003239_Tcvv_4731.png

这样子中英文版本的数据都有了!但是问题又来了!该怎么开始做呢?

怎么去调用这个数据呢?

想法一:把数据拆分出来导入数据库,然后Ajax级联获取数据

想法二:把数据转换成熟悉的格式,在前端获取后递归拆分

想法三:直接利用jquery读取xml然后捉取数据(这是完成这插件后很久回头想到!逼于屌丝项目时间赶没多考虑的结果)

后来我是选择了第二种方案,转换成json对象,在前端递归获取数据;

其实这个方案也是不错的!JS对象属性查找效率是非常不错的!

那这个方案要怎么转换成又方便又简单的数组数据呢?又地让国家、省份、城市、区级之间又有关联

那时候是直接用元素名作为keyName关联;

其实那时候具体过程已经忘记了,直接贴那时候PHP的代码,

<?php$file = dirname(__FILE__).'/LocList_en.xml';$obj  = simplexml_load_file($file);$CountryArr = array();$StateArr   = array();$CityArr    = array();$RegionArr  = array();$cCode = 1; $cState = 1; $cCity = 1; $cRegion = 1;foreach ( $obj as $CountryRegion ) {$CountryArr[] = array('Name'=>(string)$CountryRegion['Name'],'Code'=>'c'.$cCode);foreach ( $CountryRegion as $State ) {if(!empty($State['Name'])){$StateArr['c'.$cCode][] = array('Name'=>(string)$State['Name'],'Code'=>'s'.$cState);}foreach ( $State as $City ) {if(!empty($City['Name'])){if(!empty($State['Code']))$CityArr['s'.$cState][] = array('Name'=>(string)$City['Name'],'Code'=>'c'.$cCity);else$CityArr['c'.$cCode][] = array('Name'=>(string)$City['Name'],'Code'=>'c'.$cCity);}foreach ( $City as $Region ) {if(!empty($Region['Name'])){if(!empty($City['Code']))$RegionArr['c'.$cCity][] = array('Name'=>(string)$Region['Name'],'Code'=>'r'.$cRegion);}#县级代码$cRegion++;}#城市代码$cCity++;	}#省份代码$cState++;}#国家代码$cCode++;}//echo '<pre>';print_r(array('country'=>$CountryArr,'state'=>$StateArr,'city'=>$CityArr,'region'=>$RegionArr));exit;echo(json_encode(array('country'=>$CountryArr,'state'=>$StateArr,'city'=>$CityArr,'region'=>$RegionArr)));exit;
?>

JSON数据的样子

010604_uCpu_4731.png

接着就是前段JS的编写!碍于当时没多少时间去写!代码非常糟糕!哎!算是一个工程版!

用jquery框架辅助!开发效率十分高!执行效率也还行!就是需要加载完整的地理数据稍稍慢!320kb的数据还能接受吧!对于客户突来的需求!

(function($){$.fn.extend({GlobalGeography:function(){/* ._GlobalGeography_ { width:282px; height:30px !important; position:relative; left:-282px; top:2px; } */var relatedObj = ['div[id="country"]','div[id="state"]','div[id="city"]','div[id="region"]'];var excludeObj = ['div[id="region"]'];	var selectmenu = ['country','state','city','region'];var selector   = this.selector;/*输出下拉列表*/function _traversal(source,type){if(typeof(source)!='undefined'){var _select_  = '<select class="_GlobalGeography_">';_select_ += '<option value=""></option>';$.each(source,function(i,v){_select_ += '<option value="'+v.Code+'">'+v.Name+'</option>';});_select_ += '</select>';return _select_;}return false;};/*清除/还原下级关联下拉菜单*/function cleanNextMenu(index){for(var i=index;i<relatedObj.length;i++){if(typeof(relatedObj[(i+1)])!='undefined'){$(relatedObj[(i+1)]).find('._GlobalGeography_').remove();$(relatedObj[(i+1)]).find('input').val('');}}}/*遍历获取下拉菜单内容*/function checkMenu(json){/*遍历赋值所有类型*/$.each(relatedObj,function(i,v){if($.inArray(v,excludeObj)==-1){$(v).find('select').bind('change',function(){var _code_ = $(this).val(); cleanNextMenu(i);if(typeof(json[selectmenu[(i+1)]][_code_])!='undefined'){$(relatedObj[(i+1)]).append(_traversal(json[selectmenu[(i+1)]][_code_],selectmenu[(i+1)]));/*绑定方法*/$(relatedObj[(i+1)]).find('._GlobalGeography_').bind('change',function(){$(relatedObj[(i+1)]).find('input').val($(this).find('option:selected').text());});checkMenu(json);} else {$(relatedObj[(i+2)]).append(_traversal(json[selectmenu[(i+2)]][_code_]));/*绑定方法*/$(relatedObj[(i+2)]).find('._GlobalGeography_').bind('change',function(){$(relatedObj[(i+2)]).find('input').val($(this).find('option:selected').text());});}});}});}/*加载世界国家城市数据*/$.getJSON("db_en.dat",function(json){/*输出国家列表*/$(selector).append(_traversal(json.country,'country'));$(selector).find('._GlobalGeography_').bind('change',function(){$(selector).find('input').val($(this).find('option:selected').text());});checkMenu(json);});}})
})(jQuery);

html代码

<!DOCTYPE>
<html><head><meta charset="utf-8"><script src="jquery.js"></script><script src="country_noinv.js"></script><style type="text/css">._GlobalGeography_ { width:200px; }</style></head><body><div id="country"></div><div id="state"></div><div id="city"></div><div id="region"></div></body>
</html>
<script>
$(document).ready(function(){$('#country').GlobalGeography();
});
</script>

执行效果,这里有一个问题,就是英文版只去到城市就没了!所以数据包大小也减半只有148kb

//这里主要是用了非入侵方式,数组元素分别对应selectmenu
var relatedObj = ['div[id="country"]','div[id="state"]','div[id="city"]','div[id="region"]'];
//这里主要控制级联到哪个级别就不再继续执行
var excludeObj = ['div[id="region"]'];
var selectmenu = ['country','state','city','region'];

011232_YWYE_4731.png011411_2U7c_4731.png

这个小东西是抛砖引玉了!实现手段并不高效!代码有很多地方可以改进!

整理代码时候翻出来,希望能帮助到有需要的人!



转载于:https://my.oschina.net/Jacker/blog/339857

相关文章:

何时使用margin和padding?

margin和padding的意义相信大家都很清楚&#xff0c;可是在具体应用中&#xff0c;到底应该使用哪一个&#xff0c;就比较难于判断了。 这篇文章 说得挺清楚的&#xff0c;在这里翻译一下&#xff0c;供参考。 何时应当使用margin 需要在border外侧添加空白时。 空白处不需要…

10年IT老兵给新人程序员的几点建议

【CSDN 编者按】对于很多计算机专业的同学而言&#xff0c;“进大厂”已经成为毕业后职业道路的首选。但是面试官最喜欢什么样的应届生你知道吗&#xff1f;在校期间应该为找工作做哪些准备&#xff1f;除了技术好&#xff0c;在职场中还有哪些必备软实力&#xff1f;今天&…

asp.net文件上传下载的简单实现

使用FileUpload上传&#xff1a; protected void btnUpload_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { /*通过文件扩展名判断文件类型*/ string fileExt System.IO.Path.Ge…

JAVA数组的定义及用法

数组是有序数据的集合&#xff0c;数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型&#xff0c;包含简单类型组合类型&#xff0c;数组名…

英特尔公布新技术路线图,将为 AWS、高通代工芯片

编译|刘春霖出品|AI科技大本营(ID:rgznai100)图源|IC photo今天英特尔宣布其旗下的工厂将开始制造高通芯片&#xff0c;并公布了公司有史以来最详细的制程工艺和封装技术路线图&#xff0c;希望在 2025 年前赶上台积电、三星电子。除了公布其近十多年来首个全新晶体管架构 Ribb…

epoll相关资料整理

http://www.cppblog.com/converse/archive/2008/10/13/63928.htmlepoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可以找到的epoll相关的资料太少了,因为epoll仅被linux 2.6以上版本内核所支持,它的应用…

18.绝对路径和相对路径

什么是绝对路径&#xff08;Absolute Pathname&#xff09;&#xff1f; 1.绝对路径必定由“/”开头 2.绝对路径是为档案/文件的所在位置做指向 3.在任何时候&#xff0c;都可以用绝对路径来找到我们想要的文件 PS&#xff1a;绝对路径只对当前所在目录有效。 什么是相对路径&a…

IE的box模型显示bug

原作者charlee、原始链接http://tech.idv2.com/2007/01/02/ie-box-model-bug/以及本声明。 box模型即由<div>等块元素的 margin、padding、border、width、height 等属性构成的显示模型&#xff0c;它是CSS布局的基础。通过设置<div>的各种属性&#xff0c;可以得到…

AI 能匹敌程序员了吗?OpenAI 新研究展​示 NLP 大模型的局限性

作者&#xff1a;Ben Dickson来源&#xff1a;数据实战派Codex在一篇新论文中&#xff0c;OpenAI 的研究人员展示了 Codex 的详细信息&#xff0c;它是一种生成软件源代码的深度学习模型。Codex 可以为 OpenAI 和 GitHub 联合开发的 “AI 配对程序员” 工具 Copilot 提供支持。…

MSLicensing​中断远程桌面连接

---------------------------中断远程桌面连接---------------------------客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是:1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一个网络错误。------------------…

如何恢复,迁移,添加, 删除 Voting Disks

如何恢复&#xff0c;迁移&#xff0c;添加, 删除 Voting Disks 恢复流程 在11gR2 之前&#xff0c;我们可以直接直接使用dd命令对voting disk进行备份。 DD示例 备份votedisk盘&#xff1a; [rootraw1 bin]# dd if/dev/raw/raw2 of/home/oracle/voting_disk.bak 恢复votedisk盘…

跨站脚本攻击(XSS)FAQ

原作者charlee、原始链接http://tech.idv2.com/2006/08/30/xss-faq/以及本声明。 该文章简单地介绍了XSS的基础知识及其危害和预防方法。Web开发人员的必读。译自 http://www.cgisecurity.com/articles/xss-faq.shtml。 简介 现在的网站包含大量的动态内容以提高用户体验&…

linux中的for命令

bash shell提供了for命令&#xff0c;用于创建通过一系列值重复的循环。每次重复使用系列中的一个值执行一个定义的命令集。for命令基本格式为&#xff1a;for var in listdo commandsdone1.读取列表中的值 #!/bin/bash #basic for command for test in a b c d e f doecho The…

终于有人把计算机视觉讲明白了 。。。

机器学习是目前比较热门的技术&#xff0c;包含深度学习、强化学习、对抗学习、对偶学习、迁移学习、分布式学习、以及元学习等内容。得益于大数据、大模型、大计算的发展&#xff0c;深度学习在计算机视觉、语音处理、自然语言方面相继取得了突破&#xff0c;达到甚至超过了人…

mysql启动与关闭(手动与自动)

手动管理mysql的启动与关闭 [rootmysql ~]# service mysql start --手动启动mysql Starting MySQL. SUCCESS! [rootmysql ~]# service mysql stop --手动关闭mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默认参数的具体值 如果…

C#中抽象类和接口的区别

一、抽象类&#xff1a;抽象类是特殊的类&#xff0c;只是不能被实例化&#xff1b;除此以外&#xff0c;具有类的其他特性&#xff1b;重要的是抽象类可以包括抽象方法&#xff0c;这是普通类所不能的。抽象方法只能声明于抽象类中&#xff0c;且不包含任何实现&#xff0c;派…

echo向文件中写入

echo命令向一个文件写入内容的方法详解&#xff0c;感兴趣的朋友可以参考下。 覆盖型写法 (文件里原来的内容被覆盖)echo "aaa" > a.txtecho aaa > a.txt 添加型写法 (新内容添加在原来内容的后面&#xff09;echo "aaa" >> a.txtecho aaa >…

火山引擎向企业客户开放上万款抖音同款特效

你喜爱的抖音特效&#xff0c;在其他平台上也能使用了。 7月28日&#xff0c;抖音联合火山引擎举办特效技术开放日&#xff0c;首次披露抖音特效的生产流程和技术原理。活动中&#xff0c;火山引擎宣布已向企业客户开放了上万款抖音同款特效&#xff0c;包括猴哥、漫画惊讶脸…

5.1 python的缩进

python 并不像其他语言一样要求以大括号来分辨逻辑&#xff0c;仅仅使用 tab 键&#xff08;默认的四个空格&#xff09;来区分代码。比如 ainput(Please input a num: ) b0 if int(a)>b: print(a>0) else: print(a<0) 返回结果&#xff1a;当输入小于0时&#xff0c;…

centOS 自动安装php

centos下安装php#yum install -y php这个只安装PHP建议安装运行库及MySQL的支持#yum install -y php php-devel php-mysql如果你的系统是CentOS 5.6那么上面这条命令安装的是PHP 5.1,要安装 PHP 5.3则执行下面的命令:#yum install -y php53 php53-devel php53-mysql自动安装启动…

strcpy_s与strcpy的比較

strcpy_s和strcpy()函数的功能差点儿是一样的。strcpy函数&#xff0c;就象gets函数一样&#xff0c;它没有方法来保证有效的缓冲区尺寸&#xff0c;所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串。在程序执行时&#xff0c;这将导致不可预料的行为。用strcpy_s就能够避免这…

抖音发布特效数据报告:每五个投稿有一个使用特效

7月28日&#xff0c;抖音与火山引擎联合举办特效技术开放日&#xff0c;首次发布了《抖音特效数据报告》。报告显示&#xff0c;2021上半年 &#xff0c;抖音平台平均每天上线超过100个新款特效&#xff1b;平均每五个投稿里&#xff0c;就有一个使用特效&#xff0c;特效已经成…

11G RAC 进程启动顺序

本文转自 张冲andy 博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/andy6/p/6041171.html &#xff0c;如需转载请自行联系原作者

使用 jQuery 简化 Ajax 开发

JSON 入门指南 <script languageJavaScript typetext/javascript> </script> <script languageJavaScript typetext/javascript> </script> 级别&#xff1a; 初级 廖 雪峰, 撰稿人 2008 年 8 月 22 日 JSON 即 JavaScript Object Natation&#xf…

AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生

话说&#xff0c;你能看出这三只鹦鹉有什么不一样吗&#xff1f;脸盲如我&#xff0c;要使出玩“我们来找茬”的十级能力。AWSL&#xff0c;鹦鹉鹦鹉&#xff0c;傻傻分不清楚。结果&#xff0c;AI一顿操作猛如虎&#xff0c;进行了判断&#xff1a;左边的是桃面牡丹鹦鹉&#…

stm32时钟树讲解

1.管理好时钟&#xff0c;功耗才能更低

安全攻防实战:使用winlogonhack获取系统密码

安全攻防实战&#xff1a;使用winlogonhack获取系统密码S.S.F simeon摘要 在网络安全事件频发的今天&#xff0c;很多人都在抱怨&#xff0c;为什么我的系统被入侵了&#xff0c;我的主页被修改了&#xff0c;在入侵后&#xff0c;我采取了一些安全加固措施&#xff0c;可是没…

HTTP长连接服务器端推技术

服务器推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据&#xff0c;浏览器显示这些数据&#xff0c;同时保证与服务器的连接。当服务器需要再次发送一批数据时&#xff0c;浏览器显示数据并保持连接。以后&#xff0c;…

从AI、加密货币到火星任务,一种更强大、更稳定的存储设备

作者&#xff1a;贺佳来源&#xff1a;数据实战派所研究器件之一的显微镜图像&#xff0c;由两个尺寸相同的十字架组成&#xff0c;其中一个具有 IrMn3 柱&#xff0c;第二个仅由 Pt 组成。&#xff08;来源&#xff1a;西北大学和墨西拿大学&#xff09;美国西北大学和意大利墨…

CSDN - 进程结束后new出的内存会回收吗?

http://blog.csdn.net/stanjiang2010/article/details/5386647 关键词&#xff1a;内存回收