一个截取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));

最新文章

  1. ES6 基础知识
  2. 三种Scriptlet总结
  3. android开发时使用游标时一定要关闭
  4. Atititcmd cli环境变量的调用设置与使用
  5. ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除
  6. 使用JdbcTemplate报 Incorrect column count: expected 1, actual 5错误解决
  7. P4 前端编译器p4c-bm、后端编译器bmv2命令安装 make error问题
  8. SQL Server2005中使用XML-数据类型、查询与修改
  9. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)
  10. poj1149
  11. LeetCode OJ 289. Game of Life
  12. 团队作业8——Beta 阶段冲刺1st day
  13. 搭建yeoman自动化构建工具
  14. 《设计模式:可复用面向对象软件的基础》【PDF】下载
  15. PHP输出打印方法
  16. zabbix数据库分表的实现
  17. (8)socketserver并发
  18. vSphere虚拟化平台升级注意事项
  19. Spring基于XML方式的使用
  20. Solution for unable to create &quot;dead-letter-exchange&quot; in RabbitMQ

热门文章

  1. 微信小程序-使用腾讯Wxpage
  2. 【MVC】初识MVC
  3. Android Design Support Library(2)- TextInputLayout的使用
  4. SQLserver字符串分割函数
  5. github 迁移google code 项目
  6. cmake学习之- cmake_parse_arguments
  7. Map输出数据的处理类MapOutputBuffer分析
  8. phpstudy nginx下curl请求本地其他项目
  9. 字符数组和strcpy
  10. npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置