javascript - 在 Chrome/webkit 的 contenteditable div 层中设置插入符号位置

标签 javascript html contenteditable caret

我正在尝试在可编辑的 div 层中设置插入符位置,经过一些网络搜索和试验后,我使用它在 Firefox 中使用它:

function set(element,position){
    element.focus();
    var range= window.getSelection().getRangeAt(0);
    range.setStart(element.firstChild,position);
    range.setEnd(element.firstChild,position);
}

[...]

set(document.getElementById("test"),3);

但在 Chrome/webkit 中它会选择 div 中的所有内容。这是 webkit 的错误还是我做错了什么?
提前谢谢你。

最佳答案

如果节点是文本节点,节点内 Range 边界的偏移量只是一个字符偏移量。如果节点是元素,则偏移量是边界之前的子节点数。

例如,如果您有 HTML

<div id="myDiv">One <b>two</b> three</div>

...然后您创建一个范围如下:

var range = document.createRange();
var myDiv = document.getElementById("myDiv");
range.setStart(myDiv, 1);
range.setEnd(myDiv, 1);

...您将获得一个范围,该范围在 div 的第一个子节点(文本节点)之后立即开始和结束:

<div id="myDiv">One |<b>two</b> three</div>

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

相关文章:

javascript - 使用受控输入 react contentEditable div

Jquery 范围选择 contenteditable 上的上一个元素 ="false"

javascript - 想要将网站上的所有单词颜色设为蓝色并大写

javascript - 有没有办法在 chrome 或 firebox 调试器的堆栈跟踪中隐藏第 3 方 JS 函数调用?

javascript - Node 中的 const,在不同的 block 中

javascript - AWS S3 直接通过浏览器下载文件

html - 行内 block 元素是否可以在多行上对齐

javascript - contentEditable 游标的父元素

javascript - 为什么 ObservableArray 对象的访问在子 foreach 中不起作用?

jquery - 转换完成后监听新事件