瀏覽代碼

解决高亮bug

zhuliu 1 年之前
父節點
當前提交
60158e3324
共有 2 個文件被更改,包括 29 次插入4 次删除
  1. 2 1
      src/utils/model/RichText/index.vue
  2. 27 3
      src/utils/model/RichText/mixins.js

+ 2 - 1
src/utils/model/RichText/index.vue

@@ -80,9 +80,10 @@ export default {
     // window.onclick = this.hideCustomMenu
     window.addEventListener('click',function(event){
       var customMenu = that.$refs.customMenu
-      if (event.target != customMenu && !customMenu.contains(event.target)) {
+      if (customMenu && event.target != customMenu && !customMenu.contains(event.target)) {
           customMenu.style.display = "none";
       }
+      
     })
     window.onkeydown = this.checkKeyPress
   },

+ 27 - 3
src/utils/model/RichText/mixins.js

@@ -114,7 +114,7 @@ export default {
             var currentIndex1 = 0
             for(var i = 0;i<data.length;i++){
                 if(data[i].type == 'text'){
-                    if(this.selectObj.startIndex >= currentIndex && this.selectObj.startIndex<=currentIndex + data[i].text.length && !sign){
+                    if(this.selectObj.startIndex >= currentIndex && this.selectObj.startIndex<currentIndex + data[i].text.length && !sign){
                         startIndex = i
                         sign = true
                     }else{
@@ -123,7 +123,7 @@ export default {
                         }
                         
                     }
-                    if(this.selectObj.endIndex >= currentIndex1 && this.selectObj.endIndex<=currentIndex1 + data[i].text.length){
+                    if(this.selectObj.endIndex > currentIndex1 && this.selectObj.endIndex<=currentIndex1 + data[i].text.length){
                         endIndex = i
                         break
                     }else{
@@ -136,6 +136,7 @@ export default {
             if(startIndex == endIndex){
                 var prevTag = this.checkPrevTag(data,startIndex,tag)
                 var nextTag = this.checkNextTag(data,startIndex,tag)
+               
                 if(prevTag && nextTag){
                     if(this.selectObj.startIndex == currentIndex && this.selectObj.endIndex == currentIndex+item.text.length){
                         if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
@@ -153,6 +154,14 @@ export default {
                                 }
                                 data.splice(startIndex,1,...arr)
                             }
+                            else if(prevTag.tag == `</${tag}>` && nextTag.tag == `<${tag}>`){
+                                
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                data[nextTag.index].del = true
+                                data.splice(startIndex,1,...arr)
+                            }
                     }else if(this.selectObj.startIndex == currentIndex && this.selectObj.endIndex < currentIndex+item.text.length){
                             if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
                                 if(prevTag.index != startIndex - 1){
@@ -163,6 +172,14 @@ export default {
                                 arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
                                 data.splice(startIndex,1,...arr)
                             }
+                            else if(prevTag.tag == `</${tag}>` && nextTag.tag == `<${tag}>`){
+                                
+                                data[prevTag.index].del = true
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.endIndex - currentIndex)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
                     }else if(this.selectObj.startIndex > currentIndex && this.selectObj.endIndex < currentIndex+item.text.length){
                         if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
                             arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
@@ -171,6 +188,13 @@ export default {
                             arr.push({type:'tag',text:`<${tag}>`})
                             arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
                             data.splice(startIndex,1,...arr)
+                        }else if(prevTag.tag == `</${tag}>` && nextTag.tag == `<${tag}>`){
+                            arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                            arr.push({type:'tag',text:`<${tag}>`})
+                            arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,this.selectObj.endIndex - currentIndex)})
+                            arr.push({type:'tag',text:`</${tag}>`})
+                            arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
+                            data.splice(startIndex,1,...arr)
                         }
                     }
                 }
@@ -233,7 +257,7 @@ export default {
                                 data.splice(startIndex,1,...arr)
                             }
                             else if(this.selectObj.startIndex > currentIndex && this.selectObj.startIndex == currentIndex + item.text.length){
-                                arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length)})
                                 arr.push({type:'tag',text:`</${tag}>`})
                                 arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
                                 data.splice(endIndex,1,...arr)