diff --git a/src/App.vue b/src/App.vue index 8f9c2ac4eb88af3cad17c60faa146d90ffcf8731..c93e5fb26d59532c1dadd21a80814b852c1f54c3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -31,6 +31,7 @@ :id="textareaId" :fullScreen.sync="fullScreen" :text="text" + :height="textareaHeight" :html.sync="html" :htmlMinHeight="htmlMinHeight" v-if="showPreview" @@ -47,12 +48,14 @@ :maxLength="maxLength" :textLength.sync="textLength" :rows="rows" + :height="textareaHeight" :html.sync="html" :id="textareaId" :ref="'md_textarea' + id" @tab="$refs['md_header' + id].tab()" @submit="submit" @enter="$refs['md_header' + id].resetUlNum()" + @getFilteredTags="filteredTags = $event" v-else />
@@ -101,7 +104,7 @@ export default { // 初始化时赋值 value: { type: [String, Number], - default: " " + default: "" }, // 全屏时的z-index zIndex: { @@ -145,6 +148,11 @@ export default { type: [Number, String], default: "" }, + // 高度 + height: { + type: Number, + default: 0 + }, // 最大长度 maxLength: { type: [Number, String], @@ -164,6 +172,11 @@ export default { computed: { textareaId() { return "textarea_" + this.id; + }, + textareaHeight() { + const height = this.height; + if (!height) return 0; + return height - 83; } }, data() { @@ -172,6 +185,7 @@ export default { isFocus: false, showPreview: false, fileList: [], + filteredTags: [], text: "", html: "", ulNum: 1, @@ -242,6 +256,7 @@ export default { const checkResult = checktUrl(val, this.filePathRule); emitContent.invalidList = checkResult; } + emitContent.filteredTags = this.filteredTags; this.$emit("change", emitContent); this.$emit("input", emitContent); } diff --git a/src/assets/js/utils.js b/src/assets/js/utils.js index a42aeb367b4e2646b2c7b7336e3273241f961e35..17555d0528ff3f029fedaa579203ddbae3137863 100644 --- a/src/assets/js/utils.js +++ b/src/assets/js/utils.js @@ -173,8 +173,18 @@ export function checkBoswer() { ); return agent !== null; } - +// 去除头部空格行 export function removeBlankLine(val) { if (!val) return ""; return val.replace(/^\n/, ""); } + +// 获取被过滤掉的标签 +export function getFilteredTags(oldStr, newStr) { + if (oldStr.length - newStr.length === 0) return []; + const filteredStr = oldStr.replace(newStr.trim(), ""); + const virtualDom = document.createElement("div"); + virtualDom.innerHTML = filteredStr; + const filteredTags = Array.from(virtualDom.getElementsByTagName("*")); + return filteredTags; +} diff --git a/src/components/content/md-preview.vue b/src/components/content/md-preview.vue index 8f719277485f1e17c51732fa195f2c5f5d6567a7..983fdf363e19366abcb9bbc217575cae3cdc368d 100644 --- a/src/components/content/md-preview.vue +++ b/src/components/content/md-preview.vue @@ -1,6 +1,12 @@