json2select

这是我之前为了ThinkSNS写的一个小工具。通过json生成无限联动的select。至少要求jQuery 1.2.3 以上,因为我用了data方法。
查看DEMO 源文件 min版

//构建如下json,t为列表框的text,v为列表框的value,s表示子一级对象
var json=[
{
t:”欧洲某地”,
v:”欧洲”
},
{
t:”中国某地”,
v:”中国”,
s:[
{
t:”上海”,
v:”上海”
},
{
t:”云南某地”,
v:”云南”,
s:[
{
t:”大理”,
v:”大理”
}
]
}
]
},
{
t:”日本某地”,
v:”日本”,
s:[
{
t:”东京”,
v:”东京”
},
{
t:”北海道”,
v:”北海道”,
s:[
{
t:”北海道的某个地方”,
v:”北海道的某个地方”
}
]
}
]
}
];
//调用即可
$(“#selectt”).json2select(json,[“中国”,”云南”,”大理”]);

另外,如果用1.2.1的也想用的话,可以手动提取1.2.6里的data方法,或者简单用下面的模拟一下即可

(function($) {
$.fn.data=function(key,value) {
return $.data(this[0],key,value);
}
})(jQuery);

update:
附: 全国城市数据
并且更新到了 1.0.1版。以前下载的同学可以重新下载一份。

JavaScript switch case 语句设置范围

不知是否出于什么缘故,我google搜索
javascript switch case 范围
这几个关键字,出来的前几条都是csdn上关于无解的表示。
可能是其他编译型语言中,case后便必须是常量的缘故吧。

后来在一个边角的地方看到某人发帖是VB还是不知道哪个语言中的中实现了switch case语句的范围选择,大家看了下面代码就明白了。

var x=1
switch(true){
case x>0&&x<10: alert(1);break; case x>=10&&x<20: alert(2);break; }

看明白啦?就是利用传递给switch的参数设为true,把原来的变量变成常量,常量变变量,逆向思维。巧妙吧?

本来我想出来的办法是这样的,没有上面的好,没有跳出思维定势,也贴出来给大家看看,权当娱乐娱乐了

var x=1
switch(x){
case (x>0&&x<10)*x: alert(1);break; case (x>=10&&x<20)*x: alert(2);break; }

找出页面内重复的Id

今天群里提起这事,
判断页面内是否有重复的id

一种是已知id,看是否有重复。基本上Ctrl+F就能搞定~
但是Robin给出了方法:


function chkid(idname){
s=0;
divs = document.getElementsByTagName(“*”);
for (i=0; i

而后我又在其基础上修改了能够找出页面内所有重复的Id


function chkid(){
var did={},tmpid;
divs = document.getElementsByTagName(“*”);
for (var i=divs.length-1; i+1; i–){
(tmpid=divs[i].id)
&&did[tmpid]===undefined
?did[tmpid]=0
:did[tmpid]++;
}
for (var i in did) {
did[i]&&alert(“id=”+i+”重复了”+(did[i]+1)+”次”);
}
}

比较可靠,兼容ie和ff。
不过一般的html检查器都有这个功能,这个代码又有多大用处呢?呵呵,感觉没有。