<div
ref="contentRichText"
class="send-content"
contenteditable="true"
placeholder="请输入"
@paste="handlePaste"
@input="handleInput"
></div>
在项目中用div实现了一个简单的文本域,如上。发现了一个坑,输入的内容,实际是在input函数handleInput中通过innerText获取的(如下)
// 输入内容检测字符数
handleInput(e) {
// innerText获取文本域中内容
this.smsContent = e.target.innerText;
// 检测字符数
},
在文本域中敲回车输入一个空行时,innerText获取到的字符串比实际的要多出来一个\n换行符,导致控制台打印输出的内容,比实际在文本域中显示的内容多出来一个空行,如下图
根据上面的图,实际只敲了两下回车,但是innerText有3个\n换行符,且每多一个空行就会多一个换行符,导致实际获取到的内容比文本域显示的内容多出来很多空行,如下
这可能和innerText的识别转换机制有关,查阅了很久也没有找到具体的原因是啥,因为项目实际需求需要统计字符数量,所以这里导致统计不准确,而且空行越多越不准确,最后想到了一个解决方法:既然每多一空行,innerText就会多出来一个\n(识别出两个\n),那只需要在获取内容时,将所有的"\n\n"替换成"\n"就可以了,代码如下:
// 输入内容是检测字符数
handleInput(e) {
// innerText会将空行转成多个\n,特殊处理
this.smsContent = e.target.innerText.replaceAll("\n\n", "\n");
//统计字符数方法
this.sumary()
},