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>(<br\s*\/?>)+<\/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(/ title\s*=\s*\"https*[\s\S]*?\"/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>\n" + classes.join("\n") + "</style>\n" ;
var styleString = "<style>" + classes.join("\n") + "</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;
}

  

js提取135编辑器相同的css的更多相关文章

  1. 如何在编辑器里添加CSS或JS代码

    //编辑器里代码模式下的代码 <scripttype="text/javascript"> //my code.... </script> //编辑器里可视 ...

  2. Codrops 实验:使用 Vibrant.js 提取图像颜色

    Codrops 分享了一个有趣的颜色提取实验.这个想法是创建图像的调色板,既有图像本身的潜移默化的影响,也有一些花哨的颜色延伸.通过使用 Vibrant.js 来提取图像中的颜色,并通过 CSS 过滤 ...

  3. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  4. js提取新浪邮箱的信用卡

    js提取用户新浪邮箱中的信用卡信息,是js非nodejs. 对比py,之前就做不好,出现了复杂点选验证码.js的开发速度只需要py的三分之一,甚至十分之一. js在客户端执行,py在后端执行,py要实 ...

  5. JS代码高亮编辑器 ace.js

    JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...

  6. js进阶 11-4/5 jquery中css的类的操作有哪些

    js进阶 11-4/5  jquery中css的类的操作有哪些 一.总结 一句话总结:jquery中css的类的操作有增删切三种. 1.jquery中css的类的操作有哪些? 增删切三种 addCla ...

  7. 循序渐进BootstrapVue,开发公司门户网站(2)--- 使用wow.js动画组件以及自定义的CSS样式处理动态效果

    在我们开发的页面中,让页面有一些动画效果,可以让页面更加有吸引力,只要不是处理太过,一般人还是希望有一些动态效果,如滚动动画加载,悬停处理变化等效果,本篇随笔介绍使用wow.js动画组件以及自定义的C ...

  8. 一款纯HTML+CSS+JS富文本编辑器-handyeditor

    官网:http://he.catfish-cms.com/ 修改版本(修改一些BUG和图片上传服务器 点击下载: handyeditor富文本编辑器.zip): 图片上传接口上传类型: Content ...

  9. Thymeleaf 公共css,js提取及自有css,js导入

    https://www.jianshu.com/p/2102fa4772ba

随机推荐

  1. mysql分页和oracle分页

    1,mysql分页 select * from table_test LIMIT ((pageNum - 1) * pageSize),pageSize) 2,oracle分页 select * fr ...

  2. Gamma阶段第二次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  3. Linux上DNS解析总是选择resolv.conf中第二位的DNS服务器IP地址

    问题现象: 在Linux机器上,用户自建了一台DNS服务器.然后改动/etc/resolv.conf将其服务器IP地址添加到第一项.将阿里云的内网DNS放到第二位,然而在测试过程中发现telnet,p ...

  4. Cesium中的几种坐标和相互转换【转】

    几个重要的坐标对象:1.世界坐标 Cartesian3:笛卡尔空间直角坐标系 new Cesium.Cartesian3(x, y, z) 可以看作,以椭球中心为原点的空间直角坐标系中的一个点的坐标. ...

  5. Unity3D普通开发人员,U3D主程分别需要掌握的技能

    Unity3D普通开发人员 1.会查看和搜索unity API文档,熟悉一些3D术语单词 2.查看别人的代码,能够依葫芦画瓢 3.能够制作一些常见的UI效果,善用缓动类插件,如Do Tween pro ...

  6. Windows Server 2008 + IIS 7+ ASP.NET 并发优化

    Windows Server 2008 + IIS 7+ ASP.NET 并发优化 站点出现这样的错误信息: Error Summary: HTTP Error 503.2 - Service Una ...

  7. virtualenv, conda, pip分别是什么

    自己一直使用virtualenv,但是发现很多工具或框架都是以来conda,于是就网上搜了下二者的区别,感觉这篇文章讲的比较清楚:https://blog.csdn.net/zhouchen1998/ ...

  8. Java基础 awt Frame 点击叉后,在控制台输出提示信息并关闭程序

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  9. xargs在shell的执行不能为空需要先判断

    PID=`jps -l | grep office |grep -v 'grep'| awk '{print $1}' | xargs`if [ "$PID" ]then echo ...

  10. zookeeper从3.4.8升级到3.4.14

    升级背景说明: 最近在做系统安全扫描时,扫出来zookeeper存在安全漏洞 Apache Zookeeper 缓冲区溢出漏洞(CVE--) 官方给出的升级建议: 地址:https://zookeep ...