假设有这样一种需求:后台提取日志(日志是用户使用自己开发的编辑器编写的),在前台需要显示它的摘要。
比较实际的例子就是QZONE新版本首页的摘要,后台提取数据,前台显示摘要<记得曾经被人问起过这个问题>,那就继续折腾了~
对于提取摘要,要确定以下几点:
1、以什么为依据提取字符串,字符串的长度还是其它
2、对图片、音频、视频、flash如何处理
假设以br作为分隔,最多取4行摘要,超出的部分显示 “...<还有 4132 字>”
最终的效果如下图,左侧为完整的文章,右侧显示的摘要或是示例效果(假设最多显示十行):
编辑器是自行开发的,以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: };