获取指定长度html代码摘要的js函数

var getAbstract=function(n){
n=(n)?parseInt(n)-1:-1;//0 - n-1的字符长度为n.
var html=null;
if (config.htmlOn == true)
{
var div=document.createElement("DIV");
div.innerHTML=Editor.editor.contentWindow.document.body.innerHTML;
html=div.innerText;
delete div;
}
else
{
html=Editor.editor.contentWindow.document.body.innerHTML;
}
html=html.replace(/<\s*script[^>]*>.*<\s*\/script[^>]*>/ig,"").replace(/<\s*script[^>]*>/ig,"").replace(/<\s*\/script[^>]*>/ig,"");
if(n>0)
{
//匹配所有的HTML Tag
var pattern='<[^>]*>';
var reg = new RegExp(pattern,'ig');
var lastIndex=n;
var arr;
//循环直到第n个字符在当前匹配式之间或者之前时跳出
while ((arr = reg.exec(html)) != null)
{
//当下一个匹配式<*>(表示为Tag)的起始位置超过n,则表示第n个字符处在当前匹配式之前
if(arr.index>=n)break;
//此时两种情况,一种是第n个字符在当前匹配式之间,另一种是当前匹配式在第n个字符之前
lastIndex=arr.lastIndex;
//当下一个匹配式<*>(表示为Tag)的结束位置超过n,则表示第n个字符处在当前匹配式之间
if(lastIndex>=n)break;
}
//为了不截断第n个字符附近的Tag,需要根据情况重新指定截断的位置
//第n个字符在循环中跳出时的匹配式之间的时候,需要将n指定到该匹配式的结束处,以免截断
if(lastIndex>n)n=lastIndex;

//匹配一些不能被截断的前后都必须有的HTML TAG
var tags='table|div|span|b|i|u|ul|ol|strong|embed|object|center|strike|iframe';
function recursionRegular(n)
{
if(n==1)
{
return '[^<]*((<\s*\\1[^>]*'+'.*' +'</\s*\\1[^>]*>)|(<(?!/?\s*\\1)[^>]*>[^<]*))*[^<]*';
}
else
{
return '[^<]*((<\s*\\1[^>]*'+recursionRegular(n-1)+'</\s*\\1[^>]*>)|(<(?!/?\s*\\1)[^>]*>[^<]*))*[^<]*';
}
}
pattern='<\s*('+tags+')[^>]*>'+recursionRegular(4)+'</\s*\\1[^>]*>';
// pattern='<\s*(table|div|span|b|i|u|ul|ol|strong|embed|object|center|strike|iframe|button)[^>]*>[^<]*</\s*\\1[^>]*>';
reg = new RegExp(pattern,'ig');
//循环直到第n个字符在当前匹配式之间或者之前时跳出
while ((arr = reg.exec(html)) != null)
{
//当下一个匹配式<*>(表示为Tag)的起始位置超过n,则表示第n个字符处在当前匹配式之前
if(arr.index>=n)break;
//此时两种情况,一种是第n个字符在当前匹配式之间,另一种是当前匹配式在第n个字符之前
lastIndex=arr.lastIndex;
//当下一个匹配式<*>(表示为Tag)的结束位置超过n,则表示第n个字符处在当前匹配式之间
if(lastIndex>=n)break;
}
//为了不截断第n个字符附近的Tag,需要根据情况重新指定截断的位置
//第n个字符在循环中跳出时的匹配式之间的时候,需要将n指定到该匹配式的结束处,以免截断
if(lastIndex>n)n=lastIndex;

return html.substring(0,n);
}
else
{
return html;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值