/** * 遍历对象 * * @param {Object} obj * @param {Object} fn */ export function objForEach(obj, fn) { let key = void 0, result = void 0 for (key in obj) { if (obj.hasOwnProperty(key)) { result = fn.call(obj, key, obj[key]) if (result === false) { break } } } } /** * 遍历类数组 * * @param {Object} fakeArr * @param {Object} fn */ export function arrForEach(fakeArr, fn) { let i = void 0, item = void 0, result = void 0 let length = fakeArr.length || 0 for (i = 0; i < length; i++) { item = fakeArr[i] result = fn.call(fakeArr, item, i) if (result === false) { break } } } /** * 替换 html 特殊字符 * * @param {Object} html */ export function replaceHtmlSymbol(html) { if (html == null) { return '' } return html .replace(//gm, '>') .replace(/"/gm, '"') .replace(/(\r\n|\r|\n)/g, '
') } /** * 获取粘贴的纯文本 * * @param {Object} e */ export function getPasteText(e) { let clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) let pasteText = void 0 if (clipboardData == null) { pasteText = window.clipboardData && window.clipboardData.getData('text') } else { pasteText = clipboardData.getData('text/plain') } return replaceHtmlSymbol(pasteText) } /** * 获取粘贴的html * * @param {Object} e * @param {Object} filterStyle * @param {Object} ignoreImg */ export function getPasteHtml(e, filterStyle, ignoreImg) { let clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) let pasteText = void 0, pasteHtml = void 0 if (clipboardData == null) { pasteText = window.clipboardData && window.clipboardData.getData('text') } else { pasteText = clipboardData.getData('text/plain') pasteHtml = clipboardData.getData('text/html') } if (!pasteHtml && pasteText) { pasteHtml = '

' + replaceHtmlSymbol(pasteText) + '

' } if (!pasteHtml) { return } // 过滤word中状态过来的无用字符 let docSplitHtml = pasteHtml.split('') if (docSplitHtml.length === 2) { pasteHtml = docSplitHtml[0] } // 过滤无用标签 pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/gim, '') // 去掉注释 pasteHtml = pasteHtml.replace(//gm, '') // 过滤 data-xxx 属性 pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/gim, '') if (ignoreImg) { // 忽略图片 pasteHtml = pasteHtml.replace(//gim, '') } if (filterStyle) { // 过滤样式 pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/gim, '') } else { // 保留样式 pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/gim, '') } return pasteHtml } /** * 获取粘贴的图片文件 * * @param {Object} e */ export function getPasteImgs(e) { let result = [] let txt = getPasteText(e) if (txt) { // 有文字,就忽略图片 return result } let clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) || {} let items = clipboardData.items if (!items) { return result } objForEach(items, function(key, value) { let type = value.type if (/image/i.test(type)) { result.push(value.getAsFile()) } }) return result } /** * 获取拖拽的图片 * * @param {Object} e */ export function getDragPasteImg(e) { let result = [] let dataTransfer = e.dataTransfer || (e.originalEvent && e.originalEvent.dataTransfer) || {} let items = dataTransfer.items if (!items) { return result } objForEach(items, function(key, value) { let type = value.type if (/image/i.test(type)) { result.push(value.getAsFile()) } }) return result }