good way is to redesign the db schema.
add two field as follows:
id , parentidin oracle using connected by ... start with can query the outcome of what you wanted
add two field as follows:
id , parentidin oracle using connected by ... start with can query the outcome of what you wanted
//函数返回该序号对应的级别(其实是数里边有多少个点)。0表示最高一级。
function getLevel(id)
{
return id.replace(/[^\.]/g,"").length;
}//得到某级别缩进的空格字串(每下一级缩两个空格)
function getIndent(level)
{
var str = "";
for(var i=0;i<level;i++)
str+= " ";
return str;
}
var cArr = ['一','二',...'九','十','百','千'];
//根据阿拉伯数字得到汉字数字
function getCNum(eNum)
{
//太复杂了,本来想写一个的,网上肯定有。
}//根据数据库中的序号得到用来显示的序号字符
function getIdShow(id)
{
//取最后一个点号后面的部分,作为显示依据
var sIndex = id.lastIndexOf(",");
var s = id.substr(sIdnex+1); //碰巧找不到的情况也可这么写
var level = getLevel(id);
switch(level):
{
0:s=getCNum(s);break;
1:s="("+getCNum(s)+")";break;
2:s=s;break; // ~@~
3:s="("+s+")";break;
}
//缩进
s = getIndent(level) + s;
return s;
}//根据级别得到要显示的名称
function getNameShow(level,name)
{
return getIndent(level) + name;
}服务器端用java实现上述函数的话,大致在需要输出的地方<%=getIdShow(id)%>和<%=getNameShow(level,name)%>就成。---以上都没试过...
var cL = ["","十","百","千"]//千以内有效
function getCNum(eNum)
{
var s="";
var pre="";
var len = eNum.length;
for(var i=0;i<len;i++)
{
var value = parseInt(eNum.charAt(i));
if(i==len-2 && value==1 && len==2)
c = "十";
else if(pre=="零" &&value==0)
c= "";
else if(pre!="零" &&value==0 &&i!=len-1 )
c="零";
else if(value==0 &&i==len-1)
c="";
else
c = cArr[value]+cL[len-1-i];
s += c;
pre = c;
}
if(s.charAt(s.length-1)=="零")s=s.substring(0,s.length-1);
return s;
}alert(getCNum("034"));困死了,没意思...