`
liudaoru
  • 浏览: 1559238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Ajax
阅读更多
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;
        }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics