|
@@ -119,6 +119,15 @@ export default {
|
|
|
}
|
|
|
return arr
|
|
|
},
|
|
|
+ //解析html实体
|
|
|
+ parsedText(text) {
|
|
|
+ // 创建一个新的 DOMParser 实例
|
|
|
+ const parser = new DOMParser();
|
|
|
+ // 解析包含 HTML 实体的字符串
|
|
|
+ const doc = parser.parseFromString(text, "text/html");
|
|
|
+ // 提取 body 中的文本内容,此时 HTML 实体已被转换
|
|
|
+ return doc.body.textContent || doc.body.innerText;
|
|
|
+ },
|
|
|
//修改html
|
|
|
changeHtml(data,tag){
|
|
|
var startIndex = 0
|
|
@@ -126,13 +135,21 @@ export default {
|
|
|
var endIndex = 0
|
|
|
var currentIndex = 0
|
|
|
var currentIndex1 = 0
|
|
|
+ debugger
|
|
|
for(var i = 0;i<data.length;i++){
|
|
|
- var a = data[i].text
|
|
|
- if(data[i].text.indexOf(' ')!=-1){
|
|
|
- a = data[i].text.replace(/ /g,' ')
|
|
|
- }
|
|
|
+ // var a = data[i].text
|
|
|
+ // if(data[i].text.indexOf(' ')!=-1){
|
|
|
+ // a = data[i].text.replace(/ /g,' ')
|
|
|
+ // }
|
|
|
+ // if(data[i].text.match(/&([a-z]+);/gi) && data[i].text.match(/&([a-z]+);/gi).length>0){
|
|
|
+ // var len = data[i].text.match(/&([a-z]+);/gi).length
|
|
|
+ // for(var j = 0;j<len;j++){
|
|
|
+ // a = a.replace(/&([a-z]+);/,' ')
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ var a = this.parsedText(data[i].text)
|
|
|
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 + a.length && !sign){
|
|
|
startIndex = i
|
|
|
sign = true
|
|
|
}else{
|
|
@@ -146,7 +163,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 + a.length){
|
|
|
endIndex = i
|
|
|
break
|
|
|
}else{
|
|
@@ -161,9 +178,22 @@ export default {
|
|
|
}
|
|
|
var arr = []
|
|
|
var item = data[startIndex]
|
|
|
- if(item.text.indexOf(' ')!=-1){
|
|
|
- item.text = item.text.replace(/ /g,' ')
|
|
|
- }
|
|
|
+ // if(item.text.indexOf(' ')!=-1){
|
|
|
+ // item.text = item.text.replace(/ /g,' ')
|
|
|
+ // }
|
|
|
+ // if(item.text.match(/&([a-z]+);/gi) && item.text.match(/&([a-z]+);/gi).length>0){
|
|
|
+ // // var len = item.text.match(/&([a-z]+);/gi).length
|
|
|
+ // // for(var i = 0;i<len;i++){
|
|
|
+ // // item.text = item.text.replace(/&([a-z]+);/,' ')
|
|
|
+ // // }
|
|
|
+ // const parser = new DOMParser();
|
|
|
+ // // 解析包含 HTML 实体的字符串
|
|
|
+ // const doc = parser.parseFromString(item.text, "text/html");
|
|
|
+ // // 提取 body 中的文本内容,此时 HTML 实体已被转换
|
|
|
+ // var a = doc.body.textContent || doc.body.innerText;
|
|
|
+ // console.log(a)
|
|
|
+ // }
|
|
|
+ item.text = this.parsedText(item.text)
|
|
|
if(startIndex == endIndex){
|
|
|
var prevTag = this.checkPrevTag(data,startIndex,tag)
|
|
|
var nextTag = this.checkNextTag(data,startIndex,tag)
|
|
@@ -173,6 +203,27 @@ export default {
|
|
|
if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
|
|
|
data[prevTag.index].del = true
|
|
|
data[nextTag.index].del = true
|
|
|
+ }else{
|
|
|
+ if(prevTag.index == startIndex - 1 && nextTag.index == endIndex + 1){
|
|
|
+ data[prevTag.index].del = true
|
|
|
+ data[nextTag.index].del = true
|
|
|
+ }
|
|
|
+ else if(prevTag.index == startIndex - 1 && nextTag.index != endIndex + 1){
|
|
|
+ data[prevTag.index].del = true
|
|
|
+ arr.push({type:'text',text:item.text})
|
|
|
+ arr.push({type:'tag',text:`</${tag}>`})
|
|
|
+ data.splice(startIndex,1,...arr)
|
|
|
+ }else if(prevTag.index != startIndex - 1 && nextTag.index == endIndex + 1){
|
|
|
+ arr.push({type:'tag',text:`<${tag}>`})
|
|
|
+ arr.push({type:'text',text:item.text})
|
|
|
+ data[nextTag.index].del = true
|
|
|
+ data.splice(startIndex,1,...arr)
|
|
|
+ }else if(prevTag.index != startIndex - 1 && nextTag.index != endIndex + 1){
|
|
|
+ arr.push({type:'tag',text:`<${tag}>`})
|
|
|
+ arr.push({type:'text',text:item.text})
|
|
|
+ arr.push({type:'tag',text:`</${tag}>`})
|
|
|
+ data.splice(startIndex,1,...arr)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}else if(this.selectObj.startIndex > currentIndex && this.selectObj.endIndex == currentIndex+item.text.length){
|
|
@@ -190,7 +241,10 @@ export default {
|
|
|
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
|
|
|
+
|
|
|
+ if(nextTag.index == endIndex + 1){
|
|
|
+ data[nextTag.index].del = true
|
|
|
+ }
|
|
|
data.splice(startIndex,1,...arr)
|
|
|
}
|
|
|
}else if(this.selectObj.startIndex == currentIndex && this.selectObj.endIndex < currentIndex+item.text.length){
|
|
@@ -206,8 +260,12 @@ export default {
|
|
|
data.splice(startIndex,1,...arr)
|
|
|
}
|
|
|
else if(prevTag.tag == `</${tag}>` && nextTag.tag == `<${tag}>`){
|
|
|
-
|
|
|
- data[prevTag.index].del = true
|
|
|
+ if(prevTag.index != startIndex - 1){
|
|
|
+ arr.push({type:'tag',text:`<${tag}>`})
|
|
|
+ }else{
|
|
|
+ data[prevTag.index].del = true
|
|
|
+ }
|
|
|
+ // 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)})
|
|
@@ -245,9 +303,16 @@ export default {
|
|
|
var nextTag = this.checkNextTag(data,startIndex,tag)
|
|
|
var betweenTag = this.checkBetweenTag(data,startIndex,endIndex,tag)
|
|
|
var item1 = data[endIndex]
|
|
|
- if(item1.text.indexOf(' ')!=-1){
|
|
|
- item1.text = item1.text.replace(/ /g,' ')
|
|
|
- }
|
|
|
+ // if(item1.text.indexOf(' ')!=-1){
|
|
|
+ // item1.text = item1.text.replace(/ /g,' ')
|
|
|
+ // }
|
|
|
+ // if(item1.text.match(/&([a-z]+);/gi) && item1.text.match(/&([a-z]+);/gi).length>0){
|
|
|
+ // var len = item1.text.match(/&([a-z]+);/gi).length
|
|
|
+ // for(var i = 0;i<len;i++){
|
|
|
+ // item1.text = item1.text.replace(/&([a-z]+);/,' ')
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ item1.text = this.parsedText(item1.text)
|
|
|
if(betweenTag.length==0){
|
|
|
var betweenText = this.checkBetweenText(data,startIndex,endIndex)
|
|
|
var prevTag = this.checkPrevTag(data,startIndex,tag) || {}
|