一个截取HTML文本的工具,可以按照文字字数或文字字节长度进行截取,保留HTML样式并在最后自动补齐截取后的标签。
按工作要求编写,时间紧迫,代码未优化,欢迎讨论和指正。
​1. [文件] SubHtml.js 
/**
 * 文件名:SubHtml.js
 * 作 者:DHC
 * 说 明:带HTML标签根据HTML内容截取指定长度的HTML文本,并自动补齐截取后的标签
 * 版 本:1.0
 * 时 间:2014-02-24
 * 示 例:subHtml($("#div715").html(), 73, false)
 */
(function(o){
    /**
     * 判断数组中是否包含某个元素
     */
    Array.prototype.inArray = function(v){
        for(i=0; i < this.length; i++) {
            if(this[i] == v){
                return true;
            }
        }
        return false;
    }
     
    /**
     * 将HTML字符串里面的文本字符检出
     */
    o.toText = function(oHtml){
        if(typeof oHtml === "string"){
            return oHtml.replace(/(^\s*)|(\s*$)/g, "").replace(/<[^<^>]*>/g, "").replace(/[\r\n]/g, "");
        } else {
            return "";
        }
    };
     
    /**
     * 截取带HTML样式的字符串,并保留并自动补齐HTML标签
     * oHtml  将要截取的HTML字符串
     * nlen   截取后的长度,包含标签之间的空格
     * isByte 是否按照字节长度截取
     */
    o.subHtml = function(oHtml, nlen, isByte){
        var rgx1 = /<[^<^>^\/]+>/;      //前标签(<a>的href属性中可能会有“//”符号,先移除再判断)
        var rgx2 = /<\/[^<^>^\/]+>/;    //后标签
        var rgx3 = /<[^<^>^\/]+\/>/;    //自标签
        var rgx4 = /<[^<^>]+>/;         //所有标签
        var selfTags = "hr,br,img,input,meta".split(",");
        if(typeof oHtml !== "string"){
            return "";
        }
        oHtml = oHtml.replace(/(^\s*)|(\s*$)/g, "").replace(/[\r\n]/g, "");
        var oStr = oHtml.replace(/<[^<^>]*>/g, "");
        var olen = isByte ? oStr.replace(/[^\x00-\xff]/g,"**").length : oStr.length;
        if(!/^\d+$/.test(nlen) || olen <= nlen){
            return oHtml;
        }
        var tStr = oHtml;
        var index = 0;
        var matchs = new Array();
        while(rgx4.test(tStr)){
            var m = new Object();
            m.index = index + tStr.search(rgx4);
            m.string = tStr.match(rgx4).toString();
            var len = tStr.search(/<[^<^>]+>/)+tStr.match(/<[^<^>]+>/)[0].length;
            tStr = tStr.substr(len);
            index += len;
            matchs.push(m);
        }
        if(isByte){
            var i=0;
            for(var z = 0; z < oStr.length; z++){
                i += (oStr.charCodeAt(z) > 255) ? 2 : 1;
                if(i >= nlen){
                    tStr=oStr.slice(0,(z + 1));
                    break;
                }
            }
        } else {
            tStr = oStr.substr(0, nlen);
        }
        var startTags = new Array();
        for(var i = 0; i < matchs.length; i++){
            if(tStr.length <= matchs[i].index){
                //tStr += matchs[i].string;
                matchs = matchs.slice(0, i);
                break;http://www.huiyi8.com/dongman/weimei/​
            } else {唯美动漫图片
                tStr = tStr.substring(0, matchs[i].index) + matchs[i].string + tStr.substr(matchs[i].index);
                if(rgx1.test(matchs[i].string.replace(/(\/\/)/g, ""))){
                    var name = matchs[i].string.replace(/[<>]/g, "").split(" ");
                    if(name.length > 0){
                        name = name[0];
                        if(!selfTags.inArray(name)){
                            startTags.push(name);
                        }
                    }
                } else if(rgx2.test(matchs[i].string)){
                    var name = matchs[i].string.replace(/[<\/>]/g, "");
                    if(startTags.length > 0 && startTags[startTags.length - 1] === name){
                        startTags.pop();
                    }
                }
            }
        }
        if(startTags.length > 0){
            for(var i = startTags.length - 1; i >=0; i--){
                tStr += '</' + startTags[i] + '>';
            }
        }
        return tStr;
    }
}(window));

