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>(<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的更多相关文章
- 如何在编辑器里添加CSS或JS代码
//编辑器里代码模式下的代码 <scripttype="text/javascript"> //my code.... </script> //编辑器里可视 ...
- Codrops 实验:使用 Vibrant.js 提取图像颜色
Codrops 分享了一个有趣的颜色提取实验.这个想法是创建图像的调色板,既有图像本身的潜移默化的影响,也有一些花哨的颜色延伸.通过使用 Vibrant.js 来提取图像中的颜色,并通过 CSS 过滤 ...
- js进阶 13-5 jquery队列动画如何实现
js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...
- js提取新浪邮箱的信用卡
js提取用户新浪邮箱中的信用卡信息,是js非nodejs. 对比py,之前就做不好,出现了复杂点选验证码.js的开发速度只需要py的三分之一,甚至十分之一. js在客户端执行,py在后端执行,py要实 ...
- JS代码高亮编辑器 ace.js
JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...
- js进阶 11-4/5 jquery中css的类的操作有哪些
js进阶 11-4/5 jquery中css的类的操作有哪些 一.总结 一句话总结:jquery中css的类的操作有增删切三种. 1.jquery中css的类的操作有哪些? 增删切三种 addCla ...
- 循序渐进BootstrapVue,开发公司门户网站(2)--- 使用wow.js动画组件以及自定义的CSS样式处理动态效果
在我们开发的页面中,让页面有一些动画效果,可以让页面更加有吸引力,只要不是处理太过,一般人还是希望有一些动态效果,如滚动动画加载,悬停处理变化等效果,本篇随笔介绍使用wow.js动画组件以及自定义的C ...
- 一款纯HTML+CSS+JS富文本编辑器-handyeditor
官网:http://he.catfish-cms.com/ 修改版本(修改一些BUG和图片上传服务器 点击下载: handyeditor富文本编辑器.zip): 图片上传接口上传类型: Content ...
- Thymeleaf 公共css,js提取及自有css,js导入
https://www.jianshu.com/p/2102fa4772ba
随机推荐
- js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数——js小测:计算比赛得分
一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平均分: 最近在学习大数据可视化——图谱,用到js一些东西,所以今天就用js练练 用到知识点: js限制输入数字能输入小数点,js定义数组, ...
- 云服务器搭建JDK+Tomcat+MySQL环境
一.首先租赁一台云服务器(阿里云服务器或者腾讯云服务器) 其实可以在windows电脑上使用VMware workstation来安装虚拟机进行操作,毕竟云服务器低配也是很贵的.不过可以使用学生价去租 ...
- 关于window.getSelection
window.getSelection(),返回一个Selection对象,表示用户选择的文本范围或光标的当前位置. selection对象先来看下面两个selection结果:selection对象 ...
- JWT了解与实战
最近在使用JWT做一个单点登录与接口鉴权的功能,正好可以对JWT有深一步的了解. 一.JWT使用场景: 1. 授权:用户登录后,每个请求都包含JWT,允许用户访问该令牌允许的路由.服务和资源.单点登录 ...
- 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...
- JAVA字符编码一:Unicode,GBK,GB2312,UTF-8概念基础
第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础 来源:holen'blog 对字符编码与Unicode,ISO 10646,UCS,UTF8,UTF16, ...
- java join()基本用法与说明解释
join()方法的作用,是等待这个线程结束: 也就是说,t.join()方法阻塞调用此方法的线程(calling thread)进入 TIMED_WAITING 状态,直到线程t完成,此线程再继续: ...
- win101903版本vmware 14虚拟机插usb设备卡死
win101903版本vmware 14虚拟机插usb设备卡死 问题的环境: win10,1903版本: vmware 14 版本: 安装的是ubuntu1604虚拟机: 当插入usb摄像头,并连接到 ...
- 真机调试No target device的解决(android studio)3.4.1
驱动等都正常,手机连接正常.但是还是报错 搜索到如下办法成功解决:adb未启动或启动失败,这时候选择android studio界面底端的logcat,会自动重启adb.
- CentOS7下的CDH 6.2.0 安装过程
#install OS centos 7.5#install lsb packageyum install -y redhat-lsb #install net-tools package yum i ...