1 回答
TA贡献1829条经验 获得超7个赞
好的,我已经设法通过解决方法解决了这个问题,想法是:
1- 将我们从 ckeditor 获得的全部字符串解析content.getData()
为 HTMLCollection,
2- 遍历 html 标签并通过检查属性textContent删除任何没有文字的标签,一旦标签有文字退出循环。
3-在其中包含单词的标签内循环,并通过拆分将字符串转换为单词数组str.split(' ')
并遍历数组并删除每个单词,<br>
或者
直到到达这些标签和实体以外的任何内容,然后退出循环。
4- 您需要从(从 ckeditor 获得的全部文本)的开头和结尾经历这个过程。
trimedCkEditorText() {
let contentStr = this.content.getData();
// Remove Extra whitespaces at the begining of the text
contentStr = this.trimedCkEditorTextAt(contentStr, true);
// Remove Extra whitespaces at the end of the text
contentStr = this.trimedCkEditorTextAt(contentStr, false);
return contentStr;
},
trimedCkEditorTextAt(contentStr, startOfText) {
const parser = new DOMParser();
const doc = parser.parseFromString(contentStr, "text/html")
// Check first child
while(doc.body.children.length) {
const index = startOfText ? 0 : doc.body.children.length - 1;
const child = doc.body.children[index];
if(child.textContent.replace(/\s/g, '').length) {
// Remove <br> tags
while(child.children.length) {
const index = startOfText ? 0 : child.children.length - 1;
const grandechild = child.children[index];
if(grandechild.localName === 'br') grandechild.remove();
else break;
}
// Remove
const childTextArray = child.innerHTML.split(' ');
while(childTextArray.length) {
const index = startOfText ? 0 : childTextArray.length - 1;
if(childTextArray[index] === ' ') childTextArray.splice(index, 1);
else break;
}
child.innerHTML = childTextArray.join(' ');
break;
} else {
child.remove();
}
}
return doc.body.innerHTML;
}
添加回答
举报