在标记重复/否决之前查看
- contenteditable div 将没有子元素
- 我不想将位置设置在 div 的末尾
- 我不需要跨浏览器解决方案,只需要 Chrome 支持
- 只有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:
代码:
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/