javascript - 在 contenteditable div 中的特定位置设置插入符位置

标签 javascript html google-chrome selection caret

在标记重复/否决之前查看

  1. contenteditable div 将没有子元素
  2. 我不想将位置设置在 div 的末尾
  3. 不需要跨浏览器解决方案,只需要 Chrome 支持
  4. 只有vanilla JS,没有库。

我见过很多解决方案。 Tim Down 和其他人的许多作品。但没有一个有效。我看过 window.getSelection.addRange 等,但看不到它们如何应用在这里。

这是一个 jsfiddle .

(试过)代码:

var node = document.querySelector("div");
node.focus();
var caret = 10; // insert caret after the 10th character say
var range = document.createRange();
range.setStart(node, caret);
range.setEnd(node, caret);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

最佳答案

您需要将插入符号定位在元素内的文本节点内,而不是元素本身。假设您的 HTML 看起来像 <div contenteditable="true">Some text</div> , 使用 firstChild元素的属性将获取文本节点。

更新的 jsFiddle:

http://jsfiddle.net/xgz6L/8/

代码:

var node = document.querySelector("div");
node.focus();
var textNode = node.firstChild;
var caret = 10; // insert caret after the 10th character say
var range = document.createRange();
range.setStart(textNode, caret);
range.setEnd(textNode, caret);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

关于javascript - 在 contenteditable div 中的特定位置设置插入符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24115860/

相关文章:

linux - BASH - 如何在网络接口(interface)启动并可访问互联网时执行少量应用程序?

css - chrome 和 firefox 之间的字体字距调整

google-chrome - 添加Google Charts或类似Chrome打包应用程序

javascript - componentWillUnmount 与 React useEffect Hook

javascript - 如何使用 vue-cli-3 设置从我的 webpack 构建中排除一个目录

javascript - 访问先前由另一个 html 文件填充的对象

html - &lt;input/> 上的 Opera 12.14 border-radius 不工作

javascript - 如何遍历具有相同前缀的id

javascript - JSON.parse 未捕获的语法错误 : Unexpected token o

jquery - 悬停div,更改:after pseudo of another div