截取带HTML标签的文本并保留文本样式的更多相关文章

  1. Jsoup提取文本时保留标签

    使用Jsoup来对html进行处理比较方便,你可能会用它来提取文本或清理html标签.如果你想提取文本时保留标签,可以使用Jsoup.clean方法,参数为html及标签白名单: Jsoup.clea ...

  2. 用Ueditor存入数据库带HTML标签的文本,从数据库取出来后,anjular用ng-bind-html处理带HTML标签的文本

    ng.module('index-filters', []) .filter('trustHtml', function ($sce) { return function (input) { retu ...

  3. vim技巧4 删除/保留文本中匹配行

    vim技巧:如何删除/保留文本中特定的行呢? <ol><a href="/ss/ss/www"> show invisibles</a> < ...

  4. wordpress调用the_excerpt()不带<p>标签

    我们知道wordpress调用摘要内容用<?php the_excerpt(); ?>就可以,但是它会自动添加一个p标签,例如<p>这里是description</p&g ...

  5. HTML标签-->段落,格式,文本

    只有努力奔跑,才能一直停留在原地. <!--段落标签--> <h1>默认向左</h1> <h1 align="right">向右对齐 ...

  6. 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析

    使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...

  7. 如何把大段文字转为带html标签的文字

    开发网页的时候,有时候会遇到大段的隐私声明,用户协议等等,我们呀要复制粘贴展示出来,必须加大量的p标签,h1,h2,空格符,br标签,这对我们来说无疑是泪崩的,有个很好的办法,可以快速给这些文字加标签 ...

  8. SpringMVC和Freemarker整合,带自定义标签的使用方法

    SpringMVC和Freemarker整合,带自定义标签的使用方法. [参考来源:http://www.360doc.com/content/14/1225/14/1007797_435663342 ...

  9. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. JAVA Eclipse创建Android程序界面不显示怎么办

    一般是由于你创建的Android应用程序版本太高导致的,请设置4或以下版本,对于已有的项目,可以在属性-Android中修改目标生成的版本号                               ...

  2. Ubuntu下安装JDK图文解析

    我们在64位的Ubuntu中安装JDK,选择的是jdk1.6.0_32版本号.安装文件名称为jdk-6u32-linux-x64.bin(这个是64位系统的),假设是32位系统的还须要去官网下载32位 ...

  3. fastJson 转换日期格式

    第一种方法: JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; String str = JSON.toJSONString(user,Seria ...

  4. 【基础算法】排序-复杂排序之二(找出第K大的数)

    切割的思想是高速排序最精髓的地方.每一次切割出来的元素K一个排在第K位,所以利用这样的思想我们至少知道3点 1. 被切割出来的元素K最后一定排在第K位. 2. 在K左边的元素一定比K小或者相等. 3. ...

  5. C#比較对象的相等性

    对于相等的机制全部不同,这取决于比較的是引用类型还是值类型.以下分别介绍引用类型和值类型的相等性. 1.比較引用类型的相等性 System.Object定义了三种不同的方法,来比較对象的相等性:Ref ...

  6. github 迁移google code 项目

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46692181 转载请一定注明出处. 1,关于google code google ...

  7. hdu 1203 I NEED A OFFER!(01背包)

    题意:"至少一份offer的最大概率".即求拿不到offer的最小概率 (得到offer的最大概率 = 1 - 反例的最小概率). 状态转移方程:dp[j]= Min(dp[j], ...

  8. document.readyState和xmlhttp.onreadystatechange

    document.readyState的几种状态 0-uninitialized:XML 对象被产生,但没有任何文件被加载. 1-loading:加载程序进行中,但文件尚未开始解析. 2-loaded ...

  9. shell 获取当前svn代码目录版本号

    在当前svn代码目录下执行以下命令: svn info | grep "Last Changed Rev:" | awk -F ': ' '{print $2}' > svn ...

  10. ViewPager总结

    https://github.com/youth5201314/banner compile 'com.youth.banner:banner:1.4.9' private void setBanne ...