假设有这样一种需求:后台提取日志(日志是用户使用自己开发的编辑器编写的),在前台需要显示它的摘要。

比较实际的例子就是QZONE新版本首页的摘要,后台提取数据,前台显示摘要<记得曾经被人问起过这个问题>,那就继续折腾了~

 

对于提取摘要,要确定以下几点:

1、以什么为依据提取字符串,字符串的长度还是其它

2、对图片、音频、视频、flash如何处理

 

假设以br作为分隔,最多取4行摘要,超出的部分显示 “...<还有 4132 字>”

最终的效果如下图,左侧为完整的文章,右侧显示的摘要或是示例效果(假设最多显示十行):

 

截取含HTML标签的字符串

 

编辑器是自行开发的,以br作为一行来看,需要实现的功能:

1、最多取出10行数据

2、取出的字符串,图片不能超过100张

 

实现代码:

function(str, lineNum, imgNum) {
var i = 0, 
   3:             j = 0;
   4:  
//记录最近一次检测到br的位置
//记录最近一次检测到img的位置
//记录下次要开始检测的起始位置
   8:  
//最多显示100张图片
  10:         
while (i < lineNum && (bPos != -1 || iPos != -1)) {
  12:             
//查找换行符的位置
, nPos);        
if (bPos == -1) {
, nPos);
  17:             }
  18:             
//查找img IMG的位置
, nPos);
if (iPos == -1) {
, nPos);
  23:             }
  24:             
//找到图片则优先计算图片,然后再计算br位置
if (iPos != -1 && (bPos == -1 || bPos > iPos)) {
  27:                 nPos = iPos + 1;
  28:                 
//图片数超出设定的值
break;
  31:                 }
  32:  
else {
//从下一个位置开始
  35:             }
  36:  
  37:             i++;
  38:         }
  39:  
//没有换行符,返回全文
return str;
else {
return str.substr(0, nPos - 1);
  44:         }
  45:         
  46:     };

相关文章: