就像,现在流行的博客一样。。
文章过长,然后在文章列表里提供预览一部分的功能。。
其中,有图片,也有文字。。
这种功能如何实现?排除以下几种笨办法:
1,全文从数据库读取,然后用给div固定高度,多余的隐藏;
2,读取文章的时候,在服务器判定文章大小,并截取一部分用于显示;
不想使用上面两种的理由:
第一种,太傻瓜的做法,掩耳盗铃,只是看不到,但是还是全文都读取出来了,肯定会影响效率,而且突然截断没显示完的图片也是比较生硬的;
第二种,貌似不太智能,遇到HTML标签,也截断,那不得出错吗?更何况,判定大小智能判定字符数的,文章里面的图片只存了一个路径,如果一篇文章图片太多,那岂不是会读取到很多图片?
文章过长,然后在文章列表里提供预览一部分的功能。。
其中,有图片,也有文字。。
这种功能如何实现?排除以下几种笨办法:
1,全文从数据库读取,然后用给div固定高度,多余的隐藏;
2,读取文章的时候,在服务器判定文章大小,并截取一部分用于显示;
不想使用上面两种的理由:
第一种,太傻瓜的做法,掩耳盗铃,只是看不到,但是还是全文都读取出来了,肯定会影响效率,而且突然截断没显示完的图片也是比较生硬的;
第二种,貌似不太智能,遇到HTML标签,也截断,那不得出错吗?更何况,判定大小智能判定字符数的,文章里面的图片只存了一个路径,如果一篇文章图片太多,那岂不是会读取到很多图片?
如果怕sql方法中麻烦 可以在代码中写
自己试试
/// 截取备注里面太长的文字
/// </summary>
/// <param name="sString">传入字符串</param>
/// <param name="nLeng">从多长开始截取</param>
/// <returns></returns>
private string SubStr(string sString, int nLeng)
{
//可以加上判断传入的是否为空
if (sString.Length <= nLeng)
{
return sString;
}
string sNewStr = sString.Substring(0, nLeng);
sNewStr = sNewStr + ".....";
return sNewStr;
}
然后进行正确的截取:只截取指定数量的字符数,并且判断截取部分的HTML是否都正确闭合了,如果没闭合得自动闭合,或者其他的方法
谁能帮我想想哦
<%# Regex.Replace((DataBinder.Eval(Container.DataItem, "Detail").ToString().Length > 1000 ? DataBinder.Eval(Container.DataItem, "Detail").ToString().Substring(0, 1000) + "……" : DataBinder.Eval(Container.DataItem, "Detail").ToString()), "\\s|<(?!br)[^>]*>", "")%>
我要的是不去除标签,像SINA博客一样的文章预览功能,要保留原文格式,包括图片!
万恶的正则匹配!!!
把table 加上属性:table-layout:fixed
把td加上属性:text-overflow:ellipsis;
那样,你td的width有多宽,就显示多宽的字,长的部分自动用...代替.
现在CSS+DIV很常用的哦 ,这个问题只需要在页面解决
不用动后台代码
一种上面 的已经说了:
<%# Regex.Replace((DataBinder.Eval(Container.DataItem, "Detail").ToString().Length > 1000 ? DataBinder.Eval(Container.DataItem, "Detail").ToString().Substring(0, 1000) + "……" : DataBinder.Eval(Container.DataItem, "Detail").ToString()), "\\s|<(?!br)[^>]*>", "")%>
另一种,写CSS来控制:
/*格式化字符串长度,超出长度用...*/
.formatStringt
{
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}