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
随机推荐
- springboot 调用webservice
参考:https://www.liangzl.com/get-article-detail-12711.html https://www.cnblogs.com/e206842/p/9047294.h ...
- Internet地址结构
IP地址结构及分类寻址 IP地址 = <网络号> + <主机号> ------------IPv4(32bit)点分四组表示法: 192.168.31.1 ...
- web: 屏蔽button元素的空格键和enter响应
用tab键可以在各种元素之间切换焦点,然后键盘上的空格和enter按键触发click事件,我这里不想要这种效果. 所以我需要屏蔽这两个按键. function keyup(e) { var currK ...
- 牛顿迭代法(c++)
编写一个用牛顿法解方程x=tanx 的程序,求最接近4.5和7.7的根 #include <iostream> #include <cmath> using namespace ...
- Asp.net 与 Core .net 用法区别
1. 定义一个类 如下,注意int?这里 public class A{ public int? num{get;set;} } 2. 如果传递的参数不能转换成int类型,则core里面接受不了参数 ...
- 制作镜像文件工具packer
openstack镜像制作要在openstack上创建虚拟机,必然要使用到虚拟机镜像. 对于普通用户,可以使用已经创建好的虚拟机镜像.一般是操作系统官方构建并提供的. 某些用户可以有自己独特的需求,需 ...
- 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)
解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...
- win101903版本vmware 14虚拟机插usb设备卡死
win101903版本vmware 14虚拟机插usb设备卡死 问题的环境: win10,1903版本: vmware 14 版本: 安装的是ubuntu1604虚拟机: 当插入usb摄像头,并连接到 ...
- mysql 添加时间自动添加更新时间自动更新
在数据库使用中经常使用到时间字段.常用的有创建时间和更新时间.然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间. 创建表 stu CREATE TABLE ` ...
- 一个流行的网页动画JS库
animejs https://animejs.com/ Anime.js (/ˈæn.ə.meɪ/) is a lightweight JavaScript animation library wi ...