常用正则整理

一种简单的正则表达式验证工具:浏览器的地址栏!

输入javascript:/^\s*$/.test(” “); 回车后,得到true;

输入javascript:/^\s*$/.test(“0”); 回车后,得到false。

常用正则:

javascript:/^\s*$/.test(" ");
javascript:/^\d+$/.test("0123456789");
javascript:/^[1-9]\d*$/.test("1234567890");
javascript:/^- ( :\d+|\d{1,3}( :,\d{3})+)( :\.\d+) $/.test("-233,323,432.323456");
javascript:/^- ( :\d+|\d{1,3}( :\.\d{3})+)( :,\d+) $/.test("232.232.292,2533");
javascript:/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test("2008-11-29");
javascript:/^\d\d \.\d\d \.\d\d\d \d $/.test("11.29.2008");

email

8./^((([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\ \^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a)) (\x20|\x09)+) (\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. $/i.test(email);

url

9./^(https |ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@) (((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\. )(:\d*) )(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*) ) (\ ((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\ )*) (\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\ )*) $/i.test(url);

参考:jquery.validate.js

基于jQuery的表格插件flexigrid扩展:为列增加checkbox

关于flexigrid: 基于jQuery的datagrid插件。http://www.flexigrid.info/

基本使用就不说了,看官网。这篇文章主要总结一下自己在使用中的一些心得,首先是对flexigrid进行简单的扩展,比如将某个数据列显示为一个checkbox.

要点,也就是主要修改的地方如下:

1.colModel — flexigrid用来表头的模型,我们将在为之新增一个checkbox属性作为标识,若为true,则将这一列显示为checkbox。 用ctrl+f找到这段代码(为什么用Ctrl+F? 很明显写这插件的哥们儿很喜欢超长的函数,以至于这种独立的功能他都仅仅是加了一个注释而已):

//create model if any
if (p.colModel)
{
    thead = document.createElement('thead');
    tr = document.createElement('tr');
			
    for (i=0;i<p.colModel.length;i++)
    {
     //此处即对colModel的处理。省略代码若干....
     //Modified by me.
     if (cm.checkbox){
	$(th).attr('checkbox',cm.checkbox);
     }
     $(tr).append(th);
    }

}

注释//Modified by me下面的if段,即是我们要做的修改,很明了,我们将为th添加一个’checkbox’属性,如果用户在colModel中设置了这一属性的话。

2.找到创建每个单元格的代码,稍作修改,判断单元格所在列的表头是否有checkbox属性,若有,则在单元格内创建一个checkbox。

继续Ctrl+F找到下面这段代码

//add cell
$('thead tr:first th',g.hDiv).each
(
   function (){
     //继续省略代码
     if($(this).attr('checkbox')){												              
        td.innerHTML = "<input type='checkbox' />";											    
     }else{											  
        td.innerHTML = row.cell[idx];										        
     }
   }

循环体中的代码就是对每一列的单元格进行渲染了。代码依旧很简单,对应的表头有’checkbox’,就显示成checkbox,否则就显示对应的数据值。

到此为止呢,如果你手头有测试数据的话,就可以看到我们的checkbox已经出来了,接下来还有一点小问题,请继续往下看。

3.需要某一行被选中时,该行内的checkbox也应该被打上勾,同样的,勾选checkbox时,应当所在行的样式变为选中。

继续Ctrl+F($(this).toggleClass(‘trSelected’)),找到下面这段

$('tbody tr',g.bDiv).each
					(
						function ()
							{
							$(this)
							.click(
								function (e) 
									{ 

										var obj = (e.target || e.srcElement); if (obj.href /*这里的判断条件修改了一下,使得checkbox的点击事件不被拦截掉*/) return true; 
										
										$(this).toggleClass('trSelected');
										//这里的修改使checkbox的选中状态与行的trSelected css保持同步.
										var isSelected = $(this).hasClass("trSelected");
										$(this).find("input[type='checkbox']").each(function() {
											isSelected   $(this).attr("checked","checked") : $(this).removeAttr("checked");
										});
										if (p.singleSelect) {
											$(this).siblings().removeClass('trSelected')
															  .find("input[type='checkbox']").removeAttr("checked");											
										}
									}
							)

OK,到此为止,完成任务。

使用方法呢,就是这个样子

$("#customer_flexigrid").flexigrid({
        colModel: [
         	{ display: 'Select', name: 'id', width: 40, align: 'center', checkbox:true},
         ],
         //其他配置省略

这只是一个简单的例子,事实上用同样的思路,我们可以把单元格表现成任意的形式。

最后吐槽一下JE的代码插入功能,太难使了。

JS实现上传进度条

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
<TITLE> New Document </TITLE> 
<META NAME="Generator" CONTENT="EditPlus"> 
<META NAME="Author" CONTENT=""> 
<META NAME="Keywords" CONTENT=""> 
<META NAME="Description" CONTENT=""> 
<style type="text/css"> 
.spa{ 
font-size:12px; 
color:#0066ff; 

} 
.put{ 
font-size:12px; 
font-family:Arial; 
color:#0066ff; 
background-color:#fef4d9; 
padding:0px; 
border-style:none; 
} 

.put2{ 
font-size:12px; 
color:#0066ff; 
text-align:center; 
border-width:medium; 
border-style:none; 
} 

</style> 
</HEAD> 

<BODY> 
<div id="up"> 
<span class="spa">载入中,请稍等...</span> 
<input id="chart" type="text" size="54" class="put" readOnly /> 
<input id="percent" type="text" size="20" class="put2" readOnly /> 
</div> 

<div id="ff"> 
<form name="upload" method="post" action=""> 
<input type="file" id="f" size="30" /> 
<input type="button" id="b" value="上传" onclick="count()"/> 
</form> 
</div> 
<script language="javascript"> 
var bar=0; 
var line="||"; 
var amount=""; 
document.getElementById("up").style.display="none"; 
function count(){ 
var f = document.getElementById("f"); 
var b = document.getElementById("b"); 
b.disabled = true; 
f.disabled = true; 
if(f.value==""){ 
b.disabled = false; 
f.disabled = false; 
alert("请添加上传文件"); 
return false; 
} 
document.getElementById("up").style.display="inline"; 
bar = bar+2; 
amount = amount+line; 
document.getElementById("chart").value=amount; 
document.getElementById("percent").value=bar+"%"; 
if(bar<99){ 
setTimeout("count()",200); 
}else{ 
b.disabled = false; 
f.disabled = false; 
alert("加载完毕!"); 
document.getElementById("up").style.display="none"; 
// window.location=""; 
} 
} 

</script> 
</BODY> 
</HTML> 

 

各种工具之正则表达式语法比较

在各种常用的工具中,
正则表达式如此的相似却又不同。
下表列出了一些常用的正则表达式,以及其不同之处。
项目总多,遗漏必有不少,请各位看官不吝指出。
以perl的正则为基准,不同的用法以粉红色标出。

 

grep 2.5.1 egrep 2.5.1 sed 3.02
sed 4.07
awk 3.1.1 perl 5.8.0 vim 6.1 JavaScript   
转义 \ \ \ \ \ \ \
行头 ^ ^ ^ ^ ^ ^ ^
行尾 $ $ $ $ $ $ $
n个 {n} {m,n} {m,} {,n} \{n\} {n} \{n\} {n}或\{n\} 仅定义 –posix 或 –re-interval有效(要表达}和{,得用\\{和\\} 没有定义–posix或–re-interval时,不能用{n}的语法, \}\{和}{同义 {n} \{n\} {n}
{0,} * * * *或\*, (要表达*,得用\\*) * * *
{1,} \+ + \+ +或\+, (要表达+, 得用\\+) + \+ +
{0,1}    或\ , (要表达 , 得用\\ )    
任意字符 . . . . 含\n. . /s修饰后则含\n . 除\n . 除\n
(pat) 匹配并获结果 \(pat\) (pat) \(pat\) (pat)或\(pat\) (要表达括号,用\\( \\) ) (pat) \(pat\) (pat)
( :pat) 匹配但不获结果 不支持 不支持 不支持 不支持 ( :pat) 不支持 ( :pat)
( =pat) 等于预查 不支持 不支持 不支持 不支持 ( =pat) 不支持 ( =pat)
( !pat) 不等预查 不支持 不支持 不支持 不支持 ( !pat) 不支持 ( !pat)
| 或 \| | \| |或\| (要表达|,得用\\|) | \| |
其中任意字符 [xyz] [xyz] [xyz] [xyz] [xyz] [xyz] [xyz]
[.ch.] [=ch=] 不支持 不支持 [.ch.] 不支持 不支持 不支持 不支持
单词边界 \b \b \b \b 不支持 \b 不支持 \b
非单词边界 \B \B \B \B 不支持 \B 不支持 \B
单词左右边界 <> \< \> \< \> \< \> 不支持 (><和\>\<和\\>\\<同义 不支持(><和\>\<同义 \< \> 不支持(><和\>\<同义
控制字符 /cx 不支持 不支持 \cx 不支持 \cx 不支持 \cx
数字\d 不支持 不支持 不支持 不支持 \d \d \d
非数字\D 不支持 不支持 不支持 不支持 \D \D \D
换页 \f 不支持 不支持 高版本支持 \f \f 另义 \f表示文件名字符 \f
换行 \n 不支持 不支持 不支持 \n \n \n \n
回车 \r 不支持 不支持 \r \r \r \r \r
空白 \s 不支持 不支持 不支持 不支持 \s \s \s
非空白 \S 不支持 不支持 不支持 不支持 \S \S \S
制表符 \t 不支持 不支持 高版本支持 \t \t \t \t
垂直制表符 \v 不支持 不支持 高版本支持 \v \v 另义 \v表示very magic \v
单词字符 \w [A-Za-z0-9_] \w \w \w 不支持 \w \w \w
非单词字符 \W [^A-Za-z0-9] \W \W \W 不支持 \W \W \W
\xn 16进制 不支持 不支持 高版本支持 \xn \xn 另义 \x表示[0-9A-Za-z] \xn
\n 八进制 不支持 不支持 不支持 \n \n 不支持 \n
\n 后向引用 \n \n \n \n 仅取结果可用 \n \n 仅取结果可用 \n
[:alnum:] 字母和数字 [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] 不支持
[:alpha:] 字母 [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] 不支持
[:cntrl:] 控制字符 [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] 不支持
[:digit:] 数字 [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] 不支持
[:graph:] 可打印字符(不含空格) [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] 不支持
[:lower:] 小写 [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] 不支持
[:print:] 可打印字符(含空格) [:print:] [:print:] [:print:] [:print:] [:print:] [:print:] 不支持
[:punct:] 标点 [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] 不支持
[:space:] 空格 [:space:] [:space:] [:space:] [:space:] [:space:] [:space:] 不支持
[:upper:] 大写字母 [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] 不支持
[:xdigit:] 16进制数字 [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] 不支持
[:return:] 不支持 不支持 不支持 不支持 不支持 [:return:] 不支持
[:tab:] 不支持 不支持 不支持 不支持 不支持 [:tab:] 不支持
[:escape:] 不支持 不支持 不支持 不支持 不支持 [:escape:] 不支持
[:backspace:] 不支持 不支持 不支持 不支持 不支持 [:backspace:] 不支持

 

 

转载自http://blog.chinaunix.net/u/634/showart.php id=2466

编辑表单后离开本页面时做提示(jQuery版)

添加如下JavaScript:

$.fn.enable_changed_form_confirm = function () {
	var _f = this;
	$('input[@type=text]', this).each(function() {
		$(this).attr('_value', $(this).val());
	});
	$('input[@type=password]', this).each(function() {
		$(this).attr('_value', $(this).val());
	});
	$('textarea', this).each(function() {
		$(this).attr('_value', $(this).val());
	});
	$('input[@type=checkbox]', this).each(function() {
		var _v = '';
		if(this.checked == true) {
			_v = 'on';
		} else {
			_v = 'off';
		}
		$(this).attr('_value', _v);
	});
	$('input[@type=radio]', this).each(function() {
		var _v = '';
		if(this.checked == true) {
			_v = 'on';
		} else {
			_v = 'off';
		}
		$(this).attr('_value', _v);
	});
	$('select', this).each(function() {
		$(this).attr('_value', this.options[this.selectedIndex].value);
	});
	
	$(this).submit(function() {
		window.onbeforeunload = null;
	});
	window.onbeforeunload = function() {
	  	if(is_form_changed(_f)) {
			return "You will lose any unsaved content.";
		}
	}
}

function is_form_changed(f) {
	var changed = false;
	$('input[@type=text]', f).each(function() {
		var _v = $(this).attr('_value');
		if(typeof($(this).attr('_value')) == 'undefined') {
			_v = '';
		}
		if(_v != $(this).val()) {
			changed = true;
		}
	});
	$('input[@type=password]', f).each(function() {
		var _v = $(this).attr('_value');
		if(typeof($(this).attr('_value')) == 'undefined') {
			_v = '';
		}
		if(_v != $(this).val()) {
			changed = true;
		}
	});
	$('textarea', f).each(function() {
		var _v = $(this).attr('_value');
		if(typeof($(this).attr('_value')) == 'undefined') {
			_v = '';
		}
		if(_v != $(this).val()) {
			changed = true;
		}
	});
	$('input[@type=checkbox]', f).each(function() {
		var _v = '';
		if(this.checked == true) {
			_v = 'on';
		} else {
			_v = 'off';
		}
		if($(this).attr('_value') != _v) {
			changed = true;
		}
	});
	$('input[@type=radio]', f).each(function() {
		var _v = '';
		if(this.checked == true) {
			_v = 'on';
		} else {
			_v = 'off';
		}
		if($(this).attr('_value') != _v) {
			changed = true;
		}
	});
	$('select', f).each(function() {
		var _v = $(this).attr('_value');
		if(typeof($(this).attr('_value')) == 'undefined') {
			_v = '';
		}
		if(_v != this.options[this.selectedIndex].value) {
			changed = true;
		}
	});
	return changed;
}

上面的代码将表单的原始值以一个名为”_value”的attr保持在input和select标签上

window.onbeforeunload时判断form是否更改过并给出提示。

需要在具体某个页面里添加如下代码来绑定表单原始值:

$().ready(function() {
	$('form').enable_changed_form_confirm();
});

世界主要国家地区下拉菜单三级联动1

<html>
<head>
<title>级联菜单</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<style>
body,select
{
font-size:9pt;
font-family:Verdana;
}
a
{
color:red;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
</style>
<SCRIPT LANGUAGE=”JavaScript”>
<!–
function Dsy()
{
this.Items = {};
}
Dsy.prototype.add = function(id,iArray)
{
this.Items[id] = iArray;
}
Dsy.prototype.Exists = function(id)
{
if(typeof(this.Items[id]) == “undefined”) return false;
return true;
}

function change(v){
var str=”0″;
for(i=0;i<v;i++){ str+=(“_”+(document.getElementById(s[i]).selectedIndex-1));};
var ss=document.getElementById(s[v]);
with(ss){
length = 0;
options[0]=new Option(opt0[v],opt0[v]);
if(v && document.getElementById(s[v-1]).selectedIndex>0 || !v)
{
   if(dsy.Exists(str)){
    ar = dsy.Items[str];
    for(i=0;i<ar.length;i++)options[length]=new Option(ar[i],ar[i]);
    if(v)options[1].selected = true;
   }
}
if(++v<s.length){change(v);}
}
}

var dsy = new Dsy();

dsy.add(“0”,[“中国”,”韩国”,”日本”,”新加坡”,”马来西亚”,”菲律宾”,”沙特阿拉伯”,”朝鲜”,”越南”,”缅甸”,”德国”,”英国”,”法国”,”爱尔兰”,”波兰”,”西班牙”,”意大利”,”俄罗斯”,”荷兰”,”美国”,”加拿大”,”巴西”,”阿根廷”,”新西兰”,”澳大利亚”,”印度”,”埃及”]);

dsy.add(“0_0”,[“安徽”,”北京”,”福建”,”甘肃”,”广东”,”广西”,”贵州”,”海南”,”河北”,”河南”,”黑龙江”,”湖北”,”湖南”,”吉林”,”江苏”,”江西”,”辽宁”,”内蒙古”,”宁夏”,”青海”,”山东”,”山西”,”陕西”,”上海”,”四川”,”天津”,”西藏”,”新疆”,”云南”,”浙江”,”重庆”]);

dsy.add(“0_0_0”,[“安庆”,”蚌埠”,”巢湖”,”池州”,”滁州”,”阜阳”,”合肥”,”淮北”,”淮南”,”黄山”,”六安”,”马鞍山”,”宿州”,”铜陵”,”芜湖”,”宣城”,”亳州”]);
dsy.add(“0_0_1”,[“北京”]);
dsy.add(“0_0_2”,[“福州”,”龙岩”,”南平”,”宁德”,”莆田”,”泉州”,”三明”,”厦门”,”漳州”]);
dsy.add(“0_0_3”,[“白银”,”定西”,”甘南藏族自治州”,”嘉峪关”,”金昌”,”酒泉”,”兰州”,”临夏回族自治州”,”陇南”,”平凉”,”庆阳”,”天水”,”武威”,”张掖”]);
dsy.add(“0_0_4”,[“潮州”,”东莞”,”佛山”,”广州”,”河源”,”惠州”,”江门”,”揭阳”,”茂名”,”梅州”,”清远”,”汕头”,”汕尾”,”韶关”,”深圳”,”阳江”,”云浮”,”湛江”,”肇庆”,”中山”,”珠海”]);
dsy.add(“0_0_5”,[“百色”,”北海”,”崇左”,”防城港”,”桂林”,”贵港”,”河池”,”贺州”,”来宾”,”柳州”,”南宁”,”钦州”,”梧州”,”玉林”]);
dsy.add(“0_0_6”,[“安顺”,”毕节”,”贵阳”,”六盘水”,”黔东南苗族侗族自治州”,”黔南布依族苗族自治州”,”黔西南布依族苗族自治州”,”铜仁”,”遵义”]);
dsy.add(“0_0_7”,[“白沙黎族自治县”,”保亭黎族苗族自治县”,”昌江黎族自治县”,”澄迈县”,”定安县”,”东方”,”海口”,”乐东黎族自治县”,”临高县”,”陵水黎族自治县”,”琼海”,”琼中黎族苗族自治县”,”三亚”,”屯昌县”,”万宁”,”文昌”,”五指山”,”儋州”]);
dsy.add(“0_0_8”,[“保定”,”沧州”,”承德”,”邯郸”,”衡水”,”廊坊”,”秦皇岛”,”石家庄”,”唐山”,”邢台”,”张家口”]);
dsy.add(“0_0_9”,[“安阳”,”鹤壁”,”济源”,”焦作”,”开封”,”洛阳”,”南阳”,”平顶山”,”三门峡”,”商丘”,”新乡”,”信阳”,”许昌”,”郑州”,”周口”,”驻马店”,”漯河”,”濮阳”]);
dsy.add(“0_0_10”,[“大庆”,”大兴安岭”,”哈尔滨”,”鹤岗”,”黑河”,”鸡西”,”佳木斯”,”牡丹江”,”七台河”,”齐齐哈尔”,”双鸭山”,”绥化”,”伊春”]);
dsy.add(“0_0_11”,[“鄂州”,”恩施土家族苗族自治州”,”黄冈”,”黄石”,”荆门”,”荆州”,”潜江”,”神农架林区”,”十堰”,”随州”,”天门”,”武汉”,”仙桃”,”咸宁”,”襄樊”,”孝感”,”宜昌”]);
dsy.add(“0_0_12”,[“常德”,”长沙”,”郴州”,”衡阳”,”怀化”,”娄底”,”邵阳”,”湘潭”,”湘西土家族苗族自治州”,”益阳”,”永州”,”岳阳”,”张家界”,”株洲”]);
dsy.add(“0_0_13”,[“白城”,”白山”,”长春”,”吉林”,”辽源”,”四平”,”松原”,”通化”,”延边朝鲜族自治州”]);
dsy.add(“0_0_14”,[“常州”,”淮安”,”连云港”,”南京”,”南通”,”苏州”,”宿迁”,”泰州”,”无锡”,”徐州”,”盐城”,”扬州”,”镇江”]);
dsy.add(“0_0_15”,[“抚州”,”赣州”,”吉安”,”景德镇”,”九江”,”南昌”,”萍乡”,”上饶”,”新余”,”宜春”,”鹰潭”]);
dsy.add(“0_0_16”,[“鞍山”,”本溪”,”朝阳”,”大连”,”丹东”,”抚顺”,”阜新”,”葫芦岛”,”锦州”,”辽阳”,”盘锦”,”沈阳”,”铁岭”,”营口”]);
dsy.add(“0_0_17”,[“阿拉善盟”,”巴彦淖尔盟”,”包头”,”赤峰”,”鄂尔多斯”,”呼和浩特”,”呼伦贝尔”,”通辽”,”乌海”,”乌兰察布盟”,”锡林郭勒盟”,”兴安盟”]);
dsy.add(“0_0_18”,[“固原”,”石嘴山”,”吴忠”,”银川”]);
dsy.add(“0_0_19”,[“果洛藏族自治州”,”海北藏族自治州”,”海东”,”海南藏族自治州”,”海西蒙古族藏族自治州”,”黄南藏族自治州”,”西宁”,”玉树藏族自治州”]);
dsy.add(“0_0_20”,[“滨州”,”德州”,”东营”,”菏泽”,”济南”,”济宁”,”莱芜”,”聊城”,”临沂”,”青岛”,”日照”,”泰安”,”威海”,”潍坊”,”烟台”,”枣庄”,”淄博”]);
dsy.add(“0_0_21”,[“长治”,”大同”,”晋城”,”晋中”,”临汾”,”吕梁”,”朔州”,”太原”,”忻州”,”阳泉”,”运城”]);
dsy.add(“0_0_22”,[“安康”,”宝鸡”,”汉中”,”商洛”,”铜川”,”渭南”,”西安”,”咸阳”,”延安”,”榆林”]);
dsy.add(“0_0_23”,[“上海”]);
dsy.add(“0_0_24”,[“阿坝藏族羌族自治州”,”巴中”,”成都”,”达州”,”德阳”,”甘孜藏族自治州”,”广安”,”广元”,”乐山”,”凉山彝族自治州”,”眉山”,”绵阳”,”南充”,”内江”,”攀枝花”,”遂宁”,”雅安”,”宜宾”,”资阳”,”自贡”,”泸州”]);
dsy.add(“0_0_25”,[“天津”]);
dsy.add(“0_0_26”,[“阿里”,”昌都”,”拉萨”,”林芝”,”那曲”,”日喀则”,”山南”]);
dsy.add(“0_0_27”,[“阿克苏”,”阿拉尔”,”巴音郭楞蒙古自治州”,”博尔塔拉蒙古自治州”,”昌吉回族自治州”,”哈密”,”和田”,”喀什”,”克拉玛依”,”克孜勒苏柯尔克孜自治州”,”石河子”,”图木舒克”,”吐鲁番”,”乌鲁木齐”,”五家渠”,”伊犁哈萨克自治州”]);
dsy.add(“0_0_28”,[“保山”,”楚雄彝族自治州”,”大理白族自治州”,”德宏傣族景颇族自治州”,”迪庆藏族自治州”,”红河哈尼族彝族自治州”,”昆明”,”丽江”,”临沧”,”怒江傈傈族自治州”,”曲靖”,”思茅”,”文山壮族苗族自治州”,”西双版纳傣族自治州”,”玉溪”,”昭通”]);
dsy.add(“0_0_29”,[“杭州”,”湖州”,”嘉兴”,”金华”,”丽水”,”宁波”,”绍兴”,”台州”,”温州”,”舟山”,”衢州”]);
dsy.add(“0_0_30”,[“重庆”]);

dsy.add(“0_1”,[“汉城特別市”,”釜山广域市”,”大邱广域市”,”仁川广域市”,”光州广域市”,”大田广域市”,”蔚山广域市”,”京畿道”,”江原道”,”忠清北道”,”忠清南道”,”全罗北道”,”全罗南道”,”庆尚北道”,”庆尚南道”,”济州道”]);
dsy.add(“0_1_0”,[“汉城”]);
dsy.add(“0_1_1”,[“釜山”,”机张郡”]);
dsy.add(“0_1_2”,[“大邱”,”达城郡”]);
dsy.add(“0_1_3”,[“仁川”,”江华郡”,”瓮津郡”]);
dsy.add(“0_1_4”,[“光州”]);
dsy.add(“0_1_5”,[“大田”]);
dsy.add(“0_1_6”,[“蔚山”,”蔚州郡”]);
dsy.add(“0_1_7”,[“水原市”,”城南市”,”安山市”,”高阳市”,”安养市”,”富川市”]);
dsy.add(“0_1_8”,[“春川市”,”原州市”,”江陵市”]);
dsy.add(“0_1_9”,[“清州市”]);
dsy.add(“0_1_10”,[“天安市”]);
dsy.add(“0_1_11”,[“全州市”,”群山市”,”益山市”]);
dsy.add(“0_1_12”,[“木浦市”,”丽水市”,”顺天市”]);
dsy.add(“0_1_13”,[“浦项市”,”龟尾市”,”庆州市”]);
dsy.add(“0_1_14”,[“昌原市”,”马山市”,”晋州市”]);
dsy.add(“0_1_15”,[“济州市”,”西归浦市”,”北济州郡”,”南济州郡”]);

dsy.add(“0_2”,[“东京都”,”神奈川县”,”大阪府”,”爱知县”,”北海道”,”兵库县”,”京都府”,”福冈县”,”神奈川县”,”埼玉县”,”广岛县”,”宫城县”,”福冈县”,”千叶县”]);
dsy.add(“0_2_0”,[“东京”]);
dsy.add(“0_2_1”,[“横滨市”]);
dsy.add(“0_2_2”,[“大阪市”]);
dsy.add(“0_2_3”,[“名古屋市 “]);
dsy.add(“0_2_4”,[“札幌市”]);
dsy.add(“0_2_5”,[“神戸市”]);
dsy.add(“0_2_6”,[“京都市”]);
dsy.add(“0_2_7”,[“福冈市”]);
dsy.add(“0_2_8”,[“川崎市”]);
dsy.add(“0_2_9”,[“埼玉市”]);
dsy.add(“0_2_10”,[“广岛市”]);
dsy.add(“0_2_11”,[“仙台市”]);
dsy.add(“0_2_12”,[“北九州市 “]);
dsy.add(“0_2_13”,[“千叶市”]);

dsy.add(“0_3”,[“新加坡”]);
dsy.add(“0_3_0”,[“新加坡”]);

dsy.add(“0_4”,[“吉打 Kedah”,”槟榔屿 Pulau Pinang”,”霹雳 Perak”,”吉兰丹 Kelantan”,”丁加奴 Terengganu”,”彭亨 Pahang”,”雪兰莪 Selangor”,”吉隆坡联邦直辖区 Kuala Lumpur”,”布特拉再也联邦直辖区 Putrajaya”,”森美兰 Sembilan”,”马六甲 Melaka”,”柔佛 Johor”,”斗湖省 Tawau”,”山打根省 Sandakan”,”西海岸省 Pantai Barat”]);
dsy.add(“0_4_0”,[“亚罗士打 Alor Setar”,”浮罗交怡 Langkawi”,”古邦巴素 Kubang Pasu”,”巴东得腊 Padang Terap”,”哥打士打 Kota Setar”]);
dsy.add(“0_4_1”,[“槟城 George Town”,”北区(北海) Utara (Butterworth)”,”中区(大山脚) Tengah (Bkt. Mertajam)”,”南区(高渊) Selatan (Nibong Tebal)”,”东北 Timur Laut”]);
dsy.add(“0_4_2”,[“怡保 Ipoh”,”拉律-马当 Larut & Matang”,”近打 Kinta”,”江沙 Kuala Kangsar”]);
dsy.add(“0_4_3”,[“哥打巴鲁 Kota Baharu”,”道北 Tumpat”,”哥登峇鲁 Kota Bharu”,”巴西马 Pasir Mas”]);
dsy.add(“0_4_4”,[“瓜拉丁加奴 Kuala Terengganu”,”勿述 Besut”,”瓜拉丁加奴 Kuala Terengganu”,”龙运 Dungun”,”甘马挽 Kemaman”]);
dsy.add(“0_4_5”,[“关丹 Kuantan”,”金马仑高原 Cameron Highlands”,”立卑 Lipis”,”关丹 Kuantan”,”而连突 Jerantut”]);
dsy.add(“0_4_6”,[“莎亚南 Shah Alam “,”沙白安南 Sabak Bernam”,”乌鲁雪兰莪 Ulu Selangor”,”瓜拉雪兰莪 Kuala Selangor”]);
dsy.add(“0_4_7”,[“吉隆坡 Kuala Lumpur”]);
dsy.add(“0_4_8”,[“布特拉再也 Putrajaya”]);
dsy.add(“0_4_9”,[“芙蓉 Seremban”,”日叻务 Jelebu”,”仁保 Jempol”]);
dsy.add(“0_4_10”,[“马六甲 Melaka”,”亚罗牙也 Alor Gajah”]);
dsy.add(“0_4_11”,[“新山 Johor Baharu”,”昔加末 Segamat”,”丰盛港 Mersing”,”居銮 Keluang”]);
dsy.add(“0_4_12”,[“斗湖 Tawau”,”拿笃 Lahad Datu”]);
dsy.add(“0_4_13”,[“山打根 Sandakan”,”京那巴登岸 Kinabatangan”]);
dsy.add(“0_4_14”,[“哥打京那峇鲁(亚庇) Kota Kinabalu”,”兰脑 Ranau”,”古打毛律 Kota Belud”,”斗亚兰 Tuaran”]);

dsy.add(“0_5”,[“伊罗戈斯 Ilocos”,”卡加延河谷 Cagayan”,”中央吕宋 Central Luzon”,”甲拉巴松 Calabarzon”,”比科尔 Bicol”,”西米沙鄢 Western Visayas”,”中米沙鄢 Central Visayas”,”东米沙鄢 Eastern Visayas”,”国家首都区 National Capital Region”]);
dsy.add(“0_5_0”,[“圣费尔南多* San Fernando”]);
dsy.add(“0_5_1”,[“土格加劳 Tuguegarao”]);
dsy.add(“0_5_2”,[“圣费尔南多* San Fernando”]);
dsy.add(“0_5_3”,[“奎松城 Quezon”]);
dsy.add(“0_5_4”,[“黎牙实比 Legaspi”]);
dsy.add(“0_5_5”,[“伊洛伊洛 Legaspi”]);
dsy.add(“0_5_6”,[“宿务 Cebu”]);
dsy.add(“0_5_7”,[“塔克洛班 Tacloban”]);
dsy.add(“0_5_8”,[“马尼拉 Manila”]);

dsy.add(“0_6”,[“利雅得 Ar Riyad”,”麦加 Makkah”,”麦地那 Al Madinah”,”东部 Ash Sharqiyah”,”卡西姆 Al Qasim”,”哈伊勒 Ha’il”,”塔布克 Tabuk”,”北部边疆 Al Hudud ash Shamaliyah”,”吉赞 Jizan”,”纳季兰 Najran”,”巴哈 Al Bahah”,”朱夫 Al Jawf”,”阿西尔 ‘Asir”]);
dsy.add(“0_6_0”,[“利雅得 Riyad”,”海耶 Al-Kharj”]);
dsy.add(“0_6_1”,[“麦加 Makkah”,”吉达 Jiddah”,”塔伊夫 At-Ta’if”]);
dsy.add(“0_6_2”,[“麦地那 Madinah”,”延布 Yanbu’ al-Bahr”]);
dsy.add(“0_6_3”,[“达曼 Dammam”,”胡富夫 Al-Hufūf”,”姆巴拉兹 Al-Mubarraz”,”朱拜勒 Al-Jubayl”,”哈费尔巴廷 Hafar al-Bātin”]);
dsy.add(“0_6_4”,[“布赖代 Buraydah”]);
dsy.add(“0_6_5”,[“哈伊勒 Ha’il”]);
dsy.add(“0_6_6”,[“塔布克 Tabuk”]);
dsy.add(“0_6_7”,[“阿尔阿尔 Ar’ar”]);
dsy.add(“0_6_8”,[“吉赞 Jizan”]);
dsy.add(“0_6_9”,[“纳季兰 Najran”]);
dsy.add(“0_6_10”,[“巴哈 Al Bahah”]);
dsy.add(“0_6_11”,[“塞卡卡 Sakaka”]);
dsy.add(“0_6_12”,[“艾卜哈 Abhā”,”海米斯穆谢特 Khamīs Mushayt”]);

dsy.add(“0_7”,[“平壤直辖市”,”罗先直辖市”,”平安南道”,”平安北道”,”慈江道”,”两江道”,”咸镜北道”,”咸镜南道”,”黄海北道”,”黄海南道”,”江原道”]);
dsy.add(“0_7_0”,[“平壤”]);
dsy.add(“0_7_1”,[“罗津”]);
dsy.add(“0_7_2”,[“南浦特级市”,”平城市”,”顺川市”,”德川市”,”安州市”,”价川市”]);
dsy.add(“0_7_3”,[“新义州市”,”龟城市”,”定州市”]);
dsy.add(“0_7_4”,[“江界市”,”满浦市”,”煕川市”]);
dsy.add(“0_7_5”,[“恵山市”]);
dsy.add(“0_7_6”,[“清津市”,”金策市”,”会宁市”]);
dsy.add(“0_7_7”,[“咸兴市”,”兴南市”,”新浦市”,”端川市”]);
dsy.add(“0_7_8”,[“沙里院市”,”松林市”,”开城市”]);
dsy.add(“0_7_9”,[“海州市”]);
dsy.add(“0_7_10”,[“元山市”,”文川市”]);

dsy.add(“0_8”,[“河内市”,”山罗”,”奠边”,”谅山”,”河西”,”清化”,”义安”,”广南”,”嘉莱”,”多乐”,”平福”,”金瓯”]);
dsy.add(“0_8_0”,[“河内市”]);
dsy.add(“0_8_1”,[“山罗”]);
dsy.add(“0_8_2”,[“奠边府市”,”孟雷”]);
dsy.add(“0_8_3”,[“谅山市”]);
dsy.add(“0_8_4”,[“河东”,”山西”]);
dsy.add(“0_8_5”,[“清化市”,”岑山”,”拜尚”]);
dsy.add(“0_8_6”,[“荣市”,”扩路”]);
dsy.add(“0_8_7”,[“三歧”,”会安”]);
dsy.add(“0_8_8”,[“波来古市”,”安溪”]);
dsy.add(“0_8_9”,[“邦美蜀市”]);
dsy.add(“0_8_10”,[“东帅”]);
dsy.add(“0_8_11”,[“金瓯市”]);

dsy.add(“0_9”,[“实皆省 Sagaing”,”望濑县 Monywa”,”勃固省 Bago”,”马圭省 Magway”,”曼德勒省 Mandalay”,”德林达依省 Tanintharyi”,”伊洛瓦底省 Ayeyarwady”,”仰光省 Yangon”,”克钦邦 Kachin”,”克耶邦 Kayah”,”克伦邦 Kayin”,”钦邦 Chin”,”孟邦 Mon”,”若开邦 Rakhine”,”掸邦 Shan”]);
dsy.add(“0_9_0”,[“实皆 Sagaing”]);
dsy.add(“0_9_1”,[“望濑 Monywa”]);
dsy.add(“0_9_2”,[“勃固 Bago”]);
dsy.add(“0_9_3”,[“马圭 Magway”]);
dsy.add(“0_9_4”,[“曼德勒 Mandalay”]);
dsy.add(“0_9_5”,[“土瓦 Dawei”]);
dsy.add(“0_9_6”,[“勃生 Pathein”]);
dsy.add(“0_9_7”,[“仰光 Yangan “]);
dsy.add(“0_9_8”,[“密支那 Myitkyina”]);
dsy.add(“0_9_9”,[“垒固 Loi-kaw”]);
dsy.add(“0_9_10”,[“巴安 Pa-an”]);
dsy.add(“0_9_11”,[“哈卡 Haka”]);
dsy.add(“0_9_12”,[“毛淡棉 Mawlamyine”]);
dsy.add(“0_9_13”,[“实兑 Akyab”]);
dsy.add(“0_9_14”,[“东枝 Taunggyi”]);

dsy.add(“0_10”,[“巴登-符腾堡 Baden-Württemberg”,”拜恩(巴伐利亚) Bayern”,”柏 林 Berlin”,”勃兰登堡 Brandenburg”,”不来梅 Bremen”,”汉 堡 Hamburg”,”黑 森 Hessen”,”梅克伦堡-前波莫瑞 Mecklenburg-Vorpommern”,”下萨克森 Niedersachsen”,”北莱茵-威斯特法 伦 Nordrhein-Westfalen”,”莱茵兰-普法尔茨 Rheinland-Pfalz”,”萨 尔 Saarland”,”萨克森 Sachsen”,”萨克森-安哈特 Sachsen-Anhalt”,”石勒苏益格-荷尔斯泰因 Schleswig-Holstein”,”图林根 Thüringen”]);
dsy.add(“0_10_0”,[“斯图加特 Stuttgart”,”卡尔斯鲁厄 Karlsruhe”,”弗赖堡 Freiburg”,”图宾根 Tübingen”]);
dsy.add(“0_10_1”,[“慕尼黑 München “,”下拜恩 Niederbayern”,”上普法尔茨 Oberpfalz”,”上弗兰肯 Oberfranken”,”中弗兰肯 Mittelfranken”,”外弗兰肯 Unterfranken”,”施瓦本 Schwaben”]);
dsy.add(“0_10_2”,[“柏林 Berlin”]);
dsy.add(“0_10_3”,[“波茨坦 Potsdam”]);
dsy.add(“0_10_4”,[“不来梅 Bremen”]);
dsy.add(“0_10_5”,[“汉堡 Hamburg”]);
dsy.add(“0_10_6”,[“达姆施塔特 Darmstadt”,”吉森 Gieben”,”卡塞尔 Kassel”]);
dsy.add(“0_10_7”,[“什未林 Schwerin”]);
dsy.add(“0_10_8”,[“不伦瑞克 Braunschweig”,”汉诺威 Hannover”]);
dsy.add(“0_10_9”,[“杜塞尔多夫 Düsseldorf”,”科隆 Koln”,”明斯特 Münster”,”代特莫尔特 Detmold”]);
dsy.add(“0_10_10”,[“科布伦次 Koblenz “,”特里尔 Trier”,”莱茵黑森-普法尔茨”]);
dsy.add(“0_10_11”,[“萨尔布吕肯 Saarbrücken”]);
dsy.add(“0_10_12”,[“开姆尼斯 Chemnitz”,”德累斯顿 Dresden”,”莱比锡 Leipzig”]);
dsy.add(“0_10_13”,[“德绍 Dessau”,”哈雷 Halle”,”马格德堡 Magdeburg”]);
dsy.add(“0_10_14”,[“基尔 Kiel”]);
dsy.add(“0_10_15”,[“埃尔富特 Erfurt”]);

 

dsy.add(“0_11”,[“英格兰 England”,”威尔士 Wales”,”苏格兰 Scotland”,”北爱尔兰 Northern Ireland”]);
dsy.add(“0_11_0”,[“坎布里亚 Cumbria”,”兰开夏 Lancashire “,”布莱克本 Blackburn with Darwen”,”大曼彻斯特 Greater Manchester”,”柴郡 Cheshire “,”诺森伯兰 Northumberland”,”达勒姆 Durham”,”北约克郡 North Yorkshire”,”约克郡东区 East Riding of Yorkshire”,”西约克郡 West Yorkshire”,”南约克郡 South Yorkshire”,”林肯郡 Lincolnshire”,”诺丁汉郡 Nottinghamshire”,”斯塔福德郡 Staffordshire”,”诺福克 Norfolk”,”伦敦 London”,”白金汉郡 Buckinghamshire”,”牛津郡 Oxfordshire”,”格洛斯特郡 Gloucestershire”]);
dsy.add(“0_11_1”,[“康威 Conwy *”,”圭内斯 Gwynedd”,”锡尔迪金 Ceredigion”,”波伊斯 Powys”,”彭布罗克郡 Pembrokeshire”,”卡马森郡 Carmarthenshire”]);
dsy.add(“0_11_2”,[“苏格兰高地 Highland”,”马里 Moray”,”阿伯丁郡 Aberdeenshire”,”安格斯 Angus”,”珀斯-金罗斯 Perth and Kinross”,”法夫 Fife”,”斯特灵 Stirling”,”阿盖尔-比特 Argyll and Bute”,”苏格兰边界 Scottish Borders”,”邓弗里斯-加洛韦 Dumfries and Galloway”]);
dsy.add(“0_11_3”,[“阿兹 Ards”,”卡斯尔雷 Castlereagh”,”唐 Down”,”贝尔法斯特 Belfast, City of”,”利斯本 Lisburn”,”巴利米纳 Ballymena”,”莫伊尔 Moyle”,”阿马 Armagh”]);

dsy.add(“0_12”,[“法兰西岛 Ile-de-France”,”香槟-阿登 Champagne-Ardenne”,”皮卡第 Picardie”,”上诺曼底 Haute-Normandie”,”中央 Centre”,”下诺曼底 Basse-Normandie”,”勃艮第 Bourgogne”,”北部-加莱海峡 Nord-pas-de-Calais”,”洛林 Lorraine”,”阿尔萨斯 Alsace”,”弗朗什孔泰 Franche-Comté”,”卢瓦尔河地区 Pays de la Loire”,”布列塔尼 Bretagne”,”普瓦图-夏朗德 Poitou-Charentes”,”阿基坦 Aquitaine”,”南部-比利牛斯 Midi-Pyrénées”,”利穆赞 Limousin”,”罗讷-阿尔卑斯 Rhone-Alpes”,”奥弗涅 Auvergne”,”朗格多克-鲁西永 Languedoc-Roussillon”,”普罗旺斯-阿尔卑斯-蓝色海岸 Provence-Alpes-Cote d’Azur”,”科西嘉 Corse”]);
dsy.add(“0_12_0”,[“巴黎 Paris”]);
dsy.add(“0_12_1”,[“兰斯 Reims”]);
dsy.add(“0_12_2”,[“亚眠 Ameiens”]);
dsy.add(“0_12_3”,[“鲁昂 Rouen”]);
dsy.add(“0_12_4”,[“奥尔良 Orléans”]);
dsy.add(“0_12_5”,[“卡昂 Caen”]);
dsy.add(“0_12_6”,[“第戎 Dijon”]);
dsy.add(“0_12_7”,[“里尔 Lille”]);
dsy.add(“0_12_8”,[“南锡 Nancy”]);
dsy.add(“0_12_9”,[“斯特拉斯堡 Strasbourg”]);
dsy.add(“0_12_10”,[“贝桑松 Besancon”]);
dsy.add(“0_12_11”,[“南特 Nantes”]);
dsy.add(“0_12_12”,[“雷恩 Rennes”]);
dsy.add(“0_12_13”,[“普瓦捷 Poitiers”]);
dsy.add(“0_12_14”,[“波尔多 Bordeaux”]);
dsy.add(“0_12_15”,[“图卢兹 Toulouse”]);
dsy.add(“0_12_16”,[“利摩日 Limoges”]);
dsy.add(“0_12_17”,[“里昂 Lyon”]);
dsy.add(“0_12_18”,[“克莱蒙费朗 Clerment-Ferrand”]);
dsy.add(“0_12_19”,[“蒙彼里埃 Montpellier”]);
dsy.add(“0_12_20”,[“马赛 Marseille”]);
dsy.add(“0_12_21”,[“阿雅克肖 Ajaccio”]);

dsy.add(“0_13”,[“穆斯特省 Munster”,”康诺特省 Connacht”,”伦斯特省 Leinster”,”阿尔斯特省 Ulster”]);
dsy.add(“0_13_0”,[“科克 Cork”,”沃特福德 Waterford”,”利默里克 Limerick”,”凯里 Kerry”,”蒂珀雷里 Tipperary”,”克莱尔 Clare”]);
dsy.add(“0_13_1”,[“戈尔韦 Galway”,”梅奥 Mayo”,”罗斯康芒 Roscommon”,”利特里姆 Leitrim”,”斯莱戈 Sligo”]);
dsy.add(“0_13_2”,[“都柏林 Dublin”,”基尔代尔 Kildare”,”米斯 Meath”,”威克洛 Wicklow”,”西米斯 Westmeath”,”卡范 Cavan”,”朗福德 Longford”,”奥法利 Offaly”,”崂斯 Laoighis”,”卡洛 Carlow”,”基尔肯尼 Kilkenny”,”韦克斯福德 Wexford”]);
dsy.add(“0_13_3”,[“劳斯 Louth”,”多内加尔 Donegal”,”莫内根 Monaghan”,”阿马 Armagh”,”安特里姆 Antrim”,”德里 Derry”,”唐 Down”,”泰隆 Tyrone”,”弗马纳 Fermanagh”]);

dsy.add(“0_14”,[“下西里西亚 Dolnoslaskie”,”库亚瓦滨海 Kujawsko-Pomorskie”,”罗兹 Lódzkie “,”卢布林 Lubelskie”,”鲁布斯卡 Lubuskie”,”小波兰 Malopolskie”,”马佐夫舍 Mazowieckie”,”奥波莱 Opolskie”,”喀尔巴阡山 Podkarpackie”,”波德拉斯 Podlaskie”,”滨海 Pomorskie”,”西里西亚 Slaskie”,”圣十字 Swietokrzyskie”,”瓦尔米亚马祖尔 Warmińsko-Mazurskie”,”大波兰 Wielkopolskie”,”西滨海 Zachodniopomorskie”]);
dsy.add(“0_14_0”,[“弗罗茨瓦夫”,”耶莱尼亚古拉”,”瓦乌布日赫”,”莱格尼察”]);
dsy.add(“0_14_1”,[“比得哥什”,”托伦”,”格鲁琼兹”,”弗沃茨瓦韦克”]);
dsy.add(“0_14_2”,[“罗兹”,”彼得库夫”,”斯凯尔涅维采”,”谢拉兹”]);
dsy.add(“0_14_3”,[“卢布林”,”海乌姆”,”扎莫希奇”,”比亚瓦波德拉斯卡”]);
dsy.add(“0_14_4”,[“绿山城”,”大波兰地区戈茹夫”]);
dsy.add(“0_14_5”,[“克拉科夫”,”塔尔努夫”,”新松奇”]);
dsy.add(“0_14_6”,[“华沙”,”切哈努夫”,”普沃茨克”,”奥斯特罗文卡”,”谢德尔采”,”拉多姆”]);
dsy.add(“0_14_7”,[“奥波莱”]);
dsy.add(“0_14_8”,[“热舒夫”,”塔尔诺布热格”,”克罗斯诺”,”普热梅希尔”]);
dsy.add(“0_14_9”,[“比亚维斯托克”,”苏瓦乌基”,”沃姆扎”]);
dsy.add(“0_14_10”,[“格但斯克”,”格丁尼亚”,”索波特”,”斯武普斯克”]);
dsy.add(“0_14_11”,[“卡托维兹”,”琴斯托霍瓦”,”别尔斯科-比亚瓦”,”雷布尼克”,”索斯诺维茨”,”格利维采”,”比托姆”]);
dsy.add(“0_14_12”,[“凯尔采”]);
dsy.add(“0_14_13”,[“奥尔什丁”,”埃尔布隆格”]);
dsy.add(“0_14_14”,[“波兹南”,”皮瓦”,”卡利什”,”莱什诺”,”科宁”]);
dsy.add(“0_14_15”,[“什切青”,”科沙林”,”希维诺乌伊希切”]);

dsy.add(“0_15”,[“安达卢西亚 Andalucía”,”阿拉贡 Aragón”,”阿斯图利亚斯 Asturias”,”巴利阿里群岛 Baleares”,”加那利 Canarias”,”坎塔布利亚 Cantábria”,”卡斯蒂利亚-拉曼恰 Castilla-La Mancha”,”卡斯蒂利亚-莱昂 Castilla y Léon”,”加泰罗尼亚* Cataluna”,”加利西亚* Galicia”,”马德里 Madrid”]);
dsy.add(“0_15_0”,[“阿尔梅里亚 Almería”,”加的斯 Cádiz”,”科尔多瓦 Córdoba”,”格拉纳达 Granada”,”韦尔瓦 Huelva”,”哈恩 Jáen”,”马拉加 Málaga”,”塞维利亚 Sevilla”]);
dsy.add(“0_15_1”,[“韦斯卡 Huesca”,”特鲁埃尔 Teruel”,”萨拉戈萨 Zaragoza”]);
dsy.add(“0_15_2”,[“奥维耶多 Oviedo”]);
dsy.add(“0_15_3”,[“巴利阿里 Baleares”]);
dsy.add(“0_15_4”,[“拉斯帕尔马斯 Las Palmas”,”圣克鲁斯-德特内里费 Santa Cruz de Tenerife”]);
dsy.add(“0_15_5”,[“桑坦德 Santander”]);
dsy.add(“0_15_6”,[“阿尔瓦塞特 Albacete”,”雷阿尔城 Ciudad Real”,”昆卡 Cuenca”,”瓜达拉哈拉 Guadalajara”,”托莱多 Toledo”]);
dsy.add(“0_15_7”,[“阿维拉 ávila”,”布尔戈斯 Burgos”,”莱昂 León”,”帕伦西亚 Palencia”,”萨拉曼卡 Salamanca”,”塞哥维亚 Segovia”,”索里亚 Soria”,”巴利亚多利德 Valladolid”,”萨莫拉 Zamora”]);
dsy.add(“0_15_8”,[“巴塞罗那 Barcelona”,”赫罗纳 Gerona”,”莱里达 Lérida”,”塔拉戈纳 Tarragona”]);
dsy.add(“0_15_9”,[“拉科鲁尼亚 A Coruna”,”卢戈 Lugo”,”奥伦塞 Ourense”,”蓬特韦德拉 Pontevedra”]);
dsy.add(“0_15_10”,[“马德里 Madrid”]);

JavaScript常用功能代码

1. 使用 iframe 时,父窗体与子窗体之间的相互调用

// 父窗体调用子窗体内的函数
window.frames['ifm_id'].valueChange("id_101");
// 子窗体调用父窗体的函数
parent.refreshTree("nodeId_202");

 

2. 弹出窗体与返回值

// 弹出窗体
var url = "http://www.baidu.com";
win=window.showModalDialog(url,window,"dialogLeft:400;dialogTop:200;dialogWidth:560px;dialogHeight:380px;scroll:yes;menubar:no;toolbar:no;status:no;");
// 在弹出窗体中设置返回值
var result = new Array();
result[0] = "id_101";
result[1] = "name_202";
window.returnValue = result;
window.close();

 

3. javascript 作用域[只有全局作用域和函数作用域,javascript没有块作用域]

// 1. 全局作用域
var id = "global variable";    // 1.1 在函数外部定义的变量
function showMsg(){    
    message = "global message";// 1.2 未定义而直接赋值的变量
                               //     在第一次使用时被定义为全局变量
}
// 2. 函数作用域
function doCheck(){
    var data = "function data";// 2.1 在函数内部定义的变量
}

 

4. javascript 继承机制

// 1. 对象冒充继承
function Person(strName){
    // private fields
    var name = strName;
    // public methods
    this.getName = function(){
        return name;
    };    
}
function Student(strName,strSchool){
    // 定义父类的属性及方法    
    this.parent = Person;
    this.parent(strName);
    delete this.parent;        // 删除临时变量 parent
    // 定义新属性及方法    
    // private fields
    var school = strSchool;
    // public methods
    this.getSchool = function(){
        return school;
    };     
}
// 2. Funtion 对象的 call(..) 或 apply(..) 继承
//    call 和 apply 的区别在于:
//      call  的第二个参数为可变参数;
//      apply 的第二个参数为 Array;
function Animal(strName,intAge){
    // private fields
    var name = strName;
    var age = intAge;
    // public methods
    this.getName = function(){
        return name;
    }; 
    this.getAge = function(){
        return age;
    };
}
function Cat(strName,intAge,strColor){
    // 定义父类的属性及方法    
    Animal.call(this,strName,intAge);
    // Animal.apply(this,new Array(strName,intAge));
    // 定义新属性及方法    
    // private fields
    var color = strColor;
    // public methods
    this.getInfo = function(){
        return "name:" + this.getName() + "\n"
             + "age:" + this.getAge() + "\n"
             + "color:" + color;
    };
}
// 3. prototype 继承
//    prototype 声明的属性及方法被所有对象共享
//    prototype 只有在读属性的时候会用到
Function.prototype.extend = function(superClass){
    // 此处的 F 是为了避免子类访问父类中的属性 this.xxx
    function F(){};
    F.prototype = superClass.prototype;
    // 父类构造函数
    this.superConstructor = superClass;
    this.superClass = superClass.prototype;
    this.prototype = new F();
    this.prototype.constructor = this;
};
Function.prototype.mixin = function(props){    
    for (var p in props){        
        this.prototype[p] = props[p];        
    }
};
function Box(){}
Box.prototype = {    
    getText : function(){
        return this.text;
    },
    setText : function(text){
        this.text = text;
    }
};
function CheckBox(){}
CheckBox.extend(Box);
CheckBox.mixin({
    isChecked : function(){
        return this.checked;
    },
    setChecked : function(checked){
        this.checked = checked;
    }
});

 

5. call , apply & bind

// thisArg 表示在 fun 内部时 this 所指示的对象
// call & apply 将立即执行 fun 并返回结果
var result = fun.call(thisArg,arg1,...);
var result = fun.apply(thisArg,[argsArray]);
// thisArg 表示在 fun 内部时 this 所指示的对象
// bind 返回的是一个匿名函数
var tmpfun = fun.bind(thisArg);
var result = tmpfun(arg1,...);

 

<script type="text/javascript">
/**
 * 扩展 Function 的功能
 */
Function.prototype.bind = function(obj){
    var method = this;
    var tmpfun = function(){
        return method.apply(obj,arguments);
    };
    return tmpfun;
}
function Parent(){
    this.name = "parent";
}
function Child(){
    this.name = "child";
    this.getName = function(time){
        return time + " " + this.name;
    };
}
var parent = new Parent();
var child = new Child();
alert(child.getName(1));                // show 1 child
alert(child.getName.call(parent,2));    // show 2 parent [call & apply 会立即执行]
var tmpfun = child.getName.bind(parent);// bind 不会立即执行
alert(tmpfun(3));                       // show 3 parent
</script>

 

6. js “==” Operator

转换规则
   如果一个操作数是 Boolean 值,则比较之前将其转成数字:false -> 0, true -> 1;
   如果一个操作数是数字,另一操作数是字符串,则比较之前将字符串转成数字;
   如果一个操作数是对象,另一操作数是数字或字符串,则比较之前会将对象转为基本类型,
       引擎会先尝试调用 valueOf(),如果 valueOf() 没有 override 或返回一个对象,
       则引擎会尝试调用 toString(),如果 toString() 没有 override 或返回一个对象,则抛出异常;
   如果是两个对象进行比较,则判断它们是否引用同一对象;
   如果一个操作数是 NaN, == 将返回 false, != 将返回 true;
   null 和 undefined 与其它值比较将返回 false,
       但 null == null, undefined == undefined, null == undefined;
   参与比较时 null 和 undefined 不能转为其它值;  

 

7. END.

 

附录:

1. Mozilla developer center JavaScript Reference
https://developer.mozilla.org/en/JavaScript/Reference

2. Methods
https://developer.mozilla.org/en/DOM/window#Methods

tree

带选择框的JS树控件2 (为JSTree再次提速):http://www.iteye.com/topic/487771

JavaScript树型菜单 dtree:  http://jeasony.iteye.com/blog/284708

js  树: http://www.google.com.hk/search hl=zh-CN&source=hp&biw=1020&bih=598&q=js++%E6%A0%91&aq=f&aqi=&aql=&oq=

Ubuntu下的全文替换命令

Ubuntu 下的全文替换命令[这里介绍的是整个目录下的文件替换,如果是单个文件的替换可使用 vi 替换即可]

首先,从简单的需求说起。

1. 需求描述: (最简单的:源自网文)

  我们需要将 /home/pqcc/workspace/python 目录下所有包含 javascript 的字符替换为ssssssss

2. 解决方法:

(1).  > cd /home/pqcc/workspace/python (/home/pqcc/workspace/python 是你要替换的目录)

(2). >  perl -pi -e ‘s|javascript|ssssssss|g’ `find ./ -type f`

(*)  find ./ -type f 此命令是显示当前目录下所有的文件

(*)  如果不写最后的那个g,s|javascript|ssssssss|g 将只替换每一行开头的javascript

再次: (下文是较复杂的一个需求,如果你的问题已经解决了,可以到此为止).

1. 需求描述:(complex) :

  将 <a href=”javascript:jumpTo(‘contact’)”>CONTACT</a> 替换为: <a href=”contact”>CONTACT</a>

  > 看起来有点乱, 细化一下需求:  将  javascript:jumpTo(‘contact’) 替换为 contact.

2. 解决方法:

(1). 表达式:  perl -pi -e ‘s|javascript:jumpTo\(‘\”(\w+)’\”\)|$1|g’ `find ./ -type f`

    (2). 注意事项:

    > 需要对 ‘  和 ” 进行转义。使用 \

    > w+ 表示: 匹配字母或数字或下划线或汉字.

理解闭包

 

参考资料:

http://xlaaa111.iteye.com/blog/669421

http://www.iteye.com/topic/296492

http://www.iteye.com/topic/305248

http://apps.hi.baidu.com/share/detail/8489632

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

http://blog.belltoy.net/javascript_scope_call_object_closure.html

 

其中,有些地方不大理解

http://xlaaa111.iteye.com/blog/669421 写道
本段中提到了两个重要的词语:函数的定义与执行。文中提到函数的作用域是在定义函数时候就已经确定,而不是在执行的时候确定(参看步骤1和3)。用一段代码来说明这个问题:

function f(x) {
var g = function () { return x; }
return g;
}
var h = f(1);
alert(h());这段代码中变量h指向了f中的那个匿名函数(由g返回)。

假设函数h的作用域是在执行alert(h())确定的,那么此时h的作用域链是:h的活动对象->alert的活动对象->window对象。
假设函数h的作用域实在定义时确定的,就是说h指向的那个匿名函数在定义的时候就已经确定了作用域。那么在执行的时候,h的作用域链为:h的活动对象->f的活动对象->window对象。
如果第一种假设成立,那输出值就是undefined;如果第二种假设成立,输出值则为1。

运行结果证明了第2个假设是正确的,说明函数的作用域确实是在定义这个函数的时候就已经确定了。

 

这个地方需要注意:

http://www.iteye.com/topic/296492 写道
var scope = “global” //定义全局变量
function print() {
alert(scope);
}
function change() {
var scope = “local”; //定义局部变量
print(); //虽然是在change函数的作用域内调用print函数,
//但是print函数执行时仍旧按照它定义时的作用域起作用
}
change(); //golbal

 

这个例子不错,可以参考,整理下思路
http://www.iteye.com/topic/296492 写道
来看一个利用闭包来模拟私有属性的例子
function Person(name, age) {
this.getName = function() { return name; };
this.setName = function(newName) { name = newName; };
this.getAge = function() { return age; };
this.setAge = function(newAge) { age = newAge; };
}

var p1 = new Person(“sdcyst”,3);
alert(p1.getName()); //sdcyst
alert(p1.name); //undefined 因为Person(‘类’)没有name属性
p1.name = “mypara” //显示的给p1添加name属性
alert(p1.getName()); //sdcyst 但是并不会改变getName方法的返回值
alert(p1.name); //mypara 显示出p1对象的name属性
p1.setName(“sss”); //改变私有的”name”属性
alert(p1.getName()); //sss
alert(p1.name); //仍旧为mypara

 

作用域链的解释:在定义的时候就已经确定

http://www.iteye.com/topic/305248 写道
function f1(){var a=1;f2();}
function f2(){return a;}
f1();//a没有定义

先看看函数f1,调用了函数f2,因为函数局部变量a也在f1中,可能期望函数f2也访问a,但事实却不是这样。

因为这个时候f2函数已经定义完毕了,而它的范围没有a被找到。不管是函数f1还是函数f2,仅仅能访问的是本身的局部变 量或者全局变量。

 不过还是不大理解作用域和执行环境,下面这两个例子就不是很理解

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 写道
代码片段一。
  var name = “The Window”;
  var object = {
    name : “My Object”,
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());

代码片段二。
  var name = “The Window”;
  var object = {
    name : “My Object”,
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());