主题:  共享:将字符串截取成指定的长度

浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#12005/9/2 10:48:38
在将数据放入表格中时,经常会遇到有些数据过长,会把表格撑散的情况,这时就需要对数据串进行格式化操作,一般超出部分用省略号代替。这可以用样式表来实现:text-overflow:ellipsis; white-space:nowrap;我这里要讲的是用脚本来实现,请大家指正。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#22005/9/2 10:51:32
对于javascript,使用下面的两个函数

//检测字符串长度,一个中文为2个字节
function strLen(str){
var reallength;
if(str=="" || str==null){
reallength=0;
}else{
reallength=str.length;
for(var i=0;i<str.length;i++){
if(str.charCodeAt(i)>8000)reallength++;
}
}
return reallength;
}

//字符串截取显示,显示前 num 个字符,后接省略号,一个中文为2个字节
function strShort(str,num){
var shortstring;
if(strLen(str)<=num){
shortstring=str;
}else{
shortstring=str;
do{
shortstring=shortstring.substr(0,shortstring.length-1);
}while(strLen(shortstring)>num-2);
shortstring+="…";
}
return shortstring;
}



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#32005/9/2 11:00:59
使用方法
比如我要做一个超链接,链接文本为:"5D多媒体,原创的魅力",链接到5D首页,用JS的写法是:
<script type="text/javascript">
  var mytext="5D多媒体,原创的魅力";
  var myurl="http://www.5d.cn";
  document.write("<a href='"+myurl+"' target='_blank'>"+mytext+"</a>")
</script>

可是,如果这个超链如果放在一个只能容纳4个汉字的表格中,就要对文本进行截取了。4个汉字的长度为8(第个汉字长为2),就要做如下改动了:
<script type="text/javascript">
  var mytext="5D多媒体,原创的魅力";
  var myurl="http://www.5d.cn";
  document.write("<a href='"+myurl+"' target='_blank' title='"+mytext+"'>"+strShort(mytext,8)+"</a>")
</script>

对字符串截取后,要为超链接加上title标记,对别人友好一点吧。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#42005/9/2 11:02:44
效果如下

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#52005/9/2 11:06:17
对于VBScript,函数如下:

    '检测字符串长度,一个中文为2个字节
    Function StrLen(str)
     Dim I
     If str="" OR IsNull(str) Then
     StrLen=0
     Else
     StrLen=Len(str)
        For I=1 To Len(str)
         If ASC(Mid(str,I,1))<0 Then StrLen=StrLen+1
        Next
     End If
    End Function
    
    '字符串截取显示,显示前 num 个字符,后接省略号,一个中文为2个字节
    Function StrShort(str,num)
     Dim I
     If StrLen(str)<=num Then
     StrShort=str
     Else
     StrShort=str
     Do While StrLen(StrShort)>(num-2)
     StrShort=Left(StrShort,Len(StrShort)-1)
     Loop
     StrShort=StrShort & "…"
     End If
    End Function
用法基本相同,就不再多说了。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#62005/9/2 11:09:01
这是我平时工作中经常用到的两个小函数,拿出来与大家分享,如果有更好的方法,请共享出来吧。如果大家用的上,不要忘了感谢5D呀。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#72005/9/13 9:48:21
看来这东西没有用呀,以后还是不帖了吧。本来还想接下去写呢。