繁体   English   中英

将插入符号位置设置在contenteditable div中的特定位置

[英]Set caret position at a specific position in contenteditable div

在标记重复/下降之前看到

  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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM