想要在enter 发送内容的情况下,客户按ctrl+enter实现换行
<div
class="edit-panel"
contenteditable="true"
@keyup.ctrl.enter="lineFeed"
ref="editor"
></div>
对应的lineFeed()函数
lineFeed(){
if(this.sendHotKey === "Enter"){
var el = this.$refs.editor;
var range = document.createRange();
//返回用户当前的选区
var sel = document.getSelection();
//获取当前光标位置
var offset = sel.focusOffset;
// 正常文本补充换行
if (!this.$refs.editor.innerHTML.endsWith('\n')) {
this.$refs.editor.innerHTML += '\r\n';
}
// 新增一个换行
this.$refs.editor.innerHTML += '\r\n';
// 重置光标到结尾
range.setStart(el.childNodes[0], offset+1);
//使得选区(光标)开始与结束位置重叠
range.collapse(true);
//移除现有其他的选区
sel.removeAllRanges();
//加入光标的选区
sel.addRange(range);
}
},
方法二
lineFeed(){
if(this.sendHotKey === "Enter"){
var el = this.$refs.editor;
var range = document.createRange();
//返回用户当前的选区
var sel = document.getSelection();
//获取当前光标位置
var offset = sel.focusOffset;
// 正常文本补充换行
if (!this.$refs.editor.innerHTML.endsWith('\n')) {
this.$refs.editor.innerHTML += '\r\n';
}
// 新增一个换行
this.$refs.editor.innerHTML += '\r\n';
// 重置光标到结尾
range.setStart(el.childNodes[0], offset+1);
//使得选区(光标)开始与结束位置重叠
range.collapse(true);
//移除现有其他的选区
sel.removeAllRanges();
//加入光标的选区
sel.addRange(range);
}
},