[英]Set caret position at a specific position in contenteditable div
SEE BEFORE MARKING DUPLICATE/DOWNVOTING 在标记重复/下降之前看到
I have seen many many solutions. 我见过很多解决方案。 Many by Tim Down, and others.
很多人都是Tim Down和其他人。 But none does work.
但没有一个可行。 I have seen
window.getSelection
, .addRange
etc. but don't see how they apply here. 我见过
window.getSelection
, .addRange
等,但是看不到它们在这里是如何应用的。
Here's a jsfiddle . 这是一个jsfiddle 。
(Tried) Code: (试过)代码:
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);
You need to position the caret within the text node inside your element, not the element itself. 您需要将插入符号放在元素内的文本节点中,而不是元素本身。 Assuming your HTML looks something like
<div contenteditable="true">Some text</div>
, using the firstChild
property of the element will get the text node. 假设您的HTML看起来像
<div contenteditable="true">Some text</div>
,使用元素的firstChild
属性将获得文本节点。
Updated jsFiddle: 更新了jsFiddle:
http://jsfiddle.net/xgz6L/8/ http://jsfiddle.net/xgz6L/8/
Code: 码:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.