javascript - 有没有一种简单的方法可以阻止光标在 div contenteditable 中移动,即使使用 JavaScript 添加文本?

标签 javascript html cursor

我有以下代码:

document.getElementById("myDiv").addEventListener("keydown", function (e){
  if (e.keyCode == 8) {
    this.innerHTML += "⠀".repeat(4);
    e.preventDefault();
  }
  //moves cursor
});
<div id="myDiv" contenteditable="true">Enter text.</div>
我见过类似的问题,但我看到的答案对于 div contenteditable 来说是不够的,而且其中许多根本不起作用。
如何确保光标不会自动移动?

最佳答案

试试这个。

const el = document.getElementById("myDiv");
const sel = window.getSelection();
const offset = sel.getRangeAt(0).startOffset;

el.innerHTML += 'Text needed to be added'; // perform operations here

const nRange = document.createRange();
nRange.setStart(el.childNodes[0], offset);
nRange.collapse(true);

sel.removeAllRanges();
sel.addRange(nRange);

我还没有检查所有浏览器。您必须执行一些额外的步骤才能获得浏览器兼容性,但这就是要点。

此处演示:https://jsbin.com/xesitepima/edit?html,js,output

部分摘自:https://stackoverflow.com/a/6249440/2492924

关于javascript - 有没有一种简单的方法可以阻止光标在 div contenteditable 中移动,即使使用 JavaScript 添加文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58564024/

相关文章:

html - 我怎样才能在不同高度的 div 中垂直放置 4 个盒子?

Java - 如何在没有 Swing 组件的情况下更改光标?

javascript - 这个 Redux reducer 示例是 Pro React 16 书中的 kosher 吗?

javascript - document.onclick 与 window.onclick

javascript - for循环中的多个随机结果?

javascript - 当ui-router改变状态时, Angular Controller 范围不会破坏变量

jquery - 如何增加多选下拉列表中两个选项之间的行高

javascript - 检查文本值的一部分是否包含在另一个文本值中

java - 如何管理数百个插入?

Android SQLite,如何从列中获取值?