zoukankan      html  css  js  c++  java
  • 截取带HTML标签的文本并保留文本样式

    一个截取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(/[ ]/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(/[ ]/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));

  • 相关阅读:
    【矩阵乘】【DP】【codevs 1305】Freda的道路
    Giraph源代码分析(九)—— Aggregators 原理解析
    Dubbo框架应用之(三)--Zookeeper注冊中心、管理控制台的安装及解说
    Oracle中对数字加汉字的排序(完好)
    PKU-2104-K-th Number
    IE下推断IE版本号的语句
    自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)
    <html>
    测试一个网段主机在线情况,禁ping的情况除外
    glance image-create --name "wj_js_company_img" --file a0e1c7fa-d6d3-410f-9bb5-e699e342db91 --disk-format qcow2 --container-format bare --progress --visibility public
  • 原文地址:https://www.cnblogs.com/xkzy/p/3945026.html
Copyright © 2011-2022 走看看