截取文章一部分显示(无损html)

来源:互联网 发布:2016网络最热门的词汇 编辑:程序博客网 时间:2024/05/11 17:36

最近在做一些内容搜索的工作,搜索出来的内容为html格式,列表部分需要显示每项内容的一部分。因为是html格式的内容,直接截取内容的前多少字符显然不合适了。而如果直接去掉所有html格式然后再截取又无法达到想要的效果,再网上搜了一通之后,写下如下代码应该可以满足基本的要求了。(js写的,因为容易调试)

代码
var br = {};
br.spTags 
= ["img","br","hr"];/*不需要成对出现的标记*/
br.contain 
= function(arr,it){
    
for(var i=0,len=arr.length;i<len;i++){
        
if(arr[i]==it){
            
return true;    
        }
    }
    
return false;
}
br.subArtc 
= function(article,worldNum){
    
var result = [];
    
/*首先截取需要的字串*/
    
var wcount = 0;
    
var startTags = [],endTags = [];
    
var isInTag = false;
    
for(var i=0,len=article.length;i<len;i++){
        
var w = article[i];
        result.push(w);
        
if(w=="<"){
            isInTag 
= true;    
        }
        
if(!isInTag){
            wcount
++;
            
if(wcount==worldNum){
                
break;    
            }
        }
        
if(w==">"){
            isInTag 
= false;    
        }
    }
    
/*对字串进行处理*/
    
var j=0;
    isInTag 
= false;
    
var isStartTag = true;
    
var tagTemp = "";
    
while(j<i){
        w 
= result[j];
        
if(isInTag){
            
if(w==">" || w==" " || w=="/"){
                isInTag 
= false;
                
if(isStartTag){
                    startTags.push(tagTemp);    
                }
else{
                    endTags.push(tagTemp);    
                }
                tagTemp 
= "";
            }
            
if(isInTag){
                tagTemp
+=w;    
            }
        }
        
if(w=="<"){
            isInTag 
= true;
            
if(result[j+1]=="/"){
                isStartTag 
= false;
                j
++;
            }
else{
                isStartTag 
= true;    
            }
        }
        j
++;
    }
    
/*剔除img,br等不需要成对出现的标记*/
    
var newStartTags = [];
    
for(var x=0,len=startTags.length;x<len;x++){
        
if(!br.contain(br.spTags,startTags[x])){
            newStartTags.push(startTags[x]);
        }
    }
    
/*添加没有的结束标记*/
    
var unEndTagsCount = newStartTags.length - endTags.length;
    
while(unEndTagsCount>0){
        result.push(
"<");
        result.push(
"/")
        result.push(newStartTags[unEndTagsCount
-1]);
        result.push(
">");
        unEndTagsCount
--;
    }
    
return result.join("");
};

 

 基本思路:

1.绕过标记,取得实际内容字数 ,如需要显示内容前100个字,绕过标记检索,得到第一百个字实际的索引。然后截取此索引前面的字串。

2.根据一得到的字串,得到这个字串中存在的开始标记和结束标记。注:此处的开始标记标识以"<"开通,且下一个字符不为"/"。

3.剔除2中 得到的开始标记中的不需要成对出现的标记。如br,img,hr等。

4.对比经过3处理的开始标记和2中得到的结束标记,没有配成对的在合适的位置为其配对。

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕晚期尿常规检查尿蛋白高怎么办? 腰开车疼的不会动了怎么办 小孩跑完满头大汗就咳嗽怎么办 小孩剧烈咳嗽喘吃了药不管用怎么办 做什么事都有点轻微的手抖怎么办 见到喜欢的人做事情就手抖怎么办 做了尿结石手术还尿血怎么办 宝宝十一个大运动发展缓慢怎么办 一岁八个月宝宝肚里有蛔虫怎么办 孕妇5个月了缺碘怎么办 4个月婴儿折了下腰怎么办 签了居间合同网签合同有异议怎么办 魅族3s手机返回键失灵怎么办 英语冠词和名词的关系用不好怎么办 炸好了的肉梭子不脆了怎么办 跑步的时候胸抖的疼怎么办 小区内安装了乒乓球桌扰民了怎么办 裁判出示红牌如果球员不走怎么办 高三文化课不好又没有特长怎么办 孩子做事磨蹭拖拉不讲效率怎么办 宝贝幼儿园哭的嗓子哑了怎么办 我给孩子转学学校不接收怎么办 眼睛被太阳晒了胀豉豉的怎么办 电脑电源灯亮着屏幕是黑的怎么办 刚办健身卡健身房跑路了怎么办 孕妇怀孕初期胖的太快怎么办 魔幻陀螺二的陀螺拆不动怎么办 我不干了小厂不给我发工资怎么办 货车司机把人撞成重伤没钱出怎么办 房主卖房定金收了不想卖怎么办 领导迟迟不给升职加薪机会怎么办 加工中心铣圆进出刀有接刀痕怎么办 烧茄子时炸茄子茄子太吸油怎么办? 梦金园黄金刚买了不给退怎么办 给同学抄作业被老师发现了怎么办 不准体罚和变相体罚后熊孩子怎么办 钢琴练的不好走不了专业怎么办 老师来信息说孩子学习退步了怎么办 老人磕着膝盖走路腿疼怎么办 腿膝盖一受凉就疼怎么办可以不疼 手臂和膝盖摔烂了好痛?怎么办