| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 472 人关注过本帖
标题:用overflow代替left截取指定长度字符串zz
收藏  订阅  推荐  打印 
xmuer
Rank: 3Rank: 3
等级:中级会员
帖子:233
积分:2596
注册:2007-5-10
用overflow代替left截取指定长度字符串zz

为了防止文章标题过长超过容器(td,div)宽度而显示成多行,我们通常要对标题进行处理让其显示在一行,通常使用的方法有两种:

      一种方法是在客户端用CSS设置容器的overflow属性;

      另一种方法则是在服务器端用left函数对标题字符串进行截取。

以下是引用片段:
<style type="text/css">
div{
width:200px;
overflow:hidden;
}
</style>
<div>轻轻松松在页面中插入单选按钮/复选框</div>
<div><% =Left("轻轻松松在页面中插入单选按钮/复选框",11) %></font></div>  


      比较一下它们的优缺点:

      1.处理地点不同

      一个位于客户端,一个位于服务器端。能在客户端的处理的尽量不要在服务器端处理,减轻服务器负担。

      2.处理对象的不同

      CSS是对容器属性进行设置,left是对标题字符串进行处理,哪个更合理?回答这一问题前我们先问下:为什么要对标题长度进行处理?为的就是"让标题长度不超过容器长度"即可!CSS是对容器属性进行设置,当标题长度超出容器长度时就进行处理;而left的做法是对每个标题进行处理,将标题的长度都控制在我们测试得出的长度n范围内[left(title,n)],有一刀切的嫌疑。可见前者更具合理性。

      3.对html处理的简易性

      这一点是最能说服用CSS的理由。有时由于某些原因,我们会在一些标题中加入了html代码,如:<font color="#FF0000">轻轻松松在页面中插入单选按钮/复选框</font>,我们想要的结果应当是让标题不显示为两行,但还要保证仍为红色!这点left做不到,要达到效果我们先得把html去除,然后对余下的字符串进行截取,再添加html,非常的麻烦;而css完全不理会html,真正做到"只对字符串进行处理",非常方便,如:

以下是引用片段:
<style type="text/css">
div{
width:200px;
overflow:hidden;
}
</style>
<div><font color="#FF0000">轻轻松松在页面中插入单选按钮/复选框</font></div>
<div><% =Left("<font color=""#FF0000"">轻轻松松在页面中插入单选按钮/复选框</font>",11) %></font></div>  



      采用left不仅达不到效果,有时还会导致页面显示出错!
搜索更多相关主题的帖子: overflow  left  字符  长度  代替  
本帖最近评分记录
2007-12-29 00:23
xmuer
Rank: 3Rank: 3
等级:中级会员
帖子:233
积分:2596
注册:2007-5-10
asp判断字符串的长度和截取指定长度字符串的方法

"判断包含双字节字符的字符串长度
Function getStrLen(str)
dim x,y,i
x = len(str)
y = 0
for i = 1 to x
if asc(mid(str,i,1))<0 or asc(mid(str,i,1))>255 then
y = y + 2 "双字节
else
y = y + 1"ascii码字符
end if
next
getStrLen = y
End Function

"从指定(包含双字节字符的)字符串中第一个字符起的指定长度的字符串
"指定的长度为单字节长度,即字节数
Function leftString(str, length)
Dim x, y, i, s
s = str
x = Len(str)
y = 0
If x >= 1 Then
For i = 1 To x
If Asc(Mid(str, i, 1)) < 0 Or Asc(Mid(str, i, 1)) > 255 Then
y = y + 2
Else
y = y + 1
End If

If y >= length Then
s = Left(str, i) "字符串字节数
Exit For
End If
Next
End If
leftString = s
End Function
例如:
getStrLen("双字节字符abc")
leftString("abc双字节字符字符串",10)
2007-12-29 00:25
xmuer
Rank: 3Rank: 3
等级:中级会员
帖子:233
积分:2596
注册:2007-5-10
得到固定字符位置的函数

得到固定字符位置的函数

<Script language="Javascript" Runat="Server">
/*
=======================================================================================
本程序段的功能:

给定一个字符串,不管是英文还是中文,还是中英文混合的,只取前面的8个英文字母占位的宽度。
关于该程序的说明:当最后一个字为中文,并且前面已经取得7位时,就不应该再取这个字了。再
最后位置补空格; 否则的话,总共就会占9个英文字符的位置了。
本程序由net_lover(孟子E章)编写,您可以任意使用本程序,但要保持本注释。
有任何疑问请Email至: amxh@21cn.com
欢迎访问:
[url]http://lucky.myrice.com[/url]
[url]http://colorweb.go.163.com[/url]
=======================================================================================
*/
function get8Length(str)
{
var tmp = 0;
var len = 0;
var okLen = 0
for(var i=0;i<8;i++)
{
  if(str.charCodeAt(i)>255)
   tmp += 2
  else
   len += 1
  okLen += 1
  if(tmp + len == 8)
  {
   return (str.substring(0,okLen));
   break;
  }
  if(tmp + len > 8)
  {
   return (str.substring(0,okLen - 1) + " ");
   break;
  }
}
}

</Script>
<%
Dim strTest
strTest = "我是孟子E章啊!!"
Response.write get8Length(strTest) & "……<br>"
strTest = "我是net_lover!!"
Response.write get8Length(strTest) & "……<br>"
strTest = "I我a是m孟子E章啊!!"
Response.write get8Length(strTest) & "……<br>"
%>
2007-12-29 00:30
madpbpl
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:2513
积分:27228
注册:2007-4-5

总结的不错,谢谢分享。
2007-12-29 00:34
enjoy535
Rank: 2
等级:注册会员
帖子:92
积分:1076
注册:2007-1-16
回复 1# 的帖子

按照益出隐藏的处理方法,如果文字太多,而宽度又有限,我试了一下hidden的方法,却发现文字会显示成多行...

2008-4-9 10:58
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.069107 second(s), 10 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved