zoukankan      html  css  js  c++  java
  • js提取135编辑器相同的css

    135编辑器导入的内容,有重复的很多css,导致加载很慢,只能去掉

    function remove135FormatContent(content){
        	if(!content) return '';
        	//1.去掉135版本信息
            content=removeVersionInfo(content);
        	
            //2.去掉data-的无用属性
    		content=removeDataAttr(content);
            
    		//3.提取公用的style,写入class="",没有公用的还是放在 style
    	    content=extractHTMLByStyleToClass(content);
    		return content;
        }
        
        function removeDataAttr(content){
    		if(!content) return '';
    		
    		//去掉data-的无用属性
            var reg=new RegExp('\s+data-[\w-]+\s*=\s*"[\s\S]*?"','g');
            var result=content.replace(reg, function($0){
    		   return $0.replace(/^s+/, '').indexOf('data-type')==0 ? $0 : ' ';
    	    });
    		//去掉空的属性
    		result=result.replace(/s+class=""/g, "");
    		result=result.replace(/s+style=""/g, "");
    		
    		//label="Powered by 135editor.com"
    		result=result.replace(/s+label="Powered by 135editor.com"/g,"");
    		// class="_135editor"
    		result=result.replace(/s+class="_135editor"/g,"");
    
    		//p><br/><br/></p>
    		result=result.replace(/<p>(<brs*/?>)+</p>/g,"");
    		
    		result=result.replace(/<style>(<br>)+</style>/g,"");
    		
    		//这个权限有点大
    		result=result.replace(/(<br>)+/g,"");
    		
    		//<p></p>
    		result=result.replace(/<p></p>/g,"");
    		
    		//去掉title中是http的
    		result=result.replace(/ titles*=s*"https*[sS]*?"/g,"");
    		return result;
        }
        
        function extractHTMLByStyleToClass(content){
    		if(!content) return "";
    		//1.取出所有style
    		var reg=new RegExp(' style\s*=\s*"[\s\S]*?"','g');
    		var allstyles00 = content.match(reg);
    		var allstyles=[];
    		//style中包含url(或" 不处理
    		for(var i in allstyles00){
    			if(allstyles00[i].indexOf('url(')>=0){
    				continue;
    			}
    			if(allstyles00[i].indexOf('"')>=0){
    				continue;
    			}
    			allstyles.push(allstyles00[i]);
    		}
    		
    
    		//2.计算每个style出现的次数
    		var counts = {};
    		for(var i in allstyles){
    			var style = allstyles[i];
    			if( !counts[style] ) counts[style]=0;
    			counts[style]++;
    		}
    
    		//3.找到已有的zwedsty_的最大序号
    		var prefix = "zwedsty_";
    		var allHasPrefix = content.match(new RegExp('\.'+prefix+'\d+','g'));
    		var maxClassNum = 0;
    		for(var i in allHasPrefix){
    			var num = allHasPrefix[i].substring(1+prefix.length);
    			num = parseInt(num,10);
    			if( maxClassNum < num) maxClassNum = num;
    		}
    
    		//3.对于有重复的style,换成class
    		var classes = [];
    		for(var style in counts){
    			if(counts[style]<2)continue; //没有重复,不做处理
    			if(style.length<=20)continue; //太短的,不做处理
    			var oneClass = prefix + (++maxClassNum);
    			//生成一个class
    			classes.push( "."+ oneClass
    				//+"{" +replaceStyleQuotToSymble(getMiddleString(style, '"', '"'))
    					+"{" +getMiddleString(style, '"', '"')
    				+ "}");
    			//将style换成class
    			content = myReplaceByString(content, style, 
    				' class="' + oneClass + '"'); 
    		}
    
    		//将所有的class写到content最前面
    		//var styleString = "<style>
    " + classes.join("
    ") + "</style>
    " ;
    		var styleString = "<style>" + classes.join("
    ") + "</style>" ;
    		//var styleString = "<style>" + classes.join(" ") + "</style>" ; 
    		
    		//有内容再去加
    		if(classes.length>0){
    			content = styleString + content;
    		}
    		return content;
    	}
    
        function replaceStyleQuotToSymble(str){
        	if(!str) return str;
        	return myReplaceByString(str, '"', '"');
        }    
       //去掉135版本信息
    	function removeVersionInfo(content){
    		if(! content ) return "";
    		var idx1 = content.indexOf('<section powered-by="135编辑器"');
    		if(idx1<0) return content;
    		var idx2 = content.lastIndexOf('</section>');
    		if( idx2<0) idx2 = content.length;
    		return content.substring(0, idx1) + content.substring(idx2+'</section>'.length);
    	}
    	//取“”中间的值
    	function getMiddleString(content, tag1, tag2){
    		if(!content || !tag1 || !tag2) return "";
    		var idx1 = content.indexOf(tag1);
    		if(idx1<0) return "";
    		idx1 += tag1.length;
    		var idx2 = content.indexOf(tag2, idx1);
    		if( idx2<0) return "";
    		return content.substring(idx1, idx2);
    	}
    	//替换函数
    	function myReplaceByString(content, word, target){
    		//使用字符串替换全部
    		if(!content || !word ) return content;
    		while(content.indexOf(word)>=0){
    			content = content.replace(word, target);
    		}
    
    		return content;
    	}
    

      

  • 相关阅读:
    JVM源码分析 规格严格
    Smack 规格严格
    Java动态编译 规格严格
    RPM仓库地址 规格严格
    使用控制台程序测试DLL依赖
    TestNG 使用入门
    白羊座二:星星的一周
    路遇两骗子
    《落地,请开手机》里面最经典的一句台词
    今天明白的一个道理
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/11263497.html
Copyright © 2011-2022 走看看