就像,现在流行的博客一样。。
文章过长,然后在文章列表里提供预览一部分的功能。。
其中,有图片,也有文字。。
这种功能如何实现?排除以下几种笨办法:
1,全文从数据库读取,然后用给div固定高度,多余的隐藏;
2,读取文章的时候,在服务器判定文章大小,并截取一部分用于显示;
不想使用上面两种的理由:
第一种,太傻瓜的做法,掩耳盗铃,只是看不到,但是还是全文都读取出来了,肯定会影响效率,而且突然截断没显示完的图片也是比较生硬的;
第二种,貌似不太智能,遇到HTML标签,也截断,那不得出错吗?更何况,判定大小智能判定字符数的,文章里面的图片只存了一个路径,如果一篇文章图片太多,那岂不是会读取到很多图片?

解决方案 »

  1.   

    你可以用第二种方法之前加个判断识别html  自己写个方法
    如果怕sql方法中麻烦  可以在代码中写
    自己试试
      

  2.   

    用C#后台/// <summary>
        /// 截取备注里面太长的文字
        /// </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;
        }
      

  3.   

    最好的方法应该是用正则匹配文章里的HTML标签,
    然后进行正确的截取:只截取指定数量的字符数,并且判断截取部分的HTML是否都正确闭合了,如果没闭合得自动闭合,或者其他的方法
    谁能帮我想想哦
      

  4.   

    用/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 来匹配html标记
      

  5.   

    str.length>1000?str.substring(0,1000):str
      

  6.   

    做个div只显示前半部分,剩下部分用div隐藏,单击详细时显示出来,不就行了
      

  7.   

    肯定会将所有内容读出来的,数据库里面又没有提供截取方法。不然你就可以在sql语句里截取然后再读出类处理。现在的机器又不缺内存,更何况不是大型软件,只是一个博客而已。读出来处理不会对效率有太大的影响
      

  8.   

    晕死。你怎么搞得啊。给你个列子:
    <%# 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)[^>]*>", "")%> 
      

  9.   

    兄弟,这种就去除了HTML标签了。。
    我要的是不去除标签,像SINA博客一样的文章预览功能,要保留原文格式,包括图片!
      

  10.   

    怎么保留HTML的情况下,截取一段字符串!!!!
    万恶的正则匹配!!!
      

  11.   

    要么就像CSDN的blog一样留一个此文的简述这样就不会存在会截取到html的标签!
      

  12.   

    按下一页时可以把另一个长度传进SQLselect left(列名,长度)也可以用JS分页。百度“JS分页”
      

  13.   

    最简单方法
    把table 加上属性:table-layout:fixed
    把td加上属性:text-overflow:ellipsis;
    那样,你td的width有多宽,就显示多宽的字,长的部分自动用...代替.
      

  14.   

    还是用div控制样式,让他可以上下滚动就OK了。
    现在CSS+DIV很常用的哦 ,这个问题只需要在页面解决
    不用动后台代码
      

  15.   

    两种方法.
    一种上面 的已经说了:
    <%# 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;
    }
      

  16.   

    如果不考虑html标签就好说。  如果考虑的话。  同等答案。