wangEditor 上传本地视频和图片到oss服务器并在富文本回显。
不多说直接上代码,无效你顺着网线来打我:
先看一下改后的效果图
第一步:找到wangEditor.js文件,一下代码直接全选复制,到wangEditor.js文件里面Ctrl+A 在Ctrl+V全部替换掉,这个我已经改好了,不用你再去找什么方法改指定的地方了,然后执行第二步:
(function (global, factory) {typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :typeof define === 'function' && define.amd ? define(factory) :(global.wangEditor = factory());
}(this, (function () { 'use strict';/*poly-fill
*/var polyfill = function () {// Object.assignif (typeof Object.assign != 'function') {Object.assign = function (target, varArgs) {// .length of function is 2if (target == null) {// TypeError if undefined or nullthrow new TypeError('Cannot convert undefined or null to object');}var to = Object(target);for (var index = 1; index < arguments.length; index++) {var nextSource = arguments[index];if (nextSource != null) {// Skip over if undefined or nullfor (var nextKey in nextSource) {// Avoid bugs when hasOwnProperty is shadowedif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {to[nextKey] = nextSource[nextKey];}}}}return to;};}// IE 中兼容 Element.prototype.matchesif (!Element.prototype.matches) {Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {var matches = (this.document || this.ownerDocument).querySelectorAll(s),i = matches.length;while (--i >= 0 && matches.item(i) !== this) {}return i > -1;};}
};/*DOM 操作 API
*/// 根据 html 代码片段创建 dom 对象
function createElemByHTML(html) {var div = void 0;div = document.createElement('div');div.innerHTML = html;return div.children;
}// 是否是 DOM List
function isDOMList(selector) {if (!selector) {return false;}if (selector instanceof HTMLCollection || selector instanceof NodeList) {return true;}return false;
}// 封装 document.querySelectorAll
function querySelectorAll(selector) {var result = document.querySelectorAll(selector);if (isDOMList(result)) {return result;} else {return [result];}
}// 记录所有的事件绑定
var eventList = [];// 创建构造函数
function DomElement(selector) {if (!selector) {return;}// selector 本来就是 DomElement 对象,直接返回if (selector instanceof DomElement) {return selector;}this.selector = selector;var nodeType = selector.nodeType;// 根据 selector 得出的结果(如 DOM,DOM List)var selectorResult = [];if (nodeType === 9) {// document 节点selectorResult = [selector];} else if (nodeType === 1) {// 单个 DOM 节点selectorResult = [selector];} else if (isDOMList(selector) || selector instanceof Array) {// DOM List 或者数组selectorResult = selector;} else if (typeof selector === 'string') {// 字符串selector = selector.replace('/\n/mg', '').trim();if (selector.indexOf('<') === 0) {// 如 <div>selectorResult = createElemByHTML(selector);} else {// 如 #id .classselectorResult = querySelectorAll(selector);}}var length = selectorResult.length;if (!length) {// 空数组return this;}// 加入 DOM 节点var i = void 0;for (i = 0; i < length; i++) {this[i] = selectorResult[i];}this.length = length;
}// 修改原型
DomElement.prototype = {constructor: DomElement,// 类数组,forEachforEach: function forEach(fn) {var i = void 0;for (i = 0; i < this.length; i++) {var elem = this[i];var result = fn.call(elem, elem, i);if (result === false) {break;}}return this;},// cloneclone: function clone(deep) {var cloneList = [];this.forEach(function (elem) {cloneList.push(elem.cloneNode(!!deep));});return $(cloneList);},// 获取第几个元素get: function get(index) {var length = this.length;if (index >= length) {index = index % length;}return $(this[index]);},// 第一个first: function first() {return this.get(0);},// 最后一个last: function last() {var length = this.length;return this.get(length - 1);},// 绑定事件on: function on(type, selector, fn) {// selector 不为空,证明绑定事件要加代理if (!fn) {fn = selector;selector = null;}// type 是否有多个var types = [];types = type.split(/\s+/);return this.forEach(function (elem) {types.forEach(function (type) {if (!type) {return;}// 记录下,方便后面解绑eventList.push({elem: elem,type: type,fn: fn});if (!selector) {// 无代理elem.addEventListener(type, fn);return;}// 有代理elem.addEventListener(type, function (e) {var target = e.target;if (target.matches(selector)) {fn.call(target, e);}});});});},// 取消事件绑定off: function off(type, fn) {return this.forEach(function (elem) {elem.removeEventListener(type, fn);});},// 获取/设置 属性attr: function attr(key, val) {if (val == null) {// 获取值return this[0].getAttribute(key);} else {// 设置值return this.forEach(function (elem) {elem.setAttribute(key, val);});}},// 添加 classaddClass: function addClass(className) {if (!className) {return this;}return this.forEach(function (elem) {var arr = void 0;if (elem.className) {// 解析当前 className 转换为数组arr = elem.className.split(/\s/);arr = arr.filter(function (item) {return !!item.trim();});// 添加 classif (arr.indexOf(className) < 0) {arr.push(className);}// 修改 elem.classelem.className = arr.join(' ');} else {elem.className = className;}});},// 删除 classremoveClass: function removeClass(className) {if (!className) {return this;}return this.forEach(function (elem) {var arr = void 0;if (elem.className) {// 解析当前 className 转换为数组arr = elem.className.split(/\s/);arr = arr.filter(function (item) {item = item.trim();// 删除 classif (!item || item === className) {return false;}return true;});// 修改 elem.classelem.className = arr.join(' ');}});},// 修改 csscss: function css(key, val) {var currentStyle = key + ':' + val + ';';return this.forEach(function (elem) {var style = (elem.getAttribute('style') || '').trim();var styleArr = void 0,resultArr = [];if (style) {// 将 style 按照 ; 拆分为数组styleArr = style.split(';');styleArr.forEach(function (item) {// 对每项样式,按照 : 拆分为 key 和 valuevar arr = item.split(':').map(function (i) {return i.trim();});if (arr.length === 2) {resultArr.push(arr[0] + ':' + arr[1]);}});// 替换或者新增resultArr = resultArr.map(function (item) {if (item.indexOf(key) === 0) {return currentStyle;} else {return item;}});if (resultArr.indexOf(currentStyle) < 0) {resultArr.push(currentStyle);}// 结果elem.setAttribute('style', resultArr.join('; '));} else {// style 无值elem.setAttribute('style', currentStyle);}});},// 显示show: function show() {return this.css('display', 'block');},// 隐藏hide: function hide() {return this.css('display', 'none');},// 获取子节点children: function children() {var elem = this[0];if (!elem) {return null;}return $(elem.children);},// 获取子节点(包括文本节点)childNodes: function childNodes() {var elem = this[0];if (!elem) {return null;}return $(elem.childNodes);},// 增加子节点append: function append($children) {return this.forEach(function (elem) {$children.forEach(function (child) {elem.appendChild(child);});});},// 移除当前节点remove: function remove() {return this.forEach(function (elem) {if (elem.remove) {elem.remove();} else {var parent = elem.parentElement;parent && parent.removeChild(elem);}});},// 是否包含某个子节点isContain: function isContain($child) {var elem = this[0];var child = $child[0];return elem.contains(child);},// 尺寸数据getSizeData: function getSizeData() {var elem = this[0];return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据},// 封装 nodeNamegetNodeName: function getNodeName() {var elem = this[0];return elem.nodeName;},// 从当前元素查找find: function find(selector) {var elem = this[0];return $(elem.querySelectorAll(selector));},// 获取当前元素的 texttext: function text(val) {if (!val) {// 获取 textvar elem = this[0];return elem.innerHTML.replace(/<.*?>/g, function () {return '';});} else {// 设置 textreturn this.forEach(function (elem) {elem.innerHTML = val;});}},// 获取 htmlhtml: function html(value) {var elem = this[0];if (value == null) {return elem.innerHTML;} else {elem.innerHTML = value;return this;}},// 获取 valueval: function val() {var elem = this[0];return elem.value.trim();},// focusfocus: function focus() {return this.forEach(function (elem) {elem.focus();});},// parentparent: function parent() {var elem = this[0];return $(elem.parentElement);},// parentUntil 找到符合 selector 的父节点parentUntil: function parentUntil(selector, _currentElem) {var results = document.querySelectorAll(selector);var length = results.length;if (!length) {// 传入的 selector 无效return null;}var elem = _currentElem || this[0];if (elem.nodeName === 'BODY') {return null;}var parent = elem.parentElement;var i = void 0;for (i = 0; i < length; i++) {if (parent === results[i]) {// 找到,并返回return $(parent);}}// 继续查找return this.parentUntil(selector, parent);},// 判断两个 elem 是否相等equal: function equal($elem) {if ($elem.nodeType === 1) {return this[0] === $elem;} else {return this[0] === $elem[0];}},// 将该元素插入到某个元素前面insertBefore: function insertBefore(selector) {var $referenceNode = $(selector);var referenceNode = $referenceNode[0];if (!referenceNode) {return this;}return this.forEach(function (elem) {var parent = referenceNode.parentNode;parent.insertBefore(elem, referenceNode);});},// 将该元素插入到某个元素后面insertAfter: function insertAfter(selector) {var $referenceNode = $(selector);var referenceNode = $referenceNode[0];if (!referenceNode) {return this;}return this.forEach(function (elem) {var parent = referenceNode.parentNode;if (parent.lastChild === referenceNode) {// 最后一个元素parent.appendChild(elem);} else {// 不是最后一个元素parent.insertBefore(elem, referenceNode.nextSibling);}});}
};// new 一个对象
function $(selector) {return new DomElement(selector);
}// 解绑所有事件,用于销毁编辑器
$.offAll = function () {eventList.forEach(function (item) {var elem = item.elem;var type = item.type;var fn = item.fn;// 解绑elem.removeEventListener(type, fn);});
};/*配置信息
*/var config = {// 默认菜单配置menus: ['head', 'bold', 'fontSize', 'fontName', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'],fontNames: ['宋体', '微软雅黑', 'Arial', 'Tahoma', 'Verdana'],colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'],// // 语言配置// lang: {// '设置标题': 'title',// '正文': 'p',// '链接文字': 'link text',// '链接': 'link',// '插入': 'insert',// '创建': 'init'// },// 表情emotions: [{// tab 的标题title: '默认',// type -> 'emoji' / 'image'type: 'image',// content -> 数组content: [{alt: '[坏笑]',src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png'}, {alt: '[舔屏]',src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png'}, {alt: '[污]',src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png'}]}, {// tab 的标题title: '新浪',// type -> 'emoji' / 'image'type: 'image',// content -> 数组content: [{src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif',alt: '[草泥马]'}, {src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif',alt: '[神马]'}, {src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif',alt: '[浮云]'}]}, {// tab 的标题title: 'emoji',// type -> 'emoji' / 'image'type: 'emoji',// content -> 数组content: '
wangEditor 上传本地视频和图片到oss服务器并在富文本回显。相关推荐
- wangEditor上传本地视频
wangEditor是一个轻量级web富文本编辑器,一般可以满足用户需求,但是有特殊要求的可以对其进行修改 源文件是上传Html视频格式,如果想要变成上传本地视频需要做以下修改: /*上传视频*/// ...
- wangeditor上传本地视频的方法
在官方版本的上传视频功能里,是不支持上传本地视频的,如果需要实现上传本地视频文件,可以自己定义一个上传方法. 实现思路: 1.使用input -> type="file",将 ...
- qq空间 上传html,qq空间怎么上传本地视频两种上传方式(说说/日志)
首先打开QQ空间,我们有两种上传本地视频到QQ空间的方式, 第一种是说说上传,第二种是日志上传. 先来说第一种, 以上是我们打开qq空间以后,里面说说界面,后面有一组类似冒号的东西,把鼠标移至那里,然 ...
- C# Umeditor 编辑器上传本地视频、本地文件
Umeditor 最近在做一个网站,涉及到网站文章的编辑.Umeditor是一个很好的选择,但是看了一下Umeditor,发现不能上传本地视频和本地文件,而项目又要得比较急,所以以我觉得最快的方式修改 ...
- tinymce富文本编辑器的视频插件如何上传本地视频
最近使用了tinymce富文本编辑器的视频上传功能,发现默认只能填写视频链接,不能上传本地的视频.为此,我专门研究下如何上传本地视频. 版本:tinymce版本是^5.0.16,@tinymce/ti ...
- wangeditor富文本编辑器添加上传本地视频功能
wangeditor.js全部代码(可选择复制) (function (global, factory) {typeof exports === 'object' && typeof ...
- PHP怎么做成Qq空间相册,qq空间如何上传本地视频 相片制作视频传到QQ空间
相信很多网友都有上传QQ空间照片的喜好,我就是其中一个,拍了一张漂亮的PP,恨不得马上传到空间,炫耀一番.上传的照片日积月累,越来越多.平常要一张张的观看照片挺费时.最近学了一个新招,可以使用狸窝照片 ...
- quill上传本地视频(保姆级教学)
设置富文本参数 // 富文本框参数设置editorOption: {modules: {ImageExtend: {loading: false,name: 'file',action: UPLOAD ...
- tinymce编辑器上传本地视频预览
小白一枚,最近搞搞tinymce编辑器上传视频预览,视频标签变成了图片标签问题,看看之前其他博主的说明,感jio好麻烦,官网的也没整明白,所以自己瞎整整.勿喷!勿喷!勿喷!重要事情说三遍 首先是在ti ...
最新文章
- 避坑_node-sass安装问题及解决办法
- html5文件阅读器api,html 5 读取本地文件API
- 给孩子讲100个科学道理,不如带他做这些趣味实验!
- java中static x 5_java中static作用详解
- (计算机组成原理)第三章存储系统-第二节:基本的半导体原件和存储器芯片的原理
- MySQL查询数据表中数据记录(包括多表查询)
- 关闭Windows10 易升
- 小米笔记本适合计算机专业吗,真Pro还是假专业?细说小米新笔记本电脑五宗罪...
- linux 消息队列最大值,linux 消息队列的限制
- 数据结构——栈与队列的异同
- C语言——单词精确查找
- matlab车牌识别错误,matlab车牌识别调入切割函数后就不出图了?也没有显示错误...
- E4A易安卓Apost提交文本合并编码相关
- Go语言实现获取有道网页结果
- talib.AROON指标详解
- Oracle Data Guard的三种保护模式
- 举个栗子!Tableau 技巧(189):用拱形图 ARC chart 呈现数据分布
- python实现栅格计算器功能
- 自动化测试如何维护,维护过程中遇到哪些问题?
- GSM MODEN短信发送模块详解(短信的读取、发送过程和编码、解码过程)
热门文章
- SEO黑帽技术 - 3天关键词快速上首页
- “四书五经”经典语句
- 车辆维修、拖车、修车、应急救援、汽车救援、拖车脱困、电瓶搭电、流动补胎、换胎、道路救援、应急送油、抢修、快修、小程序、地库救援、高速救援、吊车救援、订单指派、钱包提现、axure原型
- 不要用碎片化的时间去学习新知识!除非它是简单的
- 基础爬虫案例爬取实战
- 2018年河北单招计算机试题,2018年河北单招英语模拟试题一【含答案】.doc
- [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比...
- npm installl preinstall
- windows 向 iPad导入文件
- Android 屏幕常亮