html 长域编辑框,【Web前端问题】div使用contenteditable作为编辑框,如何设置光标?...

在编辑器中使用emoji功能时遇到光标回跳至首位的问题。通过研究和尝试,发现可以通过在编辑框获取焦点时设置光标位置来解决。提供的代码示例展示了如何在Vue中实现这一功能,对于其他遇到类似问题的开发者可能有所帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

insertEmoji: function (url) {

var tpl = `%24%7B%20url%20%7D`

// console.log(this.replyContent);

this.replyContent += tpl

// console.log(this.replyContent);

},

changeData: function (event) {

this.replyContent = event.srcElement.innerHTML

// this.$set(this.$data, 'replyContent', event.srcElement.innerHTML)

}

执行emoji方法后,输入的时候,光标回回跳到首位

请问有什么解决方案?或者emoji有什么方法插入容器?

very much Thanks in advance~~~

回答:

结贴!!!

在网上搜索了许多解决办法,均是用getSelection、getRange(0)去设置光标解决

一开始,也是顺着这样的方向摸索,在keyup和插入图片都分别设置光标,但是问题百出

最后,意外发现,因为keyup和插入图片均是编辑框的事件,所以给编辑框设置光标即可解决问题

分享下我的代码,希望能帮助到有需要的人

var edit = document.querySelector('.edit')

edit.onfocus = function () {

window.setTimeout(function () {

var sel, range;

if (window.getSelection && document.createRange) {

range = document.createRange();

range.selectNodeContents(edit);

range.collapse(true);

range.setEnd(edit, edit.childNodes.length);

range.setStart(edit, edit.childNodes.length);

sel = window.getSelection();

sel.removeAllRanges();

sel.addRange(range);

} else if (document.body.createTextRange) {

range = document.body.createTextRange();

range.moveToElementText(edit);

range.collapse(true);

range.select();

}

}, 1)

}

edit.focus();

附上参考url: 参考链接

回答:

我没有明白你到底要干嘛,你给div设置了contenteditable=”true”,那它就是一个输入框了啊,点击获取焦点,输入内容,光标没有出现问题啊,反正我是没看到到底发生了什么

429559fc26b3edfe1c6f38c0f696ef29.png

对比:

75f62f10d645cd288be88d3efad1aa3c.png

你的原意是想动态插入一个图片?

监听输入框输入事件,然后获取img的定位值(字体大小加上letter-spacing值),你试试这样吧,vue没用过,所以只能给你一点原生js实现的建议,有文档的话,你去找找文档吧

回答:

document.execCommand(“insertHTML”,false, ‘test.png’);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值