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;
	}

  

原文地址:https://www.cnblogs.com/sunliyuan/p/11263497.